PYL: c Août 05
(Lagrée P.-Y.),
LMM-Univ PARIS 6, B 162,
4 place Jussieu, 75252 PARIS
pyl(a)ccr.jussieu.fr
http://www.lmm.jussieu.fr/~lagree
Résolution numérique implicite de l'équation de la chaleur
On veut résoudre l'équation de la chaleur:
òT ò2T
-- = ---
òt òx2
avec comme condition initiale T(x,t=0)=1
et comme conditions aux limites
T(0,t)=T(1,t)=0.
On discrétise en temps
soit dt le pas de temps de discrétisation, la dérivée temporelle
òT/òt devient
(T(t,x)- T(t-dt,x))/dt
Soit dx le pas d'espace
une approximation au pas de temps (t) de la dérivée seconde
ò2T/òx2 en x est:
(T(t,x+dx) -2 T(t,x)+ T(t,x-dx))/dx/dx.
Connaissant donc T en x au pas de temps t-dt, on obtient au temps t:
T(t,x)= T(t-dt,x)+ ((T(t,x+dx) -2 T(t,x)+ T(t,x-dx))/dx/dx)dt
L'équation de la chaleur discrétisée s'écrit:
T[j]= To[j] + dt (T[j-1] -2 T[j] + T[j+1])/dx/dx
Les valeurs aux bornes sont données.
On résout en implicite.
donc l'équation de la chaleur discrétisée s'écrit:
T[j]-To[j] = dt (T[j-1] -2 T[j] + T[j+1])/dx/dx
qui s'écrit après regroupements:
diagi[j] T[j-1] + diagp[j] T[j] + diags[j] T[j+1]= rhs[j]
où
diags[j] = 1
diagp[j] = -2 - (dx) * (dx)/dt
diagi[j] = 1
rhs[j] = -To[j] (dx) * (dx)/dt
On cherche une solution sous la forme:
T[j] = a[j] * T[j + 1] + b[j];
on subsitue T[j-1] = a[j-1]T[j] + b[j-1] dans (E) et on identifie
a[j] et b[j]. On trouve alors:
a[j] = -diags[j] /(diagp[j] + diagi[j] * a[j - 1]) ;
b[j] = (rhs[j] - diagi[j] * b[j - 1]) /(diagp[j] + diagi[j] * a[j - 1])
On a donc un "double balayage" ("algorithme de montée descente", "algorithme
de Thomas"),
on calcule d'abord les a[j] et b[j] pour j croissant (les valeurs en j-1
sont connues). Ensuite, pour j
décroissant on calcule les T[j] (les valeurs en j+1 sont connues). On a
besoin d'initialiser les tableaux par les conditions aux limites.
Conditions aux limites
Elles pemettent de fixer les coefficients initiaux et finaux des relation
de récurrence.
- Cas des conditions données aux bornes:
en j=0 T[0]=T0 en j=n, T[n]=T1.
ce qui nous donne a[0] = 0. et b[0] = T0 et T[n]=Tn
;
- Cas d'un flux imposé en 0:
T'(0)=q et T[n]=Tn
T[0]-T[1]=-qdx,
donc on a aux bornes
a[0] = 1.; b[0] = (q)*dx; et T[n]=Tn;
- Cas d'une condition mixte:
Bi T'[0] + T[0] =0;
Bi(T[0]-T[1])=-(T[0]-Te)dx,
donc
a[0]= (Bi/dx)/(1+Bi/dx); b[0] = Te/(1+Bi/dx);
- Cas d'un flux imposé en ndx:
T'(1)=q
Il faut résoudre un système du
second degré à la main:
diagi[n-1] T[n-2] + diagp[n-1] T[n-1] + diags[n-1] T[n]= rhs[n-1]
et
-T[n-1] + T[n] = q dx
d'ou T[n-1] puis T[n]...
T[n-1] = (rhs[n-1]- b[n-2]*diagi[n-1] - diags[n-1]*qn*dx)/(diagp[n-1] + diagi[n-1] * a[n - 2] + diags[n-1]);
T[n] = T[n-1] + qn*dx;
- Cas ...
... ... ... ... ...
retour à l'applet Java de la résolution implicite de l'équation de la chaleur, modification du pas
de temps et des conditions aux limites en direct.
La source pour la solution de l'équation de la
chaleur, La source
pour l'interface graphique
(inspirée de GraphLayout Sun/Apple).