Sunteți pe pagina 1din 8

© Carmen-Sanda Georgescu, Tudor Petrovici, Radu Popa

Metode numerice. Fisa nr. 13:


INTEGRAREA NUMERICA A ECUATIILOR DIFERENTIALE CU
DERIVATE PARTIALE

8 . INTEGRAREA NUMERICA A ECUATIILOR DIFERENTIALE CU DERIVATE PARTIALE


DE ORDINUL DOI CU CONDITII LA LIMITA
Fie o ecuatie diferentiala cu derivate partiale de ordinul doi in care functia u depinde de doua variabile
independente x si y este de forma:
∂u ∂u ∂ 2 u ∂ 2 u ∂ 2 u
F ( x, y, u ( x, y ), , , , , )=0 (13.1)
∂x ∂y ∂x 2 ∂y 2 ∂x∂y
Ecuatia diferentiala cu derivate partiale de ordinul doi (13.1) se scrie sub forma
∂ 2u ∂ 2u ∂ 2u ∂u ∂u
A( x, y ) 2 + B( x, y ) + C ( x, y ) 2 + f ( x, y, u ( x, y ), , ) = 0 (13.2)
∂x ∂x∂y ∂y ∂x ∂y
∂u ∂u
Daca termenul f ( x, y , u ( x, y ), , ) este liniar atunci ecuatia (13.2) se numeste liniara ; daca
∂x ∂y
∂u ∂u
termenul f ( x, y , u ( x, y ), , ) este neliniar atunci ecuatia (13.2) se numeste cvasiliniara. Ecuatia
∂x ∂y
(13.2) caracterizeaza fenomene fizice care se desfasoara intr-un domeniu D ⊂ R si este insotita de
2

conditii initiale si/sau la limita pe frontiera dupa caz.


Ecuatiile diferentiale cu derivate partiale de ordinul doi se clasifica in functie de semnul discriminantului
δ = B 2 − 4 AC
Daca δ<0 ecuatia este de tip eliptic ; daca δ=0 ecuatia este de tip parabolic ; daca δ>0 ecuatia este de tip
hiperbolic (semnul discriminantului trebuie sa fie acelasi in toate punctele domeniului ; in caz contrar este
posibil ca ecuatia sa-si schimbe tipul in diferite subdomenii ale domeniului D). Rezolvarea numerica a
ecuatiilor diferentiale cu derivate partiale impune transformarea acestora in ecuatii cu diferente finite
(ecuatii algebrice).
8.1. OPERATORI CU DIFERENTE FINITE PARTIALE IN COORDONATE CARTEZIENE
Fie D ⊂ R domeniul in care are loc fenomenul fizic. Transformarea ecuatiei diferentiale cu derivate
2

partiale de ordinul doi (13.2) in ecuatii algebrice cu diferente finite in coordinate carteziene, impune
discretizarea domeniul D intr-o retea cu subdomenii dreptunghiulare (in particular patratice). Daca notam
cu h distantele constante dintre nodurile retelei in directia x si cu k distantele constante in directia y dintre
nodurile retelei (Fig.1)
y

i-1,j+1 i,j+1 i+1,j+1

i-1,j i,j i+1,j x

i-1,j-1 i,j-1 i+1,j-1

Fig.1. Discretizarea domeniului D ⊂ R 2 in coordonate carteziene. Indicele i indica coloana iar indicele j
indica linia
Operatori cu diferente finite partiale centrate
∂u u i +1, j − u i −1, j ∂u u i , j +1 − u i , j −1
( ) i, j ≈ , ( ) i, j ≈ (13.3)
∂x 2h ∂y 2k
∂ 2u u i +1, j − 2u i , j + u i −1, j ∂ 2u u i , j +1 − 2u i , j + u i , j −1
( 2 ) i, j ≈ , ( ) ≈
∂x ∂y 2
i , j
h2 k2
(13.4)
∂ 2u u i +1, j +1 − u i −1, j +1 − u i +1, j −1 + u i −1, j −1
( ) i, j ≈
∂x∂y 4hk

8.2. ECUATII DIFERENTIALE CU DERIVATE PARTIALE DE TIP ELIPTIC


