Sunteți pe pagina 1din 47

II. Probleme cu valori pe frontieră (continuare) II.4. Metoda diferenţelor finite

Fie problema cu valori pe frontieră

(II.1)

completat în capetele intervalului [a, b] cu condiţii de forma:

(II.2)

În rezolvarea problemelor cu valori pe frontieră folosind metoda diferenţelor finite sunt necesari următorii paşi:

dy ~ =

dx

f

(

x

~

,

y

),

f

:[

a b ×

,

]

R

d

R

d

,

d

2

g

(

~

(

)

( ))

y a

,

y b

~

0

=

- alegerea unei reţele (grile)

g

h

i

: a

=

=

x

x

i

+

1

<

1

x

,

2

x

i

<

i

x

=

3

<

1, 2,

<

,

x

<

x

+

1

=

b

(II.38)

1

- aproximarea derivatelor şi a condiţiilor pe frontieră folosind diferenţe finite şi formarea unui sistem de ecuaţii algebrice

şi obţinerea valorilor numerice

- rezolvarea

sistemului

y

i

~

y

(

x

i

),

i =

1, 2,

,

+

1

II.4.1. O schemă pentru probleme bilocale linire de ordinul II Fie problema bilocală liniară

~

y

~

y

''

(

x

)

(

p x

)

~

y

'

(

x

)

( )=α

0

,

~

y

()=ω

1

2

r

(

x

)

~

y

(

x

)

=

(

q x

)

,

x

[

0,1

]

(II.39)

Pentru a rezolva numeric problema (II.39) introducem o grilă uniformă definită astfel:

h =

1

x

i

=

i

(

1) ,

h

i

i

= =

1, 2,

,

+

1

(II.40)

apoi vom evalua derivatele de ordinul doi şi întâi din ecuaţia (II.39) folosind dezvoltări în serie Taylor. Astfel avem:

y

(

x

(

y x

i

i

+ )

)

(

(

1 y x

1

y x

= +

i

= −

i

h

h

)

)

=

=

(

y x

(

y x

i

i

)

)

+

hy

hy

' (

x

i

'

(

x

i

)

)

+

+

h

2

2

h

2

2

y

y

''

''

(

x

i

(

x

i

)

)

+

6

6

h

3

h

3

6

y

y

'''

'''

(

x

i

(

x

i

)

)

+

+

(

O h

(

O h

4

4

)

)

(II.41)

Scăzând şi adunând relaţiile (II.41) obţinem:

3

y

y

'

(

''

x

i

(

x

)

=

i

)

=

(

y x

i

+

1

)

(

y x

i

1

)

(

y x

i

+

1

2 h

)

2

(

y x

i

)

(

+ O h

+

(

y x

2

)

i

1

)

h

2

(

+ O h

2

)

(II.42)

Folosind notaţia

y

i

(

= y x

i

)

putem discretiza ecuaţia (II.39) astfel:

y

y

1

i

+

=

1

α

2

y

i

+

y

i

1

h

2

(

p x

y + 1

SAU

y

1

=

α

y − −

i

1

1

=

h

2

ω

(

p x

i

)

+

y

i

[

2

+

i

)

y

i

+

1

y

i

1

2

h

r

(

x

i

)

h

2

]

+

y

i

+ 1

r

(

x

i

)

y

− +

1

(

q x

i

)

=

i

h

2

(

p x

i

)

,

=

i

=

(

q x

2, 3,

i

)

h

2

,

,

i

=

(II.43)

2, 3,

,

y + 1

= ω

(II.43’)

4

Se observă că ecuaţiile (II.43) formează un sistem tridiagonal de forma

unde

b i

1

=− −

h

2

a

b

1 c

2 a

b

1

2

3

c

a

2

3

O

(

p x

i

a

,

)

1

=

a

i

a

+1

=

2

= +

1,

r

(

c

3

O

b

O

a

b

+

c

x

i

1

)

=

h

2

0,

,

c

i

= 2, 3,

1

b

i

c

a

+

1

× 

y 1

y 2

y

3

M

y

y

+

 



M

