Sunteți pe pagina 1din 12

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:

∂u ∂2u
= D 2.
∂t ∂x
Considerăm condiţia iniţială:

u(x, t0 ) = u0 (x), x ∈ [0, L],

(profilul de concentraţie este dat la t0 , pe întreaga grosime a stratului).


Condiţii la limită (de tip Dirichlet):

u(0, t) = u00 , u(L, t) = u0L .

(concentraţia pe suprafeţele exterioare ale stratului este constantă pentru orice t ≥ t0 ).


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ă:

xi = (i − 1)h, i = 1, 2, . . . , M, (14.1)
tn = n∆t, n = 0, 1, 2, . . . (14.2)

∆t – pasul temporal, h – pasul spaţial:

h = L/(M − 1), (14.3)

M – numărul punctelor de reţea spaţiale.

Derivata temporală a lui uni ≡ u(xi , tn )


µ ¶ µ 2 ¶
n+1 n ∂u 1 2 ∂ u
ui = ui + ∆t + (∆t) + ··· ,
∂t i,n 2 ∂t2 i,n

Aproximaţia liniară → schemă cu diferenţe progresive:


µ ¶
∂u un+1 − uni
= i + O(∆t).
∂t i,n ∆t

Derivata spaţială

µ ¶ µ ¶ µ ¶
h ∂u h2 ∂2u h3 ∂3u
uni−1 = uni − + − + ··· ,
1! ∂x i,n 2! ∂x2 i,n 3! ∂x3 i,n
µ ¶ µ ¶ µ ¶
h ∂u h2 ∂2u h3 ∂3u
uni+1 = uni + + + + ···
1! ∂x i,n 2! ∂x2 i,n 3! ∂x3 i,n

Reţinând termenii în h3 , prin adunare → schemă cu diferenţe centrale:


µ 2 ¶
∂ u uni+1 − 2uni + uni−1
= + O(h2 ),
∂x2 i,n h2

Aproximaţie O(h2 ) deoarece termenii neglijaţi sunt de ordinul h4 .

2
Aproximaţie discretizată de ordinul O(h2 + ∆t) a ecuaţiei difuziei în (xi , tn ):

un+1 − uni un − 2uni + uni−1


i
= D i+1 .
∆t h2
Soluţia propagată la tn+1 pentru fiecare xi interior poate fi explicitată:

un+1
i = λuni−1 + (1 − 2λ) uni + λuni+1 , i = 2, 3, . . . , M − 1,

cu
D∆t
. λ=
h2
Schemă cu diferenţe progresive pentru derivata temporală → metodă explicită.

Pentru punctele de pe frontieră:

un+1
1 = un1 = u00 ,
n+1
uM = unM = u0L .

Cu notaţii matriciale:
un+1 = B · un , n = 0, 1, 2, . . .
   
1 0 0 un1
 λ 1 − 2λ λ   un2 
   
 ... ... ...   .. 
B = , un =  . .
   n 
 λ 1 − 2λ λ   uM−1 
0 0 1 unM

Crank-
explicit Nicholson implicit
n+1 n+1 n+1
u i -1 u i u i+1
tn+1
∆t
tn
n n n
u i -1 ui u i+1

t1

h
t0
x1 = 0 xi -1 xi xi+1 xM =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 – pasul spaţ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:
∂u ∂2u
= 2, x ∈ [0, 1], t > 0,
∂t ∂x
condiţii la limită:
u(0, t) = u(1, t) = 0, t > 0,
condiţie iniţială:
u(x, 0) = sin(πx), x ∈ [0, 1].
Soluţia analitică:
u(x, t) = exp(−π 2 t) sin(πx).

Creştere aparent nesemnificativă a lui ∆t → schimbare calitativă a soluţiei.


λ ≡ ∆t/h2 = 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:

uni = ξ n exp ıkxi = 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 mod-
urilor proprii.

