Rezolvarea ecuaţiilor şi sistemelor de ecuaţii diferenţiale ordinare Prof.dr.ing. Universitatea "Politehnica" Bucureşti, Facultatea de Inginerie Electrică Suport didactic pentru disciplina Metode numerice, 2017-2018 1/31 Cuprins 1 2 2/31
Ecuaţie diferenţială ordinară (ODE) Se dau Se cere care satisface f : IR [t 0, T] IR x 0 IR x : [t 0, T] IR dx = f(x(t), t) (1) dt x(t 0 ) = x 0 (2) 3/31 Ecuaţie diferenţială ordinară (ODE) Se dau Se cere care satisface f : IR [t 0, T] IR x 0 IR x : [t 0, T] IR dx = f(x(t), t) (1) dt x(t 0 ) = x 0 (2) Problemă cu o valoare iniţială 3/31
Ecuaţie diferenţială ordinară (ODE) Metoda numerică va furniza un tabel de valori: t 0 t 1 t 2 t n unde t n = T Obs: x 0 x 1 x 2 x n De multe ori t reprezintă timp şi se poate considera t 0 = 0; Vom nota: x(t ) soluţia exactă şi x aproximaţia ei x x(t ) În cele ce urmează vom pp: t t 1 = h t k = t 0 + h 4/31 explicită Dezvoltarea în serie Taylor în urul lui t Formula Taylor x(t + h) = x(t )+ h 1! x (t )+ h2 2! x (t )+ (3) x(t + h) = x(t )+ h 1! x (t )+ h2 2! x (ζ) (4) x(t + h) = x(t )+hf(x(t ), t )+O(h 2 ) (5) Dacă am presupune că valoarea la iteraţia a fost calculată exact x = x(t ) atunci x(t + h) = x + hf(x, t )+O(h 2 ) (6) 5/31
explicită Dacă am presupune că valoarea la iteraţia nu este afectată de erori x = x(t ) atunci x(t + h) = x + hf(x, t )+O(h 2 ) Dacă adoptăm ca formulă de calcul (Euler explicit) atunci eroarea locală la iteraţia este x +1 = x + hf(x, t ) (7) e l = x(t +1 ) x +1 = O(h 2 ) (8) 6/31 explicită Dacă am presupune că valoarea la iteraţia nu a fost calculată exact x(t ) = x + e x atunci x(t + h) = x + e x + hf(x, t )+O(h 2 ) Dacă adoptăm ca formulă de calcul (Euler explicit) atunci eroarea locală este x +1 = x + hf(x, t ) (9) e x+1 = x(t +1 ) x +1 = e x + O(h 2 ) (10) 7/31
explicită Eroarea globală este eroarea la ultimul moment de timp e g = x(t n ) x n = e xn + O(h 2 ) = e xn 1 + O(h 2 )+O(h 2 ) = = no(h 2 ) = T t 0 O(h 2 ) = O(h) (11) h 8/31 explicită O altă variantă de deducere a relaţiei de calcul dx dt = f(x(t), t) (12) Se scrie ecuaţia la momentul de timp discret t ; Pentru derivată: formulă de diferenţe finite progresive de ordinul 1 x +1 x = f(x, t ) (13) h x +1 = x + hf(x, t ) (14) 9/31
explicită O altă variantă de deducere a relaţiei de calcul dx dt = f(x(t), t) (12) Se scrie ecuaţia la momentul de timp discret t ; Pentru derivată: formulă de diferenţe finite progresive de ordinul 1 x +1 x = f(x, t ) (13) h x +1 = x + hf(x, t ) (14) Folosirea seriei Taylor este utilă pentru estimarea erorii de trunchiere. 9/31 explicită - algoritm procedură Euler_explicit (xinit,t0,t,h,x) real xinit real t0, T real h n = [(T t0)/h] tablou real t[n + 1] tablou real x[n + 1] t 0 = t0 x 0 = xinit pentru = 0, n 1 x +1 = x + hf(x, t ) t +1 = t + h retur 10/31
implicită Derivata: formulă de diferenţe finite regresive de ordinul 1 dx dt = f(x(t), t) (15) x x 1 h = f(x, t ) (16) x = x 1 + hf(x, t ) (17) 11/31 implicită Derivata: formulă de diferenţe finite regresive de ordinul 1 dx dt = f(x(t), t) (15) x x 1 h = f(x, t ) (16) x = x 1 + hf(x, t ) (17) Relaţia este implicită, la fiecare pas se rezolvă o ecuaţie algebrică neliniară pentru determinarea mărimii x implicită 11/31
implicită Derivata: formulă de diferenţe finite regresive de ordinul 1 dx dt = f(x(t), t) (15) x x 1 h = f(x, t ) (16) x = x 1 + hf(x, t ) (17) Relaţia este implicită, la fiecare pas se rezolvă o ecuaţie algebrică neliniară pentru determinarea mărimii x implicită Şi în acest caz e l = O(h 2 ) e g = O(h) 11/31 implicită x = x 1 + hf(x, t ) (18) Ecuaţia neliniară de rezolvat: F(x) = 0, unde F(x) = x x 1 hf(x, t ) Iteraţii simple: x (n) = x (v) + cf(x (v) ) aici x (n) = x (n) x (v) = x (v) x (n) = x (v) + c(x (v) De exemplu, dacă c = 1 x (n) x 1 hf(x (v), t )) = x 1 + hf(x (v), t )) 12/31
implicită x = x 1 + hf(x, t ) (18) Ecuaţia neliniară de rezolvat: F(x) = 0, unde F(x) = x x 1 hf(x, t ) Newton: x (n) = x (v) + cf(x (v) ) aici x (n) = x (n) x (v) = x (v) c = 1/F (x (v) ) unde F (x) = 1 h f x (x, t ) x (n) = x (v) x(v) x 1 hf(x (v), t ) 1 h f x (x(v), t ) 12/31 implicită La fiecare pas de timp se rezolvă o ecuaţie neliniară; Iniţializarea rezolvării ecuaţiei neliniare - de exemplu cu soluţia de la Euler explicit; Eroarea şi numărul maxim admis de iteraţii pentru procedura neliniară - trebuie să fie parametri de intrare pentru Euler implicit; Dacă f este o funcţie liniară, atunci F(x) = 0 este o ecuaţie liniară, soluţia se poate calcula explicit. este o metodă într-un pas, de ordinul 1. Metoda într-un pas = valoarea la un moment de timp se calculează în funcţie de o valoare la un singur moment de timp anterior; Ordinul metodei = se referă la ordinul erorii globale, aici e g = O(h). 13/31
implicită procedură Euler_implicit (xinit,t0,t,h,err,maxit,x) real xinit real t0, T real h real err întreg maxit n = [(T t0)/h] tablou real t[n + 1] tablou real x[n + 1] t 0 = t0 x 0 = xinit... 14/31 implicită procedură Euler_implicit (xinit,t0,t,h,err,maxit,x)... pentru = 0, n 1 xn = x + hf(x, t ) ; iniţializare ca la Euler explicit ; iteratii simple (c=-1) k = 0 repetă xv = xn xn = x + hf(xv, t ) k = k + 1 d = xv xn până când (d < err) sau k > maxit dacă k > maxit scrie procedura neliniară neconvergentă t +1 = t + h x +1 = xn retur sau cu Newton: 14/31
implicită procedură Euler_implicit (xinit,t0,t,h,err,maxit,x)... pentru = 0, n 1 xn = x + hf(x, t ) ; iniţializare ca la Euler explicit ; Newton k = 0 repetă xv = xn xn = x (xv x 1 hf(xv, t ))/(1 h fder(xv, t )) k = k + 1 d = xv xn până când (d < err) sau k > maxit dacă k > maxit scrie procedura neliniară neconvergentă t +1 = t + h x +1 = xn retur 14/31 R R E i(t) u(t) e(t)=e 1(t) i(t) u(t) C = 4µF, E = 20 mv, R = 10 Ω, u(0) = 0. Ri(t)+u(t) = E RC du(t) dt i(t) = C du(t), (19) dt + u(t) = E. u(0) = u 0 = 0. (20) 15/31
R R E i(t) u(t) e(t)=e 1(t) i(t) u(t) Soluţie analitică u(t) = (u 0 E) exp( t/τ)+e. (19) unde τ = RC este constanta de timp a circuitului. 15/31 Ecuaţia (20) o rescriem ca du(t) dt + 1 τ u(t) = 1 E. (20) τ Vom urmări calculul numeric în intervalul de timp [0, t max ] unde t max = 10τ într-o reţea echidistantă de N puncte t k, unde pasul de discretizare h este t k+1 t k = h, pentru k = 1,...,N 1. (21) Vom nota valorile discrete obţinute prin rezolvare numerică cu u k. Ele vor fi aproximaţii ale mărimii reale u. u k u(t k ). (22) 16/31
du(t) + 1 dt τ u(t) = 1 E. (23) τ Varianta I - Euler explicit (dif. finite progresive de ord. 1) u k+1 u k h + 1 τ u k = 1 E, (24) τ u k+1 poate fi calculată explicit cu formula ( u k+1 = u k 1 h ) + h E. (25) τ τ 17/31 ( u k+1 = u k 1 h ) + h E. (26) τ τ procedură euler_explicit_rc(u0,e,tau,h,n,u) ; rezolvă ecuaţia du(t) + dt τ 1 u(t) = τ 1 E cu metoda diferenţelor finite ; d/dt se discretizează folosind diferenţe progresive de ordinul 1 real u0 ; condiţia iniţială - dată real E ; coeficient în ecuaţie - dată real tau ; constantă de timp - dată real h ; pas de discretizare al intervalului de timp - dat întreg N ; număr de valori de timp - dat tablou real u[n] ; soluţia discretă - rezultat u(1) = u0 pentru k = 1,N-1 u(k+1) = u(k)*(1-h/tau) + h*e/tau retur Această metodă, este instabilă pentru h > τ. 18/31
du(t) + 1 dt τ u(t) = 1 E. (27) τ Varianta a II-a - Euler implicit (dif. finite regresive de ord. 1) u k u k 1 h + 1 τ u k = 1 E, (28) τ u k poate fi calculată explicit: u k = (u k 1 + hτ ) ( E / 1+ h ). (29) τ 19/31 du(t) + 1 dt τ u(t) = 1 E. (27) τ Varianta a II-a - Euler implicit (dif. finite regresive de ord. 1) u k u k 1 h + 1 τ u k = 1 E, (28) τ u k poate fi calculată explicit: u k = (u k 1 + hτ ) ( E / 1+ h ). (29) τ În acest caz nu este nevoie de rezolvarea unei ecuaţii neliniare 19/31
u k = (u k 1 + hτ ) ( E / 1+ h ). (30) τ procedură euler_implicit_rc(u0,e,tau,h,n,u) ; rezolvă ecuaţia du(t) + dt τ 1 u(t) = τ 1 E cu metoda diferenţelor finite ; d/dt se discretizează folosind diferenţe regresive de ordinul 1 real u0 ; condiţia iniţială - dată real E ; coeficient în ecuaţie - dată real tau ; constantă de timp - dată real h ; pas de discretizare al intervalului de timp - dat întreg N ; număr de valori de timp - dat tablou real u[n] ; soluţia discretă - rezultat u(1) = u0 pentru k = 2,N u(k) = (h*e/tau + u(k-1))/(1 + h/tau) retur 20/31 0.04 0.035 h/tau = 2.000000 analitic prog ord 1 regr ord 1 0.025 h/tau = 2.000000 prog ord 1 regr ord 1 0.03 0.02 u [V] 0.025 0.02 0.015 Eroare absoluta [V] 0.015 0.01 0.01 0.005 0.005 0 0 0 1 2 3 4 0 1 2 3 4 t [s] t [s] x 10-4 x 10-4 Cazul h = 2τ. 21/31
0.04 0.035 h/tau = 1.000000 analitic prog ord 1 regr ord 1 0.025 h/tau = 1.000000 prog ord 1 regr ord 1 0.03 0.02 u [V] 0.025 0.02 0.015 Eroare absoluta [V] 0.015 0.01 0.01 0.005 0.005 0 0 0 1 2 3 4 0 1 2 3 4 t [s] t [s] x 10-4 x 10-4 Cazul h = τ. 21/31 0.04 0.035 h/tau = 0.500000 analitic prog ord 1 regr ord 1 0.025 h/tau = 0.500000 prog ord 1 regr ord 1 0.03 0.02 u [V] 0.025 0.02 0.015 Eroare absoluta [V] 0.015 0.01 0.01 0.005 0.005 0 0 0 1 2 3 4 0 1 2 3 4 t [s] t [s] x 10-4 x 10-4 Cazul h = τ/2. 21/31
Se dau Se cere care satisface f : IR n [t 0, T] IR n x : [t 0, T] IR n x0 IR n x (t) = f(x(t), t), (31) x(t 0 ) = x0 (32) unde de exemplu f(x(t), t) = Ax(t)+Bu(t), iar A şi B sunt date 22/31 Metode în m paşi Axa timpului se discretizează în momente discrete: t 0, t 1, t 2,..., şi se calculează aproximări x n ale soluţiei necunoscute x(t n ) x n x(t n ). (33) O metodă generală în m paşi aproximează soluţia la un moment discret t n+m în funcţie de soluţiile obţinute în m paşi anteriori t n, t n+1,...,t n+m 1 : m ρ i x n+i = h i=0 unde h = t n+m t n+m 1. m σ i f(x n+i, t n+i ) (34) i=0 23/31
Metode în m paşi m ρ i x n+i = h i=0 m σ i f(x n+i, t n+i ), (35) i=0 unde h = t n+m t n+m 1. ρ m = 1, iar coeficienţilor ρ i şi σ i sunt aleşi astfel încât procedeul să fie convergent. Dacă σ m = 0, atunci calculul valorii noi x n+m se face explicit; Dacă σ m 0, atunci calculul valorii noi x n+m se face implicit şi necesită rezolvarea unei ecuaţii algebrice, în general neliniare. 24/31 Metode într-un pas Metode într-un pas: m = 1 x n + x n+1 = h[σ 0 f(x n, t n )+σ 1 f(x n+1, t n+1 )], (36) unde ρ 0 = 1 din motive de convergenţă. Dacă notăm σ 0 = θ şi σ 1 = 1 θ, aceste metode cu un pas se numesc metode θ. In particular, şi renotând n cu k 1, există următoarele scheme de calcul celebre 25/31
Metode într-un pas - metode θ explicită (sau progresivă) θ = 1: x k = x k 1 + hf(x k 1, t k 1 ) (37) unde h = t k t k 1. (Derivata din sistemul de ecuaţii: diferenţe finite progresive de ordinul 1). implicită (sau regresivă) θ = 0: x k = x k 1 + hf(x k, t k ) (38) unde h = t k t k 1. (Derivata din sistemul de ecuaţii: diferenţe finite regresive de ordinul 1.) Metoda trapezelor θ = 1/2: x k = x k 1 + h 2 (f(x k 1, t k 1 )+f(x k, t k )) (39) unde h = t k t k 1. 26/31 Metode într-un pas - metode θ Justificarea numelui metodei trapezelor. x(t) = t t 0 f(x(t ), t ) dt. (40) Considerând momentele discrete t k 1 şi t k are loc x(t k ) = tk 1 t 0 f(x(t), t) dt + tk t k 1 f(x(t), t) dt. (41) Schema de calcul va înlocui valorile exacte cu unele aproximative, în consecinţă 27/31
Metode într-un pas - metode θ x k = x k 1 + I, (42) unde I reprezinta o aproximare pentru integrala t k t k 1 f(x(t), t) dt. Dacă f - funcţie scalară cea mai simplă aproximare a integralei = aria trapezului corespunzător intervalului [t k 1, t k ] (39). Metoda trapezelor este de ordinul 2. 28/31 Metode într-un pas de ordin superior Dacă pentru I se aleg scheme numerice mai rafinate şi mai eficiente, care conduc la iteraţii în timp de tipul x k = x k 1 + h ν b f(x(t k 1 + c h), t k 1 + c h). (43) =1 Într-o astfel de formulă, valorile x(t k 1 + c h) nu sunt cunoscute. Aproximarea lor prin combinaţii liniare ale unor valori calculate succesiv conduce la scheme de tip Runge-Kutta cu ν etape. 29/31
Metode multi-pas de ordin superior O altă variantă a schemelor multipas date de (35) este cea în care σ i = 0 pentru orice i < m. Se numesc scheme BDF (backward differentiation formula): m 1 i=0 ρ i x n+i + x n+m = hσ m f(x n+m, t n+m ) (44) unde h = t n+m t n+m 1. Renotând n+m cu k, modul de calcul al soluţiei la iteraţia k în funcţie de m paşi anteriori este m 1 x k hσ m f(x k, t k ) = ρ i x k m+i (45) i=0 30/31 Lectură obligatorie Cap.10 din [1], Mihai Rebican, Daniel Ioan - Metode numerice in ingineria electrica - Indrumar de laborator pentru studentii facultatii de Inginerie electrica, Editura Printech, 2013, disponibil la http://mn.lmn.pub.ro/indrumar/indrumarmn_printech2013.pdf 31/31