d

= 


d

1


d

2

3

d

d

+1

1

0,

h

+1

=

1

=− +

2

,

d

1

=α

(

p x

i

)

,

,

d

+1

d

i

=

=ω

(

q x

i

)

5

h

2

(II.44)

(II.45)

Sistemul tridiagonal (II.44) se poate rezolva prin metode eficiente, de exemplu algoritmul lui Thomas. Facem observaţia că în general metodele cu diferenţe finite conduc la sisteme algebrice cu o structură de tip bandă pentru care există metode numerice eficiente. Conform teoriei rezolvării numerice a sistemelor de ecuaţii avem teorema (vezi Faires şi Burden, 2002):

Teorema 13: Dacă p, q, r C[0,1] şi r(x) 0pe [0,1] atunci sistemul

tridiagonal (II.44) are soluţie unică obţinută pentru

unde

L = max

0

x

≤ ≤

1

p(x)

.

6

h <

L

2

Exemplu 1: Fie problema bilocală

y (x) y(x)

''

=

1

2

e

x

=

Soluţia analitică y(x)

( 1+

e

x

,

y(

0

)

= 1/ 2,

y() e

1

=

x) se poate obţine cu Mathematica.

In[25]:= DSolve@8y''@xD y@xD + Exp@xD, y@0D 1 ê 2, y@1D Exp@1D<, y@xD, xD

Out[25]=

99y@xD

1 x H1+xL==
2

Discretizăm în continuare problema folosind diferenţe finite pentru o grilă echidistantă cu noduri:

7

y

y

1

i

= 1/ 2

1

2

y

i

+

y

i

+

1

e

x i , i

2, 3,

1

y

=

h

e

2

y

i

=

=

,


= 

 

care se scrie sub formă de sistem astfel:

1

1

2

+

h

O

2

1

O

1

2

O

+

h

2

1

1

 × 


 

 

y

y

M

1 1/ 2

2

M

(

e

 

h

e

2 h

2

e

2

)

h

y 1

y

h

Dăm în continuare programul Matlab care rezolvă problema:

%Problema liniara cu valori pe frontiera PLVF

a=0;b=1;N=6;

h=(b-a)/(N-1);

8

A=zeros(N,N);y=zeros(N,1);r=zeros(N,1);

%valoarea pe frontiera in punctul a

A(1,1)=1;r(1)=0.5;

%pentru i=2,N-1 for i=2:N-1

A(i,i-1)=-1;A(i,i)=2+h*h;A(i,i+1)=-1;

r(i)=-h*h*exp((i-1)*h);

end

%valoarea pe frontiera in punctul b

A(N,N)=1;r(N)=exp(1);

y=A\r; x=a:h:b; plot(x,y,'.r');%solutia numerica hold on

x=a:0.1*h:b;

plot(x,0.5*(1+x).*exp(x),'b'); %solutia exacta

9

Figura 17. Comparaţie între soluţia analitică şi cea numerică. 10

Figura 17. Comparaţie între soluţia analitică şi cea numerică.

10

h

y

y

exact

y y

exact

0.0

0.500000

0.500000

0.000000

0.2

0.733839

0.732841

0.000998

0.4

1.045889

1.044277

0.001612

0.6

1.459447

1.457695

0.001752

0.8

2.004268

2.002986

0.001281

1.0

2.718281

2.718281

0.000000

Tabelul 8.Comparaţie între valorile numerice şi exacte

11

II.4.2. O schemă pentru probleme bilocale nelinire de ordinul II

Fie problema neliniară cu valori pe frontieră

~

y

''

= f

