Résolution de l'equation de chaleur
Résolu/Fermé
mirinda
-
27 avril 2008 à 02:33
dhekra88 Messages postés 3 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 19 décembre 2012 - 19 déc. 2012 à 11:39
dhekra88 Messages postés 3 Date d'inscription lundi 17 décembre 2012 Statut Membre Dernière intervention 19 décembre 2012 - 19 déc. 2012 à 11:39
A voir également:
- Résolution de l'equation de chaleur
- Cette resolution n'est pas prise en charge par cette tv modifiez la ✓ - Forum Format et connectique vidéo
- Chaleur cpu - Guide
- Problème résolution écran 1920x1080 - Forum Windows 10
- Écrire un programme qui résout une équation du second degré ✓ - Forum C
- Impossible de charger l'image haute résolution messenger ✓ - Forum Mobile
53 réponses
dhekra88
Messages postés
3
Date d'inscription
lundi 17 décembre 2012
Statut
Membre
Dernière intervention
19 décembre 2012
19 déc. 2012 à 11:39
19 déc. 2012 à 11:39
les méthode de résolutions sont très simples, ils existe plusieurs guides j'ai vous aidez
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
27 avril 2008 à 16:01
27 avril 2008 à 16:01
Salut
T'as pas compris la méthode? Voilà des explications:
http://www.sciences.univ-nantes.fr/physique/perso/aloui/m_numeri/71derpar/71derpar.htm
http://perso.fundp.ac.be/~amayer/cours/app.num/Chaleur/Chaleur.html
A plus
T'as pas compris la méthode? Voilà des explications:
http://www.sciences.univ-nantes.fr/physique/perso/aloui/m_numeri/71derpar/71derpar.htm
http://perso.fundp.ac.be/~amayer/cours/app.num/Chaleur/Chaleur.html
A plus
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
29 avril 2008 à 17:14
29 avril 2008 à 17:14
Salut
Si j est l'indice relatif à la discrétisation temporelle, on exprime le terme d'indice j+1 en fonction des termes d'indices j et j-1.
Méthode explicite/implicite:
https://en.wikipedia.org/wiki/Explicit_and_implicit_methods
http://mathias.bavay.free.fr/these/html/node308.html
En gros, pour résumer, pour la méthode explicite on a directement le terme d'indice j+1 et pour la méthode implicite on a à inverser une matrice.
Pour la programmation ça prend 5min alors je te laisse le faire.
Si j est l'indice relatif à la discrétisation temporelle, on exprime le terme d'indice j+1 en fonction des termes d'indices j et j-1.
Méthode explicite/implicite:
https://en.wikipedia.org/wiki/Explicit_and_implicit_methods
http://mathias.bavay.free.fr/these/html/node308.html
En gros, pour résumer, pour la méthode explicite on a directement le terme d'indice j+1 et pour la méthode implicite on a à inverser une matrice.
Pour la programmation ça prend 5min alors je te laisse le faire.
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
28 mai 2008 à 14:48
28 mai 2008 à 14:48
Il y a une coquille ici:
Si j est l'indice relatif à la discrétisation temporelle, on exprime les termes d'indice j+1 en fonction des termes d'indice j. L'EDP est du premier ordre par rapport au temps...
Si j est l'indice relatif à la discrétisation temporelle, on exprime les termes d'indice j+1 en fonction des termes d'indice j. L'EDP est du premier ordre par rapport au temps...
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
1 mai 2008 à 16:10
1 mai 2008 à 16:10
Salut
Tout est écrit dans tes cours et les liens que je t'ai donnés.
A plus
Tout est écrit dans tes cours et les liens que je t'ai donnés.
A plus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
3 mai 2008 à 20:30
3 mai 2008 à 20:30
Salut
Le code pour le schéma implicite a l'air correct, il marche bien? Désolé je l'ai pas testé, j'ai pas scilab.
S'il marche pas je peux faire une ou deux adaptations et le tester avec autre chose, dans ce cas dis-moi.
Pour le schéma implicite, au lieu de discrétiser la dérivée spatiale au temps n, tu discrétises la dérivée spatiale au temps n+1.
Au lieu d'avoir U(n+1)=BU(n) ou B=I+M comme tu avais pour le schéma explicite, si je me trompe pas tu auras B'U(n+1)=U(n) ou B'=I-M. J'ai trouvé un lien sur l'équation de la chaleur où ça parle de schéma explicite/implicite si tu veux jeter un œil:
http://www-cast3m.cea.fr/cast3m/html/Dabbene/R03035/node19.html
Contrairement au schéma explicite qui est stable si 2adt<dx², le schéma implicite est inconditionnellement stable.
Le code pour la méthode implicite devrait être un peu plus compliqué puisque tu as à inverser une matrice. Mais c'est pas dramatique non plus. Par contre le code sera plus lent.
A plus
Le code pour le schéma implicite a l'air correct, il marche bien? Désolé je l'ai pas testé, j'ai pas scilab.
S'il marche pas je peux faire une ou deux adaptations et le tester avec autre chose, dans ce cas dis-moi.
Pour le schéma implicite, au lieu de discrétiser la dérivée spatiale au temps n, tu discrétises la dérivée spatiale au temps n+1.
Au lieu d'avoir U(n+1)=BU(n) ou B=I+M comme tu avais pour le schéma explicite, si je me trompe pas tu auras B'U(n+1)=U(n) ou B'=I-M. J'ai trouvé un lien sur l'équation de la chaleur où ça parle de schéma explicite/implicite si tu veux jeter un œil:
http://www-cast3m.cea.fr/cast3m/html/Dabbene/R03035/node19.html
Contrairement au schéma explicite qui est stable si 2adt<dx², le schéma implicite est inconditionnellement stable.
Le code pour la méthode implicite devrait être un peu plus compliqué puisque tu as à inverser une matrice. Mais c'est pas dramatique non plus. Par contre le code sera plus lent.
A plus
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
5 mai 2008 à 13:10
5 mai 2008 à 13:10
Salut
Je fais remonter ton message pour pas oublier d'y regarder aujourd'hui.
A plus
Je fais remonter ton message pour pas oublier d'y regarder aujourd'hui.
A plus
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
6 mai 2008 à 17:11
6 mai 2008 à 17:11
Salut
Je réponds à ta première interrogation pour le schéma explicite.
Ton code il est complet au niveau du calcul de la solution numérique, t'as la solution sur [0,nt.dt]. T'as pas seulement la solution initiale.
Si tu veux comparer avec la solution exacte, il faut que tu la calcules, elle s'exprime à l'aide de la fonction erf.
https://fr.wikipedia.org/wiki/Conduction_thermique
https://fr.wikipedia.org/wiki/Fonction_d%27erreur
Je regarde pour le schéma implicite.
A plus tard
Je réponds à ta première interrogation pour le schéma explicite.
Ton code il est complet au niveau du calcul de la solution numérique, t'as la solution sur [0,nt.dt]. T'as pas seulement la solution initiale.
Si tu veux comparer avec la solution exacte, il faut que tu la calcules, elle s'exprime à l'aide de la fonction erf.
https://fr.wikipedia.org/wiki/Conduction_thermique
https://fr.wikipedia.org/wiki/Fonction_d%27erreur
Je regarde pour le schéma implicite.
A plus tard
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
7 mai 2008 à 14:06
7 mai 2008 à 14:06
Salut
Je viens enfin de regarder ton code pour le schéma implicite.
Pour la matrice, je rajouterais des -dt/(dx*dx) dans les coins de la matrice, même si ça a l'air de marcher de la façon dont c'est écrit.
Sinon ça roule. À part que je comprends toujours pas quand tu dis "j'ai traité que la solution initiale". Là on voit bien les courbes s'afficher une par une à tous les pas de temps. Pas seulement la solution initiale.
Voilà, à plus
Je viens enfin de regarder ton code pour le schéma implicite.
Pour la matrice, je rajouterais des -dt/(dx*dx) dans les coins de la matrice, même si ça a l'air de marcher de la façon dont c'est écrit.
mat(1,2*nx+1) = -dt/(dx*dx) ; mat(2*nx+1,1) = -dt/(dx*dx) ;
Sinon ça roule. À part que je comprends toujours pas quand tu dis "j'ai traité que la solution initiale". Là on voit bien les courbes s'afficher une par une à tous les pas de temps. Pas seulement la solution initiale.
Voilà, à plus
mirinda
Messages postés
51
Date d'inscription
dimanche 27 avril 2008
Statut
Membre
Dernière intervention
4 mai 2009
38
7 mai 2008 à 15:38
7 mai 2008 à 15:38
salut ,merci beaucoup pour tous ces informations ,ce que j'ai voulu c'est comment comparer la solution initiale avec la solution exacte .tu ma conseillé d'utiliser la fonction erf , est ce qu'il n y a pas autre méthode pour faire cette comparaison ?je veux savoir aussi est ce que c'est nécessaire de faire une comparaison au temps final .Est ce que tu peux me donner des explications concernant le principe de maximun discret ?merci d'avance
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
7 mai 2008 à 16:05
7 mai 2008 à 16:05
Salut mirinda
Si tu calcules pas la solution exacte, tu ne pourras pas la comparer quoi que ce soit. Concernant l'utilisation de la fonction erf pour calculer la solution exacte, c'est pas dans tous les cas vraisemblablement. Je t'avais parlé de erf à cause d'un vague souvenir mais en relisant la page Wikipédia que je t'ai donnée au message 10, c'est pas toujours avec cette fonction que la solution exacte s'exprime.
Par exemple , avec un Dirac de température en (0,0) la solution exacte de l'edp est très simple.
Par contre, t'es sure d'utiliser le bon mot quand tu écris comparer la solution initiale avec la solution exacte?
Depuis le début j'ai un peu de mal à comprendre à chaque fois que tu parles d'initial et finalement je me dis que tu veux peut-être dire numérique plutôt, c'est ça?
Du coup je répondais jamais à ta question...
Si tu veux comparer la solution numérique et la solution exacte à tous les pas de temps, il faudra que tu penses à modifier un peu le code, parce que là au final, il te reste que la solution au dernier pas de temps, puisqu'à chaque passage dans la boucle tu copies les valeurs au temps n+1 dans le même vecteur que celui utilisé pour le temps n.
Si tu veux faire ça, sauve la température dans une matrice. Les lignes pour l'espace et les colonnes pour le temps par exemple.
A plus
Si tu calcules pas la solution exacte, tu ne pourras pas la comparer quoi que ce soit. Concernant l'utilisation de la fonction erf pour calculer la solution exacte, c'est pas dans tous les cas vraisemblablement. Je t'avais parlé de erf à cause d'un vague souvenir mais en relisant la page Wikipédia que je t'ai donnée au message 10, c'est pas toujours avec cette fonction que la solution exacte s'exprime.
Par exemple , avec un Dirac de température en (0,0) la solution exacte de l'edp est très simple.
Par contre, t'es sure d'utiliser le bon mot quand tu écris comparer la solution initiale avec la solution exacte?
Depuis le début j'ai un peu de mal à comprendre à chaque fois que tu parles d'initial et finalement je me dis que tu veux peut-être dire numérique plutôt, c'est ça?
Du coup je répondais jamais à ta question...
Si tu veux comparer la solution numérique et la solution exacte à tous les pas de temps, il faudra que tu penses à modifier un peu le code, parce que là au final, il te reste que la solution au dernier pas de temps, puisqu'à chaque passage dans la boucle tu copies les valeurs au temps n+1 dans le même vecteur que celui utilisé pour le temps n.
Si tu veux faire ça, sauve la température dans une matrice. Les lignes pour l'espace et les colonnes pour le temps par exemple.
A plus
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
8 mai 2008 à 22:28
8 mai 2008 à 22:28
Salut
Ton cas est traité ici:
https://fr.wikipedia.org/wiki/Conduction_thermique#Cas_d.27un_domaine_limit.C3.A9_par_deux_plans_parall.C3.A8les
C'est dans la page Wikipédia que je t'avais donnée au message 10 (sauf que dans ton cas c'est un peu plus simple puisque t'es en 1D). Il faut développer en série de Fourier.
Pour l'histoire de la matrice, à chaque pas de temps tu stockes ta solution dans un vecteur colonne. Au final t'as une matrice. Les lignes correspondent à la solution en un point d'espace aux différents pas de temps. Les colonnes correspondent à la solution à un pas de temps donné aux différents pas d'espace.
Et j'avais oublié de répondre à ta question pour le maximum discret. Jamais entendu parler. Mais c'est très surememt le maximum de la solution numérique.
A plus
Ton cas est traité ici:
https://fr.wikipedia.org/wiki/Conduction_thermique#Cas_d.27un_domaine_limit.C3.A9_par_deux_plans_parall.C3.A8les
C'est dans la page Wikipédia que je t'avais donnée au message 10 (sauf que dans ton cas c'est un peu plus simple puisque t'es en 1D). Il faut développer en série de Fourier.
Pour l'histoire de la matrice, à chaque pas de temps tu stockes ta solution dans un vecteur colonne. Au final t'as une matrice. Les lignes correspondent à la solution en un point d'espace aux différents pas de temps. Les colonnes correspondent à la solution à un pas de temps donné aux différents pas d'espace.
Et j'avais oublié de répondre à ta question pour le maximum discret. Jamais entendu parler. Mais c'est très surememt le maximum de la solution numérique.
A plus
Sacabouffe
Messages postés
9427
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 832
9 mai 2008 à 13:15
9 mai 2008 à 13:15
Salut
Au passage, je voulais te demander si t'avais pas fait d'erreur non plus quand t'avais écrit dans ton message 4: u(0,t)-u(l,t)=0
Parce que ça colle pas avec ce que t'as écrit après dans le même message: U0n+1=UM+1n+1=0
S'il s'agit deu(0,t)=u(l,t)=0 les choses sont un peu différentes.
Le premier cas correspond à un milieu fermé, comme si les extrémités se touchaient, ou encore à un milieu infini périodique.
Le deuxième cas correspond à un segment avec condition de Dirichlet aux extrémités. Celles-ci sont maintenues à une température de 0°.
Il faudrait que tu me dises ce que tu devais faire exactement. Parce que moi j'étais parti sur le premier truc. Si c'est pas ça, il y a une ou deux toutes petites modifs à apporter.
A plus.
Au passage, je voulais te demander si t'avais pas fait d'erreur non plus quand t'avais écrit dans ton message 4: u(0,t)-u(l,t)=0
Parce que ça colle pas avec ce que t'as écrit après dans le même message: U0n+1=UM+1n+1=0
S'il s'agit deu(0,t)=u(l,t)=0 les choses sont un peu différentes.
Le premier cas correspond à un milieu fermé, comme si les extrémités se touchaient, ou encore à un milieu infini périodique.
Le deuxième cas correspond à un segment avec condition de Dirichlet aux extrémités. Celles-ci sont maintenues à une température de 0°.
Il faudrait que tu me dises ce que tu devais faire exactement. Parce que moi j'étais parti sur le premier truc. Si c'est pas ça, il y a une ou deux toutes petites modifs à apporter.
A plus.
mirinda
Messages postés
51
Date d'inscription
dimanche 27 avril 2008
Statut
Membre
Dernière intervention
4 mai 2009
38
3 juil. 2008 à 15:18
3 juil. 2008 à 15:18
salut
D'accord, merci
Concernant les programmes que j'ai fait en scilab, je veux obtenir les résultats par des courbes en 3d, est ce que vous pouvez me dire qu'ils sont les changements que je dois faire dans les programmes pour obtenir ces graphes en 3dimension, je sait qu'il faut utiliser plot3d mais comment ? voici un programme explicite que je veux le rendre en 3d
lg = 1. ; // lg = longueur du domaine
dx = 0.05 ; // dx = pas d'espace
M= lg/dx; // nx = nombre de mailles
a = 1. ; //
cfl = 0.4 ; // cfl
dt = dx*dx*cfl ; // dt = pas de temps
tfinal = 0.005 ;
nt = int(tfinal/dt) ; // nt = nombre de pas de temps effectues
//
// initialisationu
//
x=zeros(1,M+1) ;
u0=zeros(1,M+1) ;
uexacte=u0;
for i=1:M+1
x(i) = (i-1)*dx ;
u0(i) = sin(x(i)*%pi) ;
end
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics);
plot2d(x,u0,1,"000")
xtitle ('donnee initiale' ,' ',' ') ;
u = u0.' ;
A=eye(M-1,M-1);
B=-2*dt/(dx*dx)*eye(M-1,M-1);
C=dt/(dx*dx)*diag(ones(M-2,1),1);
D=dt/(dx*dx)*diag(ones(M-2,1),-1);
for n=1:nt
u(2:M)=(A+B+C+D)*u(2:M);
u(1)=0;
u(M+1)=0;
//affichage de u
xbasc()
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics)
plot2d(x,u0,[1,1],"100","solution initiale")
plot2d(x,u,[2,2],"100","schema explicite")
xtitle('schema explicite ',' ',' ');
xpause(10000)
end
uexacte=zeros(1,M+1);
tfinal=nt*dt;
for j=1:M+1
uexacte(j)=sin(%pi*(j-1)*dx)*exp(-(%pi^2)*nt*dt);
end
xbasc()
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics);
plot2d(x,u0,[1,1],"100","solution initiale")
plot2d(x,u,[2,2],"100","schema approchée")
plot2d(x,uexacte,[3,3],"100","solution exacte")
xtitle('schema explicite , cfl=0.4',' ',' ');
end
merci d'avance
D'accord, merci
Concernant les programmes que j'ai fait en scilab, je veux obtenir les résultats par des courbes en 3d, est ce que vous pouvez me dire qu'ils sont les changements que je dois faire dans les programmes pour obtenir ces graphes en 3dimension, je sait qu'il faut utiliser plot3d mais comment ? voici un programme explicite que je veux le rendre en 3d
lg = 1. ; // lg = longueur du domaine
dx = 0.05 ; // dx = pas d'espace
M= lg/dx; // nx = nombre de mailles
a = 1. ; //
cfl = 0.4 ; // cfl
dt = dx*dx*cfl ; // dt = pas de temps
tfinal = 0.005 ;
nt = int(tfinal/dt) ; // nt = nombre de pas de temps effectues
//
// initialisationu
//
x=zeros(1,M+1) ;
u0=zeros(1,M+1) ;
uexacte=u0;
for i=1:M+1
x(i) = (i-1)*dx ;
u0(i) = sin(x(i)*%pi) ;
end
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics);
plot2d(x,u0,1,"000")
xtitle ('donnee initiale' ,' ',' ') ;
u = u0.' ;
A=eye(M-1,M-1);
B=-2*dt/(dx*dx)*eye(M-1,M-1);
C=dt/(dx*dx)*diag(ones(M-2,1),1);
D=dt/(dx*dx)*diag(ones(M-2,1),-1);
for n=1:nt
u(2:M)=(A+B+C+D)*u(2:M);
u(1)=0;
u(M+1)=0;
//affichage de u
xbasc()
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics)
plot2d(x,u0,[1,1],"100","solution initiale")
plot2d(x,u,[2,2],"100","schema explicite")
xtitle('schema explicite ',' ',' ');
xpause(10000)
end
uexacte=zeros(1,M+1);
tfinal=nt*dt;
for j=1:M+1
uexacte(j)=sin(%pi*(j-1)*dx)*exp(-(%pi^2)*nt*dt);
end
xbasc()
tics=[4,10,4,10];
plotframe([0,0,lg,1],tics);
plot2d(x,u0,[1,1],"100","solution initiale")
plot2d(x,u,[2,2],"100","schema approchée")
plot2d(x,uexacte,[3,3],"100","solution exacte")
xtitle('schema explicite , cfl=0.4',' ',' ');
end
merci d'avance