ECUATIA LUI LAPLACE
O mare varietate de probleme bidimensionale din fizica si tehnica sunt descrise de ecuatia lui Laplace. In
forma canonica ecuatia lui Laplace se scrie sub forma
∂ 2u ∂ 2u
+ = 0, u | Γ = data (13.5)
∂x 2 ∂y 2
unde Γ este frontiera domeniului inchis D ( o astfel de problema se numeste problema Dirichlet).
Conditiile la limita pentru ecuatia (13.5) au forme specifice functie de fenomenul fizic modelat matematic
prin acest tip de ecuatie.
Exemplul 1. Se considera o placa subtire complet izolata si T(x,y) temperatura placii intr-un punct M(x,y) al
domeniului plan (dreptunghi). In ipoteza ca temperatura este independenta de timp sa se determine
distributia temperaturii in interiorul placii daca pe frontiera domeniului temperatura are valorile : T=100oC
pe latura din stanga si T=0oC pe celelalte trei laturi. Se va considera (Fig.2) o discretizare a domeniului in
subdomenii patrate cu 6 noduri interioare (notate cu 1,2,3,4,5,6) si 10 noduri pe frontiera echistante (in
aceste noduri se cunoaste temperatura T conform conditiilor la limita date ; T7=0, T8=0 , T9=0, T10=0
,T11=0 ,T12=0, T13=0, T14=0 ,T15=100, T16=100).
Rezolvare : Daca se introduc aproximatiile (13.4) pentru derivatele partiale de ordinul doi in ecuatia (13.5)
se obtine ecuatia algebrica in diferente finite (Fig.1)
u i , j +1 + u i , j −1 + u i +1, j + u i −1, j
ui, j ≈ (13.6)
4
T7=0 T8=0 T9=0

T10=0
T16=100 1 2 3
T11=0
T15=100 4 5 6

T14=0 T13=0 T12=0


Fig. 2. Discretizarea domeniului de integrare
Aplicand relatia (13.6) in fiecare din cele 6 noduri interioare si notand temperaturile din aceste noduri prin
T1, T2, T3, T4, T5, T6 se obtine un sistem de sase ecuatii cu sase necunoscute
⎧4T1 − T2 − T4 = 100
⎪− T + 4T − T − T5 =0
⎪ 1 2 3

⎪⎪ − T2 + 4T3 − T6 =0
⎨ (13.7)
⎪− T1 + 4T4 − T5 = 100
⎪ − T2 − T4 + 4T5 − T6 =0

⎪⎩ − T3 − T5 + 4T6 = 0
Rezolvarea sistemului (13.7) se poate face prin mai multe metode :
⇒ Pivotare Gauss. Daca se rezolva sistemul prin pivotare Gauss se obtin solutiile:
T1=38.0952 , T2=14.2857, T3=4.7619, T4=38.0952, T5=14.2857, T6=4.7619
⇒ Metoda iterativa. Se observa ca sunt indeplinite conditiile de rezolvare a sistemului prin metodele
iterative Jacobi si Gauss-Seidel (matricea sistemului este diagonal dominanta adica
n

∑| a
j =1
ij | ≤| aii |, i = 1,2,..., n ). Aceste metode sunt preferate atunci cand discretizarea domeniului de
j ≠i
integrare contine un numar mare de noduri interioare
⇒ Metoda iterativa Liebmann
Liebmann a propus o metoda iterative cu accelerarea convergentei procesului de iteratie. Astfel el
introduce un coefficient w cu valori cuprinse intre 1 si 2 in ecuatia cu diferente finite. Coeficientul poate fi
schimbat la fiecare pas de iteratie. Astfel procedeul lui Liebmann poate fi descris prin relatia

u i(,kj+1) = u i(,kj) − w[ u i(,kj) − (u i(+k1), j + u i(−k1), j + u i(,kj)+1 + u i(,kj)−1 ) ]


1
(13.8)
4
Exemplul 2. Sa se scrie un program Octave pentru probleme de tip (13.5) folosind procedeul lui Liebmann
si sa se rezolve problema : Se considera o placa subtire complet izolata si T(x,y) temperatura placii intr-un
punct M(x,y) al domeniului plan de forma patrata ( x ∈ [0 ;4], y ∈ [0 ;4]). In ipoteza ca temperatura este
independenta de timp sa se determine distributia temperaturii in interiorul placii daca pe frontiera
domeniului temperatura are valorile : T=20oC pe latura din stanga , T=180oC pe latura din dreapta, T=80 oC
pe latura de sus si T=0oC pe latura de jos. Se va considera (Fig.2) o discretizare a domeniului in
subdomenii patrate cu 64 noduri interioare . Sa se reprezinte grafic functia u(x,y)
Algoritm:
1. Informatia initiala : Citeste functiile f1(x), f2, f3, f4 si marimile a=lungimea intervalului pe Ox, b=
lungimea intervalului pe Oy, h=lungimea pasului, tol=toleranta admisa, max=numarul maxim de iteratii
2. Calculeaza numarul nodurilor pe Ox si respectiv pe Oy, n← fix(a/h)+1;m ←fix(b/h)+1; si valoarea de
start a procesului de iteratie media← (a*(feval(“f1”,0)+feval(“f2”,0)) + b*(feval(“f3”,0)+ feval(“f4”,0)))
/(2*a+2*b);
3. Defineste parametrul w← 4/(2+sqrt(4-(cos(pi/(n-1))+cos(pi/(m-1)))^2));
4. Pentru j=2:m-1 si i=2:n-1 calculeaza u(i,j) dupa formula (13.8)

