Rechercher : dans
Par :

Résolution de l'equation de chaleur

Dernière réponse le 24 jun 2009 à 01:24:19 mirinda, le 27 avr 2008 à 02:33:48 
 Signaler ce message aux modérateurs

Bonjour,je suis un nouveau membre ,j'espère que vous m'accepterez parmi vous .j'ai un projet en analyse numérique qui porte sur la résolution de l'equation de chaleur et sa programmation en scilab en utilisant la méthode de différence finie pour l'eqution en dimension 1 puis 2 ,mais malheureusement je n'ai pas compris cette méthode, c'est pour cela que je demande votre aide pour résoudre cette equation en traitant tous les cas particuliers et générals ,j'attend vos réponce ,merci d'avance.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « résolution de l'equation de chaleur » dans :
[Webmaster] Adapter un site à toutes les résolutions, le centrer VoirUne question récurrente sur ce forum est "Comment adapter mon site à la résolution du visiteur ? Quelle résolution choisir ?" Pas besoin de se compliquer la vie pour ça ! Comment faire Il suffit d'appliquer une largeur relative (=qui change selon...
[PHP] Détecter la résolution d'affichage VoirPHP ne fournit pas de fonction permettant la détection de la résolution d'affichage car l'information concernant l'affichage du visiteur n'est pas fournie nativement par le protocole HTTP. Javascript par contre permet de détecter la résolution...

1

Sacabouffe, le 27 avr 2008 à 16:01:06

Salut
T'as pas compris la méthode? Voilà des explications:
http://www.sciences.univ-nantes.fr/...
http://perso.fundp.ac.be/~amayer/cours/app.num/Chaleur/Chale­ur.html
A plus Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

2

mirinda , le 29 avr 2008 à 14:47:11

Merci beaucoup ,j'ai compris un petit peu la méthode mais je n'ai pas compris comment arrivé au système linéaire qu'il faut résoudre et aussi la différence entre la cas explicite et implicite ,c'est pas bien expliqué dans les sites .concernant la programmation ,vous aver des propositions?

Répondre à mirinda

3

Sacabouffe, le 29 avr 2008 à 17:14:20

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:
http://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. Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

24

Sacabouffe, le 28 mai 2008 à 14:48:08
  • +1

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... There's something happening here, what it is ain't exactly clear
There's a man with a gun over there, telling me I got to beware

Répondre à Sacabouffe

4

mirinda , le 30 avr 2008 à 01:13:26
  • +1