(

x

,

~

y

,

~

y

'),

x a b

[

,

],

~

(

y a

)

= y

a

,

(

y b

~

)

= y

b

(II.46)

Presupunem că sunt îndeplinite condiţiile Teoremei 12 astfel încât problema (II.46) are soluţie unică. Discretizăm problema (II.4) folosind diferenţe finite pentru o grilă echidistantă cu pasul h cu + 2 noduri:

y

0

=

y

a

y

i

+

1

2

y

i

+

y

i

1

 

h

2

y

+ 1

=

y

b

= f

(

x

i

,

y

i

y

i

+

1

y

i

1

,

12

2 h

),

i

=

1, 2,

,

(II.47)

Sistemul (II.47) poate fi rescris astfel:

sau

2

y

1

y

y

i

1

1

y

2

+

h

2

+

2

y

i

+

2

y

f

x

y

i

+

1

1

,

+

y

1

h

,

2

y

2

y

a

f

(

2

x

h

i

,

y

i

− y

,

y

i + 1

a

= 0

y

i 1

2 h

),

+

h

2

f

y

y

b

1

x

,

y

,

2

h

− y

f

1

(

f

y

1

(

y

,

1

y

2

,

y

,

2

,

,

y

)

,

y

=

0

)

= 0

13

i

=

2,

b = 0

,

1

(II.48)

Se observă ca pentru găsirea valorilor

y

i avem de rezolvat sistemul

neliniar (II.48) şi pentru rezolvarea lui vom folosi metoda lui Newton

unde

F =

(

f ,

1

y

(

k

)

,

f

=

)

T

y

(

y (

k

k

1

)

)

=

y

(

k

1

)

+

ε

(

k

1

)

,

(

J y

(

k

1

)

sau

(

J y

(

k

1

)

)

1

)

ε

(

(

F y

(

k

1

k

1

)

=−

)

)

(

F y

(

k

1

)

, iar componentele Jacobianului

)

J =

care este o matrice tridiagonală, sunt:

14

(II.49)

(

f

1

,

,

f

n

)

(

y

1

,

,

y

)

,

J

(

y

1

,

y

2

,

,

y

)

ij

= 2

1

+

+ h

1

+

h

2

f

~

y

'

2

f

~

y

h

2

f

~

y

'

x

i

x

i

,

x

i

,

y

i

y

i

,

,

y

i

y

i

+

1

y

i

1

,

y

i

+

1

2

h

y

i

1

2

h

y

i

+

1

y

i

1

,

2

h

,

,

,

 

i

=

j

1,

j

=

2,

,

i

=

j

,

j

=

1,

,

i

=

j

+

1,

j

=

1,

,

1

(II.50)

II.4.3.Metoda Keller-Box Metoda Keller – Box este o metoda care utilizează diferenţe finite, problemele de rezolvat reducându-se la rezolvarea unor sisteme de ecuaţii algebrice. Metoda a fost introdusă de Keller (1970) şi

15

aplicată apoi de alţi autori în problemele de strat limită laminar şi turbulent. Ea a fost popularizată odată cu apariţia cărţii lui Cebeci şi Bradshaw (1984). Metoda Keller – Box este deosebit de eficientă în rezolvarea ecuaţiilor diferenţiale ordinare şi a ecuaţiilor cu derivate parţiale de tip parabolic. Astfel de ecuaţii sau sisteme de ecuaţii apar şi în modelarea curgerilor cu strat limită, a convecţiei, a fenomenelor de transport, etc. Pentru a rezolva ecuaţiile diferenţiale ordinare sau cu derivate parţiale folosind metoda Keller – Box se utilizează schema iterativă Newton – Raphson de rezolvare a ecuaţiilor şi sistemelor

16

de ecuaţii algebrice neliniare. Astfel, dacă avem o ecuaţie algebrică neliniară de forma f(x) = 0, vom considera iteraţia necesară aflării rădăcinii

(II.51)

unde x n este aproximaţia rădăcinii la pasul n, iar ε n este eroarea de

calcul la acelaşi pas. Apoi, pentru a afla valoarea lui ε n , dezvoltăm în serie Taylor funcţia f(x) în punctul x n+1 :

(II.52)

unde f ’ reprezintă derivata funcţiei f şi păstrând doar termenii de

ordin întâi în ε n avem:

x n+1 = x n + ε n

0 = f(x n+1 ) = f(x n + ε n ) = f(x n ) + ε n f ‘(x n ) + …

17

f (x

n )

ε ≈−

n

f'(x

n )

(II.53)