Functie - Program Octave

octave#1> function u = liebmann(“f1”, ”f2”, ”f3”, ”f4”,a,b,h,tol,max)


n = fix(a/h)+1;m = fix(b/h)+1;
media = (a*(feval(“f1”,0)+feval(“f2”,0)) + b*(feval(“f3”,0)+feval(“f4”,0)))/(2*a+2*b);
u = media*ones(n,m);
for j=1:m,
u(1,j) = feval(“f3”,h*(j-1)); u(n,j) = feval(“f4”,h*(j-1));
endfor
for i=1:n,
u(i,1) = feval(“f1”,h*(i-1)); u(i,m) = feval(“f2”,h*(i-1));
endfor
u(1,1) = (u(1,2) + u(2,1))/2;u(1,m) = (u(1,m-1) + u(2,m))/2;
u(n,1) = (u(n-1,1) + u(n,2))/2;u(n,m) = (u(n-1,m) + u(n,m-1))/2;
err = 1;cnt = 0; w = 4/(2+sqrt(4-(cos(pi/(n-1))+cos(pi/(m-1)))^2));
while ((err>tol)&(cnt<=max1))
err = 0;
for j=2:(m-1),
for i=2:(n-1),
relx = w *(u(i,j+1)+u(i,j-1)+u(i+1,j)+ u(i-1,j)-4*u(i,j))/4; u(i,j) = u(i,j) + relx;
if (err<=abs(relx)), err=abs(relx); endif
endfor
endfor
cnt = cnt+1;
endwhile
endfunction

Program Octave :
octave#1>u=liebmann("f1","f2","f3","f4",4,4,0.5,0.001,25), mesh(u)
u=
50.00000 80.00000 80.00000 80.00000 80.00000 80.00000 80.00000 80.00000 130.00000
20.00000 51.39284 65.05243 73.30174 80.53141 89.17304 102.11163 125.82085 180.00000
20.00000 40.51918 55.51535 67.62353 79.65088 94.04919 113.45266 141.17175 180.00000
20.00000 35.16878 48.86653 62.02616 76.39927 93.92030 116.47803 145.41351 180.00000
20.00000 31.28953 42.75630 55.21541 69.99982 88.75480 113.12562 144.00428 180.00000
20.00000 27.23333 35.65402 46.07937 59.62977 77.97342 103.26530 137.47797 180.00000
20.00000 21.98987 26.54713 33.81820 44.46651 60.24377 84.48422 122.64229 180.00000
20.00000 14.17909 14.72651 18.17977 24.17429 34.05090 51.78552 88.60695 180.00000
10.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 90.00000

Fig.3. Reprezentarea grafica a repartitiei temperaturii in placa plana de la Exemplul 2

8.3. ECUATII DIFERENTIALE CU DERIVATE PARTIALE DE TIP PARABOLIC


ECUATIA CALDURII
Consideram o bara subtire complet izolata (Fig.4) cu o distributie initiala a temperaturii la timpul t=0 data
u ( x,0) = f ( x), x ∈ [0,1] (vom considera variabila x adimensionala). La x=0 si respectiv x=1 si t>0 cu
t ∈ (0, T ] se dau conditiile la limita
u (0, t ) = g 0 (t ), u (1, t ) = g1 (t ) . In forma canonica ecuatia caldurii se scrie sub forma
∂ 2 u ∂u
c − =0 (13.9)
∂x 2 ∂t
⎧u ( x,0) = f ( x), x ∈ [0,1]

cu conditiile initiale si la limite ⎨u (0, t ) = g 0 (t ), t ∈ (0, T ]
⎪u (1, t ) = g (t ), t ∈ (0, T ]
⎩ 1

(c este difuzibilitatea termica a barei)