Criteriul de stabilitate von Neumann – propagare temporală stabilă a soluţ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 = 2 sin2 (x/2):

ξ = 1 − 4λ sin2 (kh/2).

Deoarece 0 ≤ sin2 (kh/2) ≤ 1, criteriului de stabilitate von Neumann conduce la:

0 < λ < 1/2,

Având în vedere λ ≡ D∆t/h2 rezultă:

1 h2
∆t < . (14.4)
2D
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 exact
numeric
0.12
t = 2.0

0.10

0.08 t = 2.5
c

0.06
t = 3.0

0.04

0.02

0.00
0.0 0.2 0.4 0.6 0.8 1.0

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 exact
numeric
0.12
t = 2.0

0.10

0.08 t = 2.5
c

0.06

0.04

0.02 t = 3.0

0.00
0.0 0.2 0.4 0.6 0.8 1.0

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 (xi , tn+1 ):

un+1 − uni un+1 − 2un+1 + un+1


i
= D i+1 i i−1
.
∆t h2
Rezultă sistemul de ecuaţii liniare (λ = D∆t/h2 ):

−λun+1 n+1
i−1 + (1 + 2λ) ui − λun+1 n
i+1 = ui , 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ă:

A · un+1 = un , n = 0, 1, 2, . . . ,

cu  
1 0
 −λ 1 + 2λ −λ 
 
 ... ... ... 
A = .
 
 −λ 1 + 2λ −λ 
0 1
(condiţii la limită de tip Dirichlet).
Deoarece λ > 0, matricea A este pozitiv definită şi diagonal dominantă.

Factorul de amplificare:
1
ξ= ,
1 + 4λ sin2 (kh/2)
şi
|ξ(k)| < 1
pentru orice ∆t → metoda implicită este necondiţionat stabilă şi tot de ordinul O(h2 +
∆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ă de ordinul O((∆t)2 + h2 ) – aproximarea ecuaţiei difuziei la tn+1/2 ≡ tn + ∆t/2
şi utilizarea unei scheme cu diferenţe centrale pentru derivata temporală.
Considerăm dezvoltările în jurul momentului tn+1/2 ,
µ ¶ µ 2 ¶
n+1 n+1/2 ∂u 1 2 ∂ u
ui = ui + (∆t/2) + (∆t/2) + ··· ,
∂t i,n+1/2 2 ∂t2 i,n+1/2
µ ¶ µ 2 ¶
n n+1/2 ∂u 1 2 ∂ u
ui = ui − (∆t/2) + (∆t/2) − ···
∂t i,n+1/2 2 ∂t2 i,n+1/2

Prin scădere → schemă de ordinul doi cu diferenţe centrale:


µ ¶
∂u un+1 − uni
= i + O((∆t)2 ).
∂t i,n+1/2 ∆t

Derivata spaţială la tn+1/2 – media schemelor cu diferenţe pentru tn şi tn+1 .


Ecuaţia discretizată – schema de discretizare Crank-Nicholson:
¡ n+1 n+1 n+1
¢ ¡ n n n
¢
un+1
i − u n
i D ui+1 − 2ui + ui−1 + u i+1 − 2u i + u i−1
= .
∆t 2 h2
sau

−λun+1 n+1
i−1 + (1 + 2λ) ui − λun+1 n n
i+1 = λui−1 + (1 − 2λ) ui + λui+1 ,
n

i = 2, 3, . . . , M − 1,

cu
1 D∆t
λ= .
2 h2

Reprezentarea matricială:

A · un+1 = B · un , 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λ sin2 (kh/2)
Metoda Crank-Nicholson este necondiţionat stabilă şi are ordin de precizie înalt, O((∆t)2 +
h2 ).

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

0.04
c

0.02 exact
implicit
Crank-Nicholson

0.00
0.0 0.2 0.4 0.6 0.8 1.0

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 di-
fuzie (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 Acad-
emiei, 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).

S-ar putea să vă placă și