Întru cât ε n este cunoscut, folosind relaţia (II.51), putem găsi iteraţia care ne va conduce la aflarea rădăcinii:

f (x

n )

x

n

+

1

=

x

n

+ε =

n

x

n

f'(x

n )

(II.54)

Putem generaliza acest raţionament şi în cazul unui sistem algebric neliniar de N ecuaţii cu N necunoscute:

f

(x

1 1

f

(x

2 1

f

N

(x

1

, x

, x

, x

2

2

2

,

,

,

,

,

,

x

x

x

N

N

N

)

)

)

=

=

=

0

0

0

(II.55)

18

Considerăm acum iteraţia (II.51) pentru aflarea rădăcinii, scrisă în formă N – dimensională:

(x 1 , x 2 , …, x N ) (n+1) = (x 1 , x 2 , …, x N ) (n) + (ε 1 , ε 2 , …, ε N ) (n) (II.56) şi în continuare dezvoltăm sistemul (II.56) în serie Taylor:

0

=

f

j

(

x

1

(n

+

1)

, x

2

(n

+

1)

,

,

x

N

(n

+

1)

)

=

f

j

(

x

(n)

1

, x

2

(n)

,

j

=

,

x

(n)

N

1, N

)

N

+

i

=

1

 ∂ f

x

j

i

(n)

ε

i

(n)

unde necunoscutele ε i (n) , i = 1, 2, …, N se pot determina rezolvând următorul sistem:

19

 ∂ f

1

x

f

1

2

x

1

f

N

x

1

f

1

x

f

2

2

x

2

f

N

x

2

f

1

x

f

N

2

x

f

N

N

x

N

(n)

 ε 

1

ε

2

ε

N

(n)

=−

f

1

f

2

f

N

(n)

(II.57)

Sistemul (II.57) fiind liniar poate fi rezolvat cu o rutină de tip Gauss. Totuşi, nu este uşor să găsim toate soluţiile sistemului (II.55) şi nu vom obţine soluţie pentru orice alegere iniţială, x 1 . Pentru evaluarea derivatelor din matricea sistemului (II.57) putem folosi diferenţe finite şi, chiar dacă nu avem o eficienţă atât de

20

mare, scrierea codului poate fi generalizată pentru funcţii foarte complicate. Astfel, de exemplu, avem:

f

j

x

i

f

j

(

x

1

,

,

x

j1

, x

j

, x

j+1

,

,

x

N

)

f

j

(

x

1

,

,

x

j1

, x

j

, x

j+1

,

,

x

N

)

δ

(II.58)

unde δ este un număr mic (10 -5 ) şi nu neapărat pozitiv.

În cazuri extreme putem folosi un factor de relaxare, ω, pentru a subrelaxa corecţiile şi pentru a preîntâmpina o posibilă divergenţă:

(x 1 , x 2 , …, x N ) (n+1) = (x 1 , x 2 , …, x N ) (n) + ω(ε 1 , ε 2 , …, ε N ) (n) (II.59)

21

unde 0 < ω ≤ 1, metoda Newton – Raphson corespunzând cazului

în care ω = 1.

Vom arăta în continuare cum se aplică această metodă pe un caz concret. Considerăm ecuaţia convecţiei libere pe o placă permeabilă, verticală, cu generare internă de căldură, plasată într- un mediu poros (vezi Postelnicu şi ceilalţi, 2000):