Daca se considera o discretizare pentru timp un pas ∆t , iar pentru x un pas ∆x si se aplica ecuatiei (13.9)
∂u u i ,n +1 − u i ,n
operatorii in diferente finite ≈ si (13.4) pentru tn se obtin ecuatiile algebrice in diferente
∂t ∆t
finite sub forma explicita
u i ,n +1 − u i ,n u i −1,n − 2u i ,n + u i +1,n
= (13.10)
∆t (∆x) 2
(i este indicele pe directia axei Ox, n este indicele pe axa Ot).Daca definim constanta de discretizare a
∆t
domeniului λ= atunci ecuatiile (13.10) se scriu sub forma explicita
( ∆x ) 2
u i ,n +1 = λu i −1, n + (1 − 2λ )u i , n + λu i +1, n (13.11)
cu conditiile la limite si initiale uo,n+1=go(tn+1), u1,n+1=g1(tn+1), ui,o=f(xi)
Daca se considera o discretizare pentru timp un pas ∆t , iar pentru x un pas ∆x si se aplica ecuatiei (13.9)
∂u u i ,n +1 − u i ,n
operatorii in diferente finite ≈ si (13.4) pentru tn+1 se obtin ecuatiile algebrice in
∂t ∆t
diferente finite sub forma implicita
u i ,n +1 − u i ,n u i −1,n +1 − 2u i ,n +1 + u i +1,n +1
= (13.12)
∆t (∆x) 2
(i este indicele pe directia axei Ox, n este indicele pe axa Ot).Daca definim constanta de discretizare a
∆t
domeniului λ= atunci ecuatiile (13.10) se scriu sub forma implicita
( ∆x ) 2
u i ,n = −λu i −1,n +1 + (1 + 2λ )u i , n +1 − λu i +1, n +1 (13.13)
cu conditiile la limite si initiale uo,n+1=go(tn+1), u1,n+1=g1(tn+1), ui,o=f(xi)
t

u(0,t)=g0(t) u(1,t)=g1(t)

0 u(x,0)=f(x) x
Fig.4
Exemplul 4. Sa se scrie un program Octave care sa rezolve problema (13.9) si sa se rezolve problema
(13.9) daca x ∈ [0,1] , t ∈ [0,1] ,a=1, f(x)=x*sin(x), g0=0oC, g1=0oC . Se considera o discretizare a
intervalului pe x de pas h=0.2 si discretizare a intervalului pe t de pas k=0.2

octave#1> function U = caldura(f,g1,g2,a,b,c,n,m)


h = a/(n-1);k = b/(m-1);r = c^2*k/h^2;s = 1 - 2*r;U = zeros(n,m);
for j = 1:m,
U(1,j) = feval("g1",k*(j-1)); U(n,j) = feval("g2",k*(j-1));
endfor
for i = 2:(n-1),
U(i,1) = feval("f",h*(i-1));
endfor
for j = 2:m
for i = 2:(n-1)
U(i,j) = s*U(i,j-1) + r*(U(i-1,j-1) + U(i+1,j-1));
endfor
endfor
endfunction

Program Octave :
octave#1> function z = f(x), z = x.*sin(x);endfunction
octave#2> function z = g1(x),z = 0;endfunction
octave#3>function z = g2(x),z = 0;endfunction
octave#4>u=caldura("f","g1","g2",1,1,1,5,5)
u=
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
6.1851e-02 5.2589e-01 -1.2239e+00 -4.2135e+01 9.6302e+02
2.3971e-01 6.1433e-01 -1.2676e+01 1.6702e+02 -2.1227e+03
5.1123e-01 -2.6198e+00 2.0796e+01 -1.9627e+02 2.0420e+03
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00

8.4. ECUATII DIFERENTIALE CU DERIVATE PARTIALE DE TIP HIPERBOLIC


ECUATIA COARDEI VIBRANTE
O coarda elastica perfect flexibila de lungime L este intinsa intre doua puncte capete x=0 si x=L intr-un
plan orizontal. Coarda are o sageata initiala verticala u(x,0)=f(x) si este perturbata din pozitia initiala de
reapus la timpul t=0 pastrand capetele fixe. Sa se determine sageata u(x,t) la un timp t>0 (pentru oscilatii
mici ale coardei). Ecuatia care descrie acest fenomen se scrie sub forma
∂ 2u ∂ 2u
a2 − =0 (13.14)
∂x 2 ∂t 2
v
(a = este viteza de propagare a undelor in lungul coardei, cu v reprezantand tensiunea la capetele
ρ
coardei si ρ mas ape unitatea de lungime)
∂u
Conditiile initiale si la limita atasate ecuatiei (13.14) : u(x,0)=f(x), ( x,0) = g ( x) , u(0,t)=0,u(L,t)=0.
∂t
Daca se considera o discretizare pentru timp un pas ∆t , iar pentru x un pas ∆x si se aplica ecuatiei

∂ 2 u u i , j +1 − 2u i , j + u i , j −1
(13.14) operatorii in diferente finite ≈ si operatorul (13.4) se obtin
∂t 2 (∆t ) 2
formulele de recureanta in diferente finite pentru determinarea deplasarii in punctul xi la timpul tj+1

u i , j = 2(1 − λ2 )u i , j −1 + λ2 u i −1, j −1 + u i +1, j −1 − u i , j − 2 (13.15)

a∆t
unde λ= . Solutia in diferente finite pentru ecuatia (13.13) este stabila pentru λ ≤ 1 .
∆x
Exemplul 4. Sa se scrie un program Octave care sa rezolve problema (13.14) si sa se rezolve problema
(13.13) daca L=1, t ∈ (0 ;0.5], a=2, f(x)=sin(pi*x)+sin(2*pi*x), g(x)=0.
Algoritm:
5. Informatia initiala : Citeste functiile f(x), g(x) si marimile L, tfinal, a, numarul nodurilor pe directia x intre
x=0 si x=L, numarul intervalelor de timp dintre t=0 si t=tfinal
6. Calculeaza pasii h pe Ox si respectiv k pe Ot, h ← L/(n-1); k←tfinal/(m-1). Calculeaza lambda← a*k/h;
7. Pentru i=2:n-1, calculeaza formulele de pornire pentru u(i,1) si u(i,2) folosind conditiile initiale
8. Pentru j=3:m si i=2:n-1 calculeaza u(i,j) dupa formula (13.15)

Functie - Program Octave

octave#1> function u = coarda(”f”,”g”,L,tfinal,a,n,m)


h = L/(n-1);
k = tfinal/(m-1);
lambda = a*k/h;
lambda2 = lambda^2;
u = zeros(n,m);
for i=2:(n-1),
u(i,1) = feval(”f”,h*(i-1));
u(i,2) = (1 – lambda2)*feval(”f”,h*(i-1)) + k*feval(”g”,h*(i-1)) ...
+ (lambda2/2)*(feval(”f”,h*(i)) + feval(”f”,h*(i-2)));
endfor
for j=3:m,
for i=2:(n-1)
u(i,j) = (2-2*lambda2)*u(i,j-1) + lambda2*u(i-1,j-1) + u(i+1,j-1)) - u(i,j-2)
endfor
endfor
endfunction
Program Octave
octave#1> function z = f(x), z = sin(pi*x) + sin(2*pi*x);endfunction
octave#2> function z = g(x),z = 0;endfunction
octave#3>u=coarda(”f”, ”g”,1,0.5,2,11,11)
Rezultate:
x=0 x=0.1 x=0.2 x=0.3 x=0.4 x=0.5 x=0.6 x=0.7 x=0.8 x=0.9 x=1
t=0.0 0 0.89680 1.53884 1.76007 1.53884 1.00000 0.36327 -0.14204 -0.36327 -0.27877 0
t=0.05 0 0.76942 1.32844 1.53884 1.38004 0.95106 0.42898 -0.00000 -0.21040 -0.18164 0
t=0.1 0 0.43164 0.76942 0.94840 0.95106 0.80902 0.58779 0.36062 0.18164 0.06836 0
t=0.15 0 0.00000 0.05160 0.18164 0.37738 0.58779 0.74065 0.76942 0.63938 0.36327 0
t=0.2 0 -0.38004 -0.58779 -0.51942 -0.18164 0.30902 0.76942 1.01942 0.95106 0.57102 0
t=0.25 0 -0.58779 -0.95106 -0.95106 -0.58779 -0.00000 0.58779 0.95106 0.95106 0.58779 0
t=0.3 0 -0.57102 -0.95106 -1.01942 -0.76942 -0.30902 0.18164 0.51942 0.58779 0.38004 0
t=0.3.5 0 -0.36327 -0.63938 -0.76942 -0.74065 -0.58779 -0.37738 -0.18164 -0.05160 -0.00000 0
t=0.4 0 -0.06836 -0.18164 -0.36062 -0.58779 -0.80902 -0.95106 -0.94840 -0.76942 -0.43164 0
t=0.45 0 0.18164 0.21040 0.00000 -0.42898 -0.95106 -1.38004 -1.53884 -1.32844 -0.76942 0
t=0.5 0 0.27877 0.36327 0.14204 -0.36327 -1.00000 -1.53884 -1.76007 -1.53884 -0.89680 0

Fig.5 Repartitia sagetii coardei vibrante din Exemplul 4