Equazioni Differenziali I
Transcript
Equazioni Differenziali I
Soluzione di equazioni differenziali alle derivate ordinarie: Metodo Runge-Kutta Torna all'indice generale Esporremo due metodi distinti per la soluzione di equazioni differenziali ordinarie al valore iniziale (Problema di Cauchy) • Il metodo Runge Kutta, basato sullo sviluppo in polinomi della funzione incognita. • Il metodo Burlich-Stoer, basato sulla tecnica di estrapolazione di Richardson. Metodo caratterizzato da una elevata velocità di convergenza per quei problemi che hanno una soluzione "regolare". Il metodo di Runge Kutta è considerato un metodo "solido" che, anche se non particolarmente veloce, permette di ottenere un risultato affidabile in tutte le situazioni. Prima di entrare nel dettaglio della descizione del metodo di Runge Kutta, osserviamo che un generico problema differenziale di qualsiasi ordine può sempre essere ridotto, tramite opportune sostituzioni, ad un sistema di equazioni differenziali del primo ordine. Senza quindi perdere in generalità, consideriamo un problema differenziale nella forma seguente y' ( x ) f ( x , y) y( a ) b ( 1) dove y è un vettore e la variabile indipendente x uno scalare. Si osservi che la ricerca della soluzione di questo problema non è molto diversa dal problema relativo al calcolo di un integrale. Il calcolo della funzione g ( x ) x g(x) f( t) dt a è infatti equivalente alla soluzione del particolare problema differenziale g' ( x ) f ( x ) g ( a) 0 Per questo motivo tutti i metodi che esporremo in questa sezione, riformulando opportunamente il problema, sono applicabili anche al calcolo di integrali. Data la possibile dipendenza della funzione f nella ( 1 ) dalla funzione incognita, non è in generale vero il contrario. Nella determinazione di un algoritmo per la soluzione della ( 1 )procediamo in modo analogo al caso relativo al calcolo degli integrali con il metodo di Simpson. Assumiamo innanzitutto che la funzione incognita sia "sufficientemente" derivabile e che sia quindi possibile espanderla in serie in un intorno del punto x a. y( x ) y( a ) (x a ) y' ( x ) x a (x 2 a) . y'' ( x ) x a 2 O( x troncando lo sviluppo al primo ordine e sostituendo x y( x h ) ( y( a ) h .f( a , b ) ) a) 3 a h si ottiene 2 O h . In linea di principio sarebbe possibile estendere il calcolo della funzione su un intervallo macroscopico semplicemente iterando questa procedura, yn 1 yn h . f xn , yn xn 1 xn h Il metodo cosi' ottenuto è noto come metodo di Eulero Cauchy. Purtroppo il risultato in questo caso è affetto da un 2 errore dell'ordine O h per ciascuna iterazione, e solo O ( h )per l'integrazione dell'equazione su un intervallo fissato. Per aumentare l'ordine di convergenza osserviamo che è possibile cancellare il termine di errore relativo all'ordine più h basso propagando la soluzione prima di un intervallo di lunghezza h, poi di due intervalli di lunghezza ed infine 2 combinando opportunamente le due soluzioni. 29 Indichiamo con y( a solo passo avremo y( a h ) la soluzione esatta dell'equazione differenziale nel punto a h ) y1 ( a dove y1 ( a h 2 ..... ( 2) h . f ( a , y( a ) ) . Calcolando la soluzione in due passi di lunghezza h ) y( a ) yi a 2 E .h h) h. Integrando dal punto a in un h avremo invece 2 h. f ( a , y( a ) ) 2 y( a ) per il primo mezzo passo, e y2 ( a h. f a 2 h 2 h ) yi a h ,y a 2 h 2 h. f ( a , y( a ) ) 2 y( a ) h. f a 2 h ,y a 2 h 2 per il passo intero. In questo caso y( a h ) y2 ( a E. h) 2 h 2 3 O h ( 3) avendo effettuato due passi con errore E 2 Ei 2 ed rispettivamente, ed essendo E Ei O ( h ) per la condizione di 4 4 continuità della derivata seconda. Combinando opportunamente la (2) con la (3) possiamo eliminare l'errore al secondo ordine y( a 2 . y2 ( a h) h) y1 ( a h) 3 O h ovvero k1 h . f ( a , y( a ) ) h ,y a 2 k2 h . f a y( a h) y( a ) h 2 3 k2 O h Se confrontiamo l'espressione precedente con quella relativa al metodo di Eulero, osserviamo che è necessario valutare la funzione f due volte anzichè una per guadagnare un'unità sull'ordine di convergenza. Combinando opportunamente quattro valutazioni della funzione si ricava l'algoritmo di Runge-Kutta del 4° ordine (corretto sino al 4° ordine incluso) k1 h . f xn , yn k2 h . f xn h k3 h . f xn h k4 h . f xn h yn 1 yn 2 2 2 , yn , yn , yn k1 2 k2 2 k3 k1 k2 k3 k4 6 3 3 6 5 O h 30 è ovviamente possibile ricavare algoritmi di ordine superiore, ma in questo modo cresce anche il numero di valutazioni della funzione per passo di integrazione. In particolare proseguendo con questa procedura, ci vogliono più di k k valutazioni della funzione per ottenere l'ordine O h quando k > 4 . Per questo motivo l'algoritmo relativo al Runge Kutta del 4° ordine è in pratica il più vantaggioso e quindi anche il più diffuso nella maggior parte dei problemi scientifici. Se la lunghezza del passo di integrazione potesse crescere mantenendo invariata l'accuratezza, grazie all'aumento dell'ordine di convergenza, allora metodi di ordine superiore potrebbero risultare vantaggiosi, tuttavia al dk y( x ) , e d xk nella maggior parte dei casi questo annulla i vantaggi relativi ad un incremento di ordine. Una routine che implementa il metodo Runge Kutta del 4° ordine è la seguente crescere dell'ordine può crescere anche il coefficiente moltiplicativo dello sviluppo contenente la derivata rk ( f , x , h ) h2 0.5 . h k1 h . f x0 , x1 k2 h . f x0 h2 , x1 0.5 . k 1 k3 h . f x0 h2 , x1 0.5 . k 2 k4 h . f x0 h , x1 x0 x x1 k3 h k1 k2 k3 k4 6 3 3 6 La soluzione di un problema di Cauchy nella forma (1) non presenta a questo punto particolari problemi, sia in una che in più dimensioni. Osserviamo che l'errore commesso dipende sia dalla lunghezza del passo che, nel caso di un Runge Kutta del 4 ordine, dalla derivata quinta della funzione integranda, a priori ignota. Nel valutare la soluzione potremmo imporre che l'errore commesso in ciascun passo non cambi troppo tra un passo e l'altro, modificandone la lunghezza in funzione dell'andamento della derivata a cui esso è legato. In questo modo regioni in cui la soluzione ha un comportamento irregolare e strutturato saranno attraversate con passi piccoli mentre regioni in cui il comportamento della soluzione è regolare possono essere percorse con pochi lunghi e quindi rapidi, passi di integrazione. La ricetta con cui valutare la lunghezza del passo da utilizzare è in effetti contenuta nella descrizione del h metodo sopra riportata. Osserviamo infatti che, se effettuiamo un passo di lunghezza h e due di lunghezza , la 2 differenza tra le due stime della fuzione rappresentano una valutazione dell'errore commesso all'ordine successivo y( x h) y 1 5 ( h ) .E y( x h) y 2 2. h 2 5 6 O h 6 .E O h 6 Sottraendo delle due espressioni l'una dall'altra si ottiene, a parte termini dell'ordine O h ∆ y2 y1 1 E. 1 5 h 4 2 5 15 E .h . 16 Indichiamo con ε l'accuratezza richiesta su un generico passo di integrazione. Se imponiamo che ∆ ε otteniamo una semplice relazione che fornisce la lunghezza del passo necessaria per mantenere invariato l'errore commesso. Supponiamo di aver appena effettuato un passo di lunghezza h e di aver ottenuto un valore di ∆ ∆ 0 . Possiamo effettuare il passo successivo di una lunghezza tale da avere appunto ∆ ε 1 h nuovo h . ε ∆ 5 ( 4) 0 Nel caso in cui si abbia a che fare con un sistema di equazioni differenziali ε sarebbe un vettore contenente le accuratezze richieste su ciascun passo per ciascuna variabile, ed il passo di integrazione da utilizzare dovrebbe 31 accuratezze richieste su ciascun passo per ciascuna variabile, ed il passo di integrazione da utilizzare dovrebbe essere il più piccolo tra quelli ottenuti per ciascuna funzione incognita in base alla relazione (4). Non è ovviamente opportuno implementare l'espressione (4) cosi come è riportata. E' necessario infatti cautelarsi ad esempio nei confronti della possibilità che ∆ 0 si annulli, che porterebbe ad una divergenza nella stima del passo successivo. E' opportuno in pratica prevedere comunque un limite superiore alla lunghezza del passo di integrazione, onde evitare, attraversando una zona in cui la soluzione manifesta un comportamento regolare, di scavalcare interamente regioni in cui l'integrazione accurata si otterrebbe solo riducendo il passo di integrazione. Un'altro fattore di cui tener conto nell'implementazione della (3), è quello relativo alla precisione numerica con cui sono rappresentati i numeri sulla macchina su cui si sta integrando. Richiedere un'accuratezza superiore a quella consentita dalla rappresentazione numerica, porta l'algoritmo di stima del passo di integrazione a ridurre progressivamente il passo sino ad annullarlo, con conseguente dispendio di tempo di calcolo e senza il raggiungimento di alcuna soluzione. Questo è un errore che a seconda del problema differenziale può capitare, soprattutto lavorando in singola precisione, magari con solo tre o quattro cifre decimali di precisione a disposizione. Ecco l'implementazione numerica del metodo RungeKutta con adattamento del passo di integrazione rk1 ( f , x , h , eps ) ∆ ∞ while ∆ > eps x1 rk ( f , x , h ) x2 rk f , rk f , x , ∆ x11 Soluzione ricavata in un passo h h , 2 2 Soluzione ricavata in due passi Confronto tra le soluzioni e stima dell'errore x21 1 eps h min 0.9 . h . h 4 . h otherwise ( break) if h < 10 ∆ 5 Calcolo del passo di integrazione. E' stato if ∆ 0 inserito un fattore di sicurezza pari a 0.9 che riduce il numero di loop nel caso il passo vada ridotto sostanzialmente 4 .h 8 Controllo che il passo non sia troppo piccolo x20 x21 h rkad ( f , x , y , H , eps ) xt xt2 x y H while xt0 < x xt Itera la procedura descritta sopra sino a che non raggiunge l'ascissa richiesta H rk1 f , xt , xt2 , eps xt Possiamo provare questa procedura considerando il caso f ( x , y) Sappiamo che la soluzione di questo problema è y e eps 10 6 è data da sol H . Per H y con condizione iniziale y 1 in x 0. 2, la soluzione numerica con accuratezza rkad( f , x , y , H , eps ) . L'errore corrispondente è e sol 0 sol1 = 1.57 . 10 7 Torna all'indice generale 32