f ''' +

λ+ 1

2

ff ''

−λ

f '

2

+

e

−η

cu condiţiile la limită:

=

0

f(0) = - f w , f ‘(0) = 1, f ‘() = 0

22

(II.60)

(II.61)

unde f w este parametrul fluxului de masă (sucţiune sau injecţie), iar λ este o constantă. În această metodă se reduce ecuaţia (II.60) la un sistem de ecuaţii diferenţiale ordinare de ordinul unu făcând următoarele notaţii

a = f, b = f ‘, c = f “ Înlocuind în (II.60) şi (II.61) obţinem

(II.62)

c' +

λ+ 1

2

a'

b

=

b'

c

=

ac

−λ

b

0

0

2

+

e

−η

=

0

(II.63a)

23

iar condiţiile la limită (II.61) devin:

a(0)

b(

+

f

w

1

0

=

=

0

0

b(0)

)

∞ =

(II.63b)

Definim o reţea de puncte η 1 , η 2 , …, η N (η 1 = 0, η N = η ), paşii putând fi inegali, adică h i = η i+1 - η i . Pentru discretizarea derivatelor de ordinul întâi folosim diferenţe finite centrale şi vom nota a i = a(η i ). Aproximarea pentru a’(η) în

η = η i+1/2 =

η

i

+

1

i

2

este

24

a'

i

+

1/ 2

a

i

+

1

a

i

h

i

iar pentru a(η i+1/2 ) vom avea

a

i

+

1 / 2

a

i

+

1

+

a

i

2

.

După discretizare, considerând că avem un pas echidistant, ecuaţiile (II.63a) devin

c

i + 1

c

i

h

+

λ+ 1

8

(

a

i

+

a

i

+

1

a

i

b

i

+

1

h

b

i

1

+

h

a

i

)(

c

i

+

b

i

+

1

+

b

i

2

c

i

+

1

+

c

i

1

+

c

i

2

)

λ

4

25

= 0

= 0

(

b

i

+

1

+

b

i

)

2

+

e

−η

i + 1 / 2

=

0

(II.64)

pentru i = 1, 2,…, N-1, având 3N – 3 ecuaţii pentru 3N necunoscute. Numărul ecuaţiilor se completează cu condiţiile pe frontieră (II.63b) care, discretizate, se vor scrie:

(II.65)

Pentru a rezolva sistemul (II.64) – (II.65) folosim iteraţia Newton – Raphson, a i (n+1) = a i (n) + δa i (n) şi utilizăm expresii similare şi pentru b şi c. Înlocuind aceste expresii în (II.64) şi (II.75) şi păstrând doar termenii de ordinul întâi în δ, rezultă:

a 1 + f w = 0, b 1 – 1 =0, b N = 0

δ

a

i

+

1

−δ

a

i

h

δ

b

i

+

1

b

i

2

=−

a

a

i

i

+

1

h

b

i

+

1

+

b

i

2

(n)

(II.66a)

26

(n)

δ

b

i

+

1

−δ

b

i

δ

c

i

+

1

c

i

b

b

i

c

i

+

1

+

c

i

 

2

c

i

)(

δ

a

i

+

1

a

i

)(

c

i

+

1

+

+

+

c

i

)

i

+

1

2

=−

h

λ+ 1

 

h

 

δ

c

i

+

1

−δ

c

i

+

λ+ 1

(

   
 

h

8

 

λ

2

(

b

i

+

1

+

b

i

)(

δ

b

i

+

1

a

i

+

1

+

i

a

)

i

)(

δ

=−

c

i

+

1

c

i

)

+

8

(

c

i

+

1

c

i

λ+ 1

(

h

+

8

c

a

i

i

+

1

+

1

a

i

b

)

λ

4

(

b

i

+

1

(II.66b)

+

b

i

)

2

+

e

−η

i

+

1 / 2

(n)

(II.66c)

Condiţiile la limită (II.65) devin:

δa 1 = -a 1 (n) + f w , δb 1 = 1 – b 1 (n) , δb N = - b N (n) (II.67) Putem scrie sistemul (II.66) – (II.67) sub forma matricială (II.68), unde valorile pentru (r i ) j sunt date de relaţiile:

27

(

(

r

1

r

2

(

r

3

)

i

)

i

)

i

=−

a

i

+

1

a

i

h

b

b

i

+

1

+

i

2

=−

b

b

i

i

+

1

h

c

c

i

+

1

+

i

2

=−

c

c

i

i + 1

h

λ+ 1

+

8

(

a

i

+

1

+

a

i

)(

c

i

+

1

+

28

c

i

)

λ

4

(

b

i

+

1

+

b

i

)

2

+

e

−η

i + 1 / 2



 δ

.

δ

δ

1

0

1

λ+

1