14 ECUAŢII CU DERIVATE PARŢIALE 14.3 Probleme cu condiţii iniţiale pentru ecuaţii de tip parabolic Prototip ecuaţia unidimensională a difuziei. Tehnicile de discretizare şi analiza de stabilitate rămân valabile. Soluţii analitice geometrii simple, coeficient de difuzie constant. Metode numerice: restrângerea soluţiei la un set de puncte de reţea, convenabil distribuite aproximarea derivatelor prin scheme discrete rezolvarea sistemului liniar rezultat valorile soluţiei în nodurile reţelei. Ecuaţia 1D a difuziei pentru coeficient de difuzie D constant: Considerăm condiţia iniţială: u t = D 2 u x 2. u(x, t 0 )=u 0 (x), x [0,L], (profilul de concentraţie este dat la t 0, pe întreaga grosime a stratului). Condiţii la limită (de tip Dirichlet): u(0,t)=u 0 0, u(l, t) =u 0 L. (concentraţia pe suprafeţele exterioare ale stratului este constantă pentruoricet t 0 ).
14.0.1 Metoda explicită cu diferenţe finite Aproximarea prin scheme cu diferenţe finite a derivatelor implicate. Reţea de discretizare spaţiu-timp regulată: t pasul temporal, h pasulspaţial: M numărul punctelor de reţea spaţiale. Derivata temporală aluiu n i u(x i,t n ) µ u i = u n i + t t x i = (i 1)h, i =1, 2,...,M, (14.1) t n = n t, n =0, 1, 2,... (14.2) h = L/(M 1), (14.3) + 1 µ 2 u 2 ( t)2 +, t 2 Aproximaţia liniară schemă cudiferenţe progresive: µ u = un+1 i u n i + O( t). t t Derivata spaţială u n i 1 = u n i h µ u 1! x u n i+1 = u n i + h µ u 1! x + h2 2! + h2 2! µ 2 u x 2 µ 2 u x 2 h3 3! + h3 3! µ 3 u x 3 µ 3 u x 3 +, + Reţinând termenii în h 3, prin adunare schemă cu diferenţe centrale: µ 2 u = un i+1 2u n i + u n i 1 + O(h 2 ), x 2 h 2 Aproximaţie O(h 2 ) deoarece termenii neglijaţi sunt de ordinul h 4. 2
Aproximaţie discretizată deordinulo(h 2 + t) aecuaţiei difuziei în (x i,t n ): i u n i = D un i+1 2u n i + u n i 1. t h 2 Soluţia propagată lat n+1 pentru fiecare x i interior poate fi explicitată: i = λu n i 1 +(1 2λ) u n i + λu n i+1, i =2, 3,...,M 1, cu λ = D t h. 2 Schemă cudiferenţe progresive pentru derivata temporală metodă explicită. Pentru punctele de pe frontieră: 1 = u n 1 = u 0 0, M = un M = u 0 L. Cu notaţii matriciale: = B u n, n =0, 1, 2,... 1 0 0 λ 1 2λ λ B =........., u n = λ 1 2λ λ 0 0 1 u n 1 u n 2. u n M 1 u n M. explicit Crank- Nicholson implicit t n+1 tn t n+1 u i-1 u i n+1 n u i-1 u i n n+1 u i+1 n u i+1 t 1 t 0 x 1 = 0 h x i-1 x i x i+1 x M =L FIGURA 14.1. Reţeaua de discretizare spaţiu-timp pentru ecuaţia unidimensională a difuziei, punând în evidenţă schemele de discretizare explicită, implicită şi Crank-Nicholson. 3
/*=========================================================================*/ void PropagExplicit(float D, float u0[], float u[], float dt, float h, int m) /*--------------------------------------------------------------------------- Propaga solutia u0[] a ecuatiei difuziei cu coeficient constant D, du/dt = D d2u/dx2, pe intervalul temporal dt, utilizand schema de discretizare explicita pe o retea spatiala cu m puncte si pasul h. Returneaza solutia in u[]. ---------------------------------------------------------------------------*/ { float lambda; } int i; lambda = D * dt/(h*h); u[1] = u0[1]; u[m] = u0[m]; for (i=2; i<=(m-1); i++) u[i] = lambda*u0[i-1] + (1-2*lambda)*u0[i] + lambda*u0[i+1]; D coeficientul de difuzie (constant) u0[] soluţia iniţială u[] soluţia propagată u0[] dt pasul temporal h pasulspaţial m numărul punctelor spaţiale. Secvenţa de program principal: for (i=1; i<=m; i++) u0[i] =...; /* conditia initiala */ t = 0.0; while (t <= tmax) { /* ciclul temporal */ PropagExplicit(D,u0,u,dt,h,m); /* propaga solutia */ for (i=1; i<=m; i++) u0[i] = u[i]; t += dt; } Metoda explicită instabilitate numerică Se dezvoltă oscilaţii care cresc exponenţial în timp. Comportamentul critic apare dacă t depăşeşte o anumită limită corelată cu h, şi se datorează dominanţei crescânde a erorilor de rotunjire. 4
Aplicaţie: D =1: condiţii la limită: condiţie iniţială: Soluţia analitică: u t = 2 u, x [0, 1], t > 0, x2 u(0,t)=u(1,t)=0, t > 0, u(x, 0) = sin(πx), x [0, 1]. u(x, t) =exp( π 2 t)sin(πx). Creştere aparent nesemnificativă a lui t schimbare calitativă a soluţiei. λ t/h 2 =1/2 este o valoare critică: pentruλ 1/2 propagarea soluţiei este stabilă, pentru λ>1/2 propagarea devine instabilă. 5
14.0.2 Analiza de stabilitate von Neumann Analiză locală se presupune că coeficienţii ecuaţiei cu diferenţe pot fi consideraţi constanţi Modurile proprii (soluţiile independente) ale ecuaţiei cu diferenţe: u n i = ξ n exp ıkx i = cξ n exp(ıkih), ı unitatea imaginară k numărul de undă spaţial ξ(k) factor de amplificare, care este o funcţie complexă de k. Orice soluţie a ecuaţiei discretizate poate fi reprezentată ca o combinaţie liniară a modurilor proprii. Criteriul de stabilitate von Neumann propagare temporalăstabilăasoluţiei dacă: ξ(k) < 1. Factorul de amplificare pentru metoda explicită: ξ = λ exp( ıkh)+(1 2λ)+λ exp(ıkh). Combinând exponenţialele şi utilizând 1 cos x =2sin 2 (x/2): ξ =1 4λ sin 2 (kh/2). Deoarece 0 sin 2 (kh/2) 1, criteriului de stabilitate von Neumann conduce la: Având în vedere λ D t/h 2 rezultă: 0 <λ<1/2, t < 1 h 2 2 D. (14.4) Pasul temporal t care asigură stabilitatea algoritmului este limitat superior de o valoare proporţională cu timpul de difuzie pe distanţa h. metoda explicită este condiţional stabilă, iar valoarea λ = 1/2 este critică. 6
0.16 0.14 0.12 0.10 t = 2.0 exact numeric c 0.08 t = 2.5 0.06 0.04 t = 3.0 0.02 0.00 0.0 0.2 0.4 0.6 0.8 1.0 x FIGURA 14.2. Soluţii exacte şi soluţii numerice prin metoda explicită (cu h = 0.05 şi t =0.00125) pentru problema de difuzie (14.44) (14.46). 0.16 0.14 0.12 0.10 t = 2.0 exact numeric c 0.08 t = 2.5 0.06 0.04 0.02 t = 3.0 0.00 0.0 0.2 0.4 0.6 0.8 1.0 x FIGURA 14.3. Soluţii exacte şi soluţii numerice prin metoda explicită (cu h = 0.05 şi t =0.0013) pentru problema de difuzie (14.44) (14.46). 7
14.0.3 Metoda implicită şi metoda Crank-Nicholson Pentru a obţine un algoritm necondiţionat stabil schemă de discretizare regresivă pentru derivata temporală. Se aproximează ecuaţia difuziei în (x i,t n+1 ): i u n i t Rezultă sistemul de ecuaţii liniare (λ = D t/h 2 ): λ i 1 = D un+1 i+1 2un+1 i + i 1. h 2 +(1+2λ) un+1 i λ i+1 = un i, i =2, 3,...,M 1. Componentele soluţiei propagate rezolvarea sistemului + condiţii la limită schema cu diferenţe regresive este implicită. Procesul de propagare sub formă matricială: cu A = A = u n, n =0, 1, 2,..., 1 0 λ 1+2λ λ......... λ 1+2λ λ 0 1 (condiţii la limită de tip Dirichlet). Deoarece λ>0, matricea A este pozitiv definită şi diagonal dominantă. Factorul de amplificare: şi ξ = 1 1+4λ sin 2 (kh/2), ξ(k) < 1 pentru orice t metoda implicită estenecondiţionat stabilă şi tot de ordinul O(h 2 + t).. 8
/*=========================================================================*/ void PropagImplicit(float D, float u0[], float u[], float dt, float h, int m) /*--------------------------------------------------------------------------- Propaga solutia u0[] a ecuatiei difuziei cu coeficient constant D, du/dt = D d2u/dx2, pe intervalul temporal dt, utilizand schema de discretizare implicita pe o retea spatiala cu m puncte si pasul h. Returneaza solutia in u[]. ---------------------------------------------------------------------------*/ { float *a, *b, *c; } float lambda; int i; a = Vector(1,m); b = Vector(1,m); c = Vector(1,m); lambda = D * dt/(h*h); b[1] = 1.0; c[1] = 0.0; u[1] = u0[1]; for (i=2; i<=(m-1); i++) { a[i] = -lambda; b[i] = 1.0 + 2*lambda; c[i] = -lambda; u[i] = u0[i]; } a[m] = 0.0; b[m] = 1.0; u[m] = u0[m]; TriDiag(a,b,c,u,m); FreeVector(a,1); FreeVector(b,1); FreeVector(c,1); 9
Metodă deordinulo(( t) 2 + h 2 ) aproximareaecuaţiei difuziei la t n+1/2 t n + t/2 şi utilizarea unei scheme cu diferenţe centrale pentru derivata temporală. Considerăm dezvoltările în jurul momentului t n+1/2, µ i = /2 u i +( t/2) u n i = /2 i ( t/2) t µ u t +1/2 +1/2 + 1 µ 2 u 2 ( t/2)2 t 2 + 1 µ 2 u 2 ( t/2)2 t 2 Prin scădere schemă de ordinul doi cu diferenţe centrale: µ u = un+1 i u n i + O(( t) 2 ). t t +1/2 +1/2 +1/2 Derivata spaţială lat n+1/2 media schemelor cu diferenţe pentru t n şi t n+1. Ecuaţia discretizată schema de discretizare Crank-Nicholson: i u n i = D u n+1 i+1 2un+1 i + i 1 + u n i+1 2u n i + u n i 1. t 2 h 2 sau λ i 1 +(1+2λ) un+1 i λ i+1 = λun i 1 +(1 2λ) u n i + λu n i+1, i =2, 3,...,M 1, +, cu λ = 1 D t 2 h. 2 Reprezentarea matricială: A = B u n, n =0, 1, 2,..., A, B matrici tridiagonale A pozitiv definită, dominant diagonală şi nesingulară. Factorul de amplificare ξ = 1 4λ sin2 (kh/2) 1+4λsin 2 (kh/2) Metoda Crank-Nicholson este necondiţionat stabilă şi are ordin de precizie înalt, O(( t) 2 + h 2 ). 10
/*=========================================================================*/ void CrankNicholson(float D, float u0[], float u[], float dt, float h, int m) /*--------------------------------------------------------------------------- Propaga solutia u0[] a ecuatiei difuziei cu coeficient constant D, du/dt = D d2u/dx2, pe intervalul temporal dt, utilizand schema de discretizare Crank-Nicholson pe o retea spatiala cu m puncte si pasul h. Returneaza solutia in u[]. ---------------------------------------------------------------------------*/ { float *a, *b, *c; } float lambda; int i; a = Vector(1,m); b = Vector(1,m); c = Vector(1,m); lambda = 0.5 * D * dt/(h*h); b[1] = 1.0; c[1] = 0.0; u[1] = u0[1]; for (i=2; i<=(m-1); i++) { a[i] = -lambda; b[i] = 1.0 + 2*lambda; c[i] = -lambda; u[i] = lambda*u0[i-1] + (1.0-2*lambda)*u0[i] + lambda*u0[i+1]; } a[m] = 0.0; b[m] = 1.0; u[m] = u0[m]; TriDiag(a,b,c,u,m); FreeVector(a,1); FreeVector(b,1); FreeVector(c,1); 0.08 0.06 c 0.04 0.02 exact implicit Crank-Nicholson 0.00 0.0 0.2 0.4 0.6 0.8 1.0 x FIGURA 14.4. Soluţia exactă şi soluţiile numerice prin metoda implicită şi prin metoda Crank-Nicholson (cu h =0.05 şi t =0.025) la momentul t =3.0 pentru problema de difuzie (14.44) (14.46). 11
Bibliography [1] N. Racoveanu, Gh. Dodescu, I. Mincu, Metode numerice pentru ecuaţii cu derivate parţiale de tip parabolic (Editura Tehnică, Bucureşti, 1977). [2] W.F. Ames, Numerical Methods for Partial Differential Equations, (Academic Press, New York, 1977). [3] A. Samarski, V. Andreev, Méthodes aux différences pour équations elliptiques (MIR, Moscou, 1978). [4] L.Gr. Ixaru, Metode numerice pentru ecuaţii diferenţiale cu aplicaţii (Editura Academiei, Bucureşti, 1979). [5] R.L. Burden, J.D. Faires, Numerical Analysis, Third Edition (Prindle, Weber & Schmidt, Boston, 1985). [6] S.E. Koonin, D.C. Meredith, Computational Physics, Fortran Version (Addison- Wesley, Redwood CA, 1990). [7] W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P Flannery, Numerical Recipes in C, Second Edition (Cambridge University Press, Cambridge, 1992).