Salut ,merci beaucoup ,mais pour l'equation de chaleur ca dépend de t et x l'equation est Ut+aUx,x=0 (ux,x est la dérivés seconde par rapport à x et a>0)avec u(x,0)=u°(x) et u(0,t)-u(l,t)=0 pour l appartient à l'inetrvalle ]0,1[
voila ce que j'ai fait
(Un+1j-Ujn)/Δt – a Uj+1n -2Ujn +Uj-1n/Δx2 =0 ;
U0n+1=UM+1n+1=0 (n+1 c'est la puissace et M+1 est l' indice ...)
D’où Ujn+1=Uj n+ a Δt/Δx2(Uj+1n – 2Ujn + Uj-1n) (2 c'est la puissance)
D’où on obtient le système Un+1=BUn

C’est ici que je n’ai pas compris comment obtenir le schéma explicite et implicite et aussi comment étudier et mettre en evidence la convergence et la stabilité de chaque schéma

Répondre à mirinda

5

Sacabouffe, le 1 mai 2008 à 16:10:40

Salut
Tout est écrit dans tes cours et les liens que je t'ai donnés.
A plus Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

6

mirinda , le 2 mai 2008 à 15:06:20
  • +1

Salut ,les liens ce sont utile mais malheureusement on n'a pas encore fait des cours concernant ceci et moi je cherche des trucs trés détaillé.voilà le programme en scilab que j'ai fait mais je n'ai pas pu le terminer :

lg = 10. ; // lg = demie longueur du domaine
dx = 0.05 ; // dx = pas d'espace
nx = lg/dx ; // nx = demi nombre de mailles
cfl = 0.4 ; // cfl
dt = dx*dx*cfl ; // dt = pas de temps
nt = 500 ; // nt = nombre de pas de temps effectues
//
// initialisation
//
x=zeros(1,2*nx+1) ;
u0=zeros(1,2*nx+1) ;
for i=1:2*nx+1
x(i) = (i-nx-1)*dx ;
u0(i) = max(0.,1.-x(i)**2) ;
end
u=u0 ;
up=u0 ;
um=u0 ;
uexacte=u0 ;

tics=[4,10,4,10];
plotframe([-lg,-0.1,lg,1.1],tics);
plot2d(x,u0,1,"000")
xtitle ('donnee initiale' ,' ',' ') ;


halt() ;
////////////////////////////////////////////////////////////////
// schema explicite: cfl=0.4
////////////////////////////////////////////////////////////////
//
for n=1:nt
//
up = sh('+1',u) ;
um = sh('-1',u) ;

u=u + dt/(dx*dx)*(up+um-2*u) ;

plotframe([-lg,-0.1,lg,1.1],tics);
plot2d(x,u,[1,1],"100","schema explicite")
plot2d(x,u0,[2,2],"100","donnee initiale")
xtitle('schema explicite, cfl=0.4',' ',' ');
xpause(1000) ;
end

avec sh une fct qui décale un tableau d'element de +1 ou -1 .
ici j'ai traité le cas de shéma explicite , est ce que vous pouvez m'aider à le terminer ?merci et by.

Répondre à mirinda

7

Sacabouffe, le 3 mai 2008 à 20:30:33

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.h­tml
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 Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

8

mirinda , le 3 mai 2008 à 22:19:32
  • +1

Salut ,merci beaucoup pour ton aide ,le problème c'est que dans le cas du shéma explicite j'ai programmé juste la solution initiale ,il fallait que je programme aussi la solution exacte en prenant en considération la convergence et la stabilité et aussi les erreurs mais je n'ai pas pu le faire.
Concernant le shéma implicite ,voilà ce que j'ai fait

////////////////////////////////////////////////////////////­////
// schema implicite: cfl=2.
////////////////////////////////////////////////////////////­////
cfl = 2. ;
dt = dx*dx*cfl ;
u = u0 ;
nt=200 ;
mat=zeros(2*nx+1,2*nx+1) ;

for i=2:2*nx
mat(i,i) = 1. + 2*dt/(dx*dx) ;
mat(i,i+1) = -dt/(dx*dx) ;
mat(i,i-1) = -dt/(dx*dx) ;
end
mat(1,1) = 1. + 2*dt/(dx*dx) ;
mat(1,2) = -dt/(dx*dx) ;
mat(2*nx+1,2*nx) = -dt/(dx*dx);
mat(2*nx+1,2*nx+1) = 1. + 2*dt/(dx*dx) ;
smat = sparse(mat) ;
spcho = chfact(smat) ; // factorisation de Cholesky

//
for n=1:nt
//
u = chsolve(spcho,u) ; // resolution du systeme lineaire

plotframe([-lg,-0.8,lg,1.6],tics);
plot2d(x,u,[1,1],"100","schema implicite 8")
plot2d(x,u0,[2,2],"100","donnee initiale 8")
xtitle('schema implicite 8, cfl=2.',' ',' ');

end
//
j'ai utilisé la factorisation de cholesky ,mais dans ce cas aussi j'ai traité que la solution initiale .
Dans les deux programmes ca ne marche pas bien ,je ne sais pas pourquoi .j'attend tes propositions avec patience,merci.

Répondre à mirinda

9

Sacabouffe, le 5 mai 2008 à 13:10:45

Salut
Je fais remonter ton message pour pas oublier d'y regarder aujourd'hui.
A plus Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

10

Sacabouffe, le 6 mai 2008 à 17:11:05

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.
http://fr.wikipedia.org/wiki/Conduction_thermique
http://fr.wikipedia.org/wiki/Fonction_d%27erreur
Je regarde pour le schéma implicite.
A plus tard Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

11

Sacabouffe, le 7 mai 2008 à 14:06:15

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.

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 Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

12

mirinda , le 7 mai 2008 à 15:38:11

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

Répondre à mirinda

13

Sacabouffe, le 7 mai 2008 à 16:05:51

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 Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

14

mirinda , le 7 mai 2008 à 20:10:50

Salut Sacabouffe
merci beaucoup , ah oui je me trompe toujours j'écris solution initiale au lieu de solution numérique mais tu as compris maintenant ce que j'ai voulu dire .
Puisqu' elle me reste que la solution au dernier pas de temps il faut que je fait la comparaison juste au temps final n'est ce pas ?tu m'a dit "Par exemple , avec un Dirac de température en (0,0) la solution exacte de l'edp est très simple."
mais je n'ai pas étudié " la distribution de Dirac" ni "Transformée de Fourier ....." donc je ne peux pas l'utiliser.
je n'ai pas compris ce que tu veux dire par "sauve la température dans une matrice. Les lignes pour l'espace et les colonnes pour le temps ".merci

Répondre à mirinda

15

Sacabouffe, le 8 mai 2008 à 22:28:03

Salut
Ton cas est traité ici:
http://fr.wikipedia.org/...
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 Some folks are born made to wave the flag, ooo, they're red,­ white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

16

Sacabouffe, le 9 mai 2008 à 13:15:00

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. Some folks are born made to wave the flag, ooo, they're red,­ white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe

17

mirinda , le 10 mai 2008 à 00:55:25

Salut sacabouffe
Merci beaucoup pour tous ces informations , oui je suis d'accord avec toi c'est maintenant que je veux modifier le programme pour qu'il utilise u(0,t)=u(1,t)=0 càd les conditions aux limites de direchlet et puis je veux modifier le programme en utilisant les conditions aux limites de Neuman .je veux que ca sera sur l'intervalle [0,1] ,et je veux savoir qu'elles sont les modifications que je doit faire pour qe ca marche bien en faisant apparaitre la stabilité quand on change la condition cfl, la convergence et la consistence .J'attend votre réponce ,merci .

Répondre à mirinda

18

mirinda , le 12 mai 2008 à 15:08:03

Salut
Voila le nouveau problème détaillé :

Ut – a uxx =0 pour (x,t) dans ]0,1[*R+*
U(x,0)=u0(x) pour x dans ]0,1[
U(0,t)=u(1,t)=0 pour t dans R+* condition de Dirichlet

on pose Uj0=U0(xj ) ; condition initiale
xj =j dx ;
tn =n dt ;
dx=1/(M+1) ; avec M le nombre de nœud de maillage sur ]0,1[

le schéma explicite est le suivant :
Ujn+1 = Ujn + a dt/dx2 (Uj+1n – 2 Ujn + Uj-1n)
U0n+1 = UM+1n+1=0 conditions aux bords
merci .

Répondre à mirinda

19

Sacabouffe, le 14 mai 2008 à 02:08:36
  • +1

Salut
J'ai un peu de mal à comprendre, un coup ta longueur c'est l, ton programme est fait pour x Є [-l/2,l/2], et un coup c'est 1.

Pour le cas périodique, il y a quand même un petit truc à corriger pour le cas explicite et le cas implicite, j'avais pas fait gaffe...
Il faut prendre qu'un seule des extrémités comme ddl, vu que les températures sont toujours égales.
Du coup, pour les deux schémas, j'écrirais plutôt ça:

x=zeros(1,2*nx) ;
u0=zeros(1,2*nx) ;
for i=1:2*nx
x(i) = (i-nx-1)*dx ;
u0(i) = max(0.,1.-x(i)**2) ;
end
u=u0 ;
up=u0 ;
um=u0 ;
uexacte=u0 ;

Et pour le schéma implicite, ta matrice est la même sauf qu'elle est de taille 2*nx x 2*nx et que comme je te l'avais fait remarquer, faut pas oublier les valeurs non nulles de M(2*nx,1) et M(1,2*nx).
Et après, tout pareil. Sauf qu'à la fin, si tu veux aussi ta température à l'extrémité droite (qui est la même qu'à l'extrémité gauche), tu complètes le vecteur u en un vecteur uper tel que uper(1:2*nx)=u(1:2*nx) et uper(2*nx+1)=u(1).

Pour le problème de Dircihlet, c'est presque pareil. Cette fois, les deux extrémités ne sont pas des ddl. Tu travailles donc avec un vecteur de taille 2nx -1 pour la température et t'appliques tes schémas. Pour le schéma implicite, la matrice est quasiment la même, c'est en fait celle que t'avais écrite au départ, elle est de taille 2*nx-1 x 2*nx-1 et cette fois donc, les valeursM(2*nx-1,1) et M(1,2*nx-1) sont bien nulles.

Pour le problème de Neumann, de nouveau, il y a pas grand chose qui change. Les deux extrémités ne sont pas des ddl. Vu que la dérivée est nulle, la température aux extrémités peut être approchée par la température de la barre au premier pas d'espace pour l'extrémité gauche et au dernier pas d'espace pour l'extrémité droite.
Du coup, pour le schéma implicite, seules les valeurs M(1,1) et M(2*nx-1,2*nx-1) changeront.
A plus Some folks are born made to wave the flag, ooo, they're red, white and blue.
And when the band plays "Hail to the Chief", ooo, they point the cannon at you, y'all!

Répondre à Sacabouffe