Prof. L. Brandolini Dott.ssa N. Franchina Corso di Calcolo Numerico Laboratorio 5 Equazioni differenziali ordinarie: metodi espliciti 23 Novembre 2016 Esercizi di implementazione Un’equazione differenziale ordinaria è un’equazione che contiene derivate rispetto ad un’unica variabile indipendente. Nel seguito ci limiteremo a considerare equazioni differenziali del primo ordine, in particolare vengono considerati i cosiddetti problemi di Cauchy, ossia i problemi definiti come di seguito: trovare y : I → R tale che ′ y (t) = f (t, y(t)) y(t0 ) = y 0 , ∀t ∈ I (1) ′ dove I ⊂ R, f è una funzione assegnata e y = dy/dt. Inoltre t0 è il punto in cui viene prescritta la condizione iniziale y 0 , ovvero quel dato che consente di individuare una soluzione tra le infinite soluzioni ammissibili dal problema (1). Dato il passo di discretizzazione ∆t, il metodo di Eulero in avanti consente di calcolare una soluzione approssimata del problema di Cauchy nel seguente modo: un+1 = un + ∆t f (tn , un ), n = 0, . . . , N − 1. (2) ′ Tale schema è ottenuto mediante l’applicazione della formula di Eulero in avanti a y (t) in ogni nodo tn , n = 1, . . . , N . 1. Si implementi il metodo di Eulero in avanti per la risoluzione del seguente problema modello ′ y (t) = λy(t), y(t0 ) = 1. t ∈ (0, Tf ) (3) I metodi multipasso consentono di ottenere un ordine di accuratezza superiore utilizzando i valori un , un−1 , . . . , un−p nel calcolo di un+1 . 2. Si implementi il metodo a due passi di Adams-Bashforth (AB1) per la risoluzione del problema modello (3), ∆t un+1 = un + 3f (tn , un ) − f (tn−1 , un−1 ) , n = 1, . . . , N − 1. (4) 2 1 Soluzione 1. Si riporta nel file EA.m l’implementazione del metodo di Eulero in avanti per la risoluzione del problema modello (3) con λ ∈ R− , la cui soluzione esatta è y(t) = eλt . Applicando lo schema di Eulero in avanti a questo problema si ottiene un+1 = un + ∆t λ un . I parametri di ingresso della function EA sono: l’istante iniziale t0 e quello finale tf, la condizione iniziale u0, il passo di discretizzazione Deltat e il coefficiente lambda. 2. Per quanto riguarda il metodo AB1 si osserva che in tale schema la soluzione approssimata un+1 dipende dalla soluzione approssimata calcolata nei due passi precedenti. Questo richiede che al passo temporale t1 siano noti i valori della soluzione nei due istanti precedenti. Essendo noto solo il dato u0 si utilizza il metodo di Eulero in avanti per il calcolo di u1 . Si riporta nel file AB1.m l’implementazione del metodo di Adams-Bashforth per la risoluzione del problema modello (3), ovvero un+1 = un + ∆t λ 3un − un−1 . 2 I parametri di input della function AB1 coincidono con quelli della function EA. Esercizi Si consideri la seguente equazione differenziale: ′ y (t) = −2y(t) t ∈ (0, Tf ] y(t0 ) = 1. (5) 1. Risolvere il problema proposto mediante il metodo di Eulero in avanti implementato. Valutare l’assoluta stabilità della soluzione numerica ottenuta utilizzando ∆t = 0.05, Tf = 10 mediante confronto con la soluzione esatta. Si esegua la stessa verifica per un passo di discretizzazione ∆t = 1.2, con Tf = 10. 2. Si risolva il problema proposto nell’ Esercizio 1 mediante il metodo AB1 utilizzando i medesimi valori di ∆t usati con il metodo di Eulero in avanti. Confrontare la soluzione calcolata con quella ottenuta nell’Esercizio 1. 3. Calcolare sperimentalmente l’ordine di accuratezza del metodo di Eulero in avanti e di Adams-Bashforth1. Soluzione 1. Si riportano nel file Lab5es1.m le istruzioni Matlab necessarie per la risoluzione del problema modello assegnato (λ = −2) nell’ intervallo I = (0, 10] con ∆t = 0.05 e nell’intervallo I = (0, 10] con ∆t = 1.2. 2 1 15 0.9 10 0.8 0.7 5 0.6 0.5 0 0.4 −5 0.3 0.2 −10 0.1 0 0 2 4 6 8 −15 10 0 (a) ∆t = 0.05, Tf = 10 2 4 6 8 10 (b) ∆t = 1.2, Tf = 10 Figura 1: Es1: soluzione numerica un calcolata con il metodo di Eulero in avanti (linea continua), soluzione esatta u (linea tratteggiata). In Figura (1), in alto, si riporta il confronto tra la soluzione esatta e quella numerica calcolata per ∆t = 0.05, e in basso quella ottenuta con ∆t = 1.2. Si osserva che la soluzione calcolata con ∆t = 1.2 non è assolutamente stabile. Tale valore di ∆t viola infatti la condizione di stabilità dello schema, cioè ∆t < 2/|λ|. (6) 2. Si riporta nel file Lab5es2.m la risoluzione del problema modello mediante il metodo di Adams-Bashforth1 per ∆t = 0.05 e Tf = 10 e per ∆t = 1.2 e Tf = 10. I risultati ottenuti, rappresentati in Figura(2), mettono in evidenza che la soluzione calcolata con ∆t = 1.2 non è assolutamente stabile. Infatti anche il metodo AB1 è solo condizionatamente assolutamente stabile. 3. Si dimostra che il metodo di Eulero in avanti ha ordine di convergenza pari a 1, i.e. |un − y(tn )| = O(∆t), mentre il metodo di Adams-Bashforth1 ha ordine di convergenza pari a 2, i.e. |un − y(tn )| = O(∆t)2 . Per verificare numericamente tale risultato si considera la risoluzione del problema modello per valori di ∆t successivamente dimezzati e si valuta la riduzione dell’errore come di seguito E1 (∆t) = O (∆tp ) , p ∆t ∆t =O , E2 2 2 E1 ≈ 2p , E2 (7) per cui l’ordine di convergenza del metodo è p ≈ log2 (E1 /E2 ). Si riporta nel file Lab5esStimaOrdine.m una possibile implementazione per il calcolo dell’ordine di accuratezza di Eulero in avanti e di Adams -Bashforth1 applicati al 3 problema modello (5). Lo script definisce i dati del problema e le grandezze di input richieste dalle functions EA e AB1. Si pone M come numero di dimezzamenti successivi del passo di integrazione Deltat che si vogliono utilizzare per stimare l’ordine p. Per quanto riguarda la stima dell’ordine di convergenza del metodo di Eulero in avanti, usando M = 10 dimezzamenti successivi di ∆t (con ∆t iniziale pari a 0.05) si ottiene: 1.0314 1.0154 1.0076 1.0038 p= 1.0019 , 1.0009 1.0005 1.0002 1.0001 si osserva quindi che il metodo di Eulero risulta accurato al primo ordine come previsto. La verifica sperimentale dell’ordine di convergenza del metodo AB1 viene svolta uti- 1 3500 0.9 3000 0.8 2500 0.7 2000 0.6 1500 0.5 1000 0.4 500 0.3 0 0.2 −500 0.1 −1000 0 0 1 2 3 4 5 6 7 8 9 −1500 10 (a) ∆t = 0.05, Tf = 10 0 1 2 3 4 5 6 7 8 9 10 (b) ∆t = 1.2, Tf = 10 Figura 2: Es2: soluzione numerica calcolata con il metodo di Adams-Bashforth1 un (linea continua), soluzione esatta u (linea tratteggiata). 4 lizzando gli stessi parametri, lo stesso valore iniziale di ∆t, e M = 10. Si ottiene 1.9763 1.9881 1.9940 1.9970 p= 1.9985 , 1.9992 1.9996 1.9998 1.9999 ovvero un’accuratezza pari al secondo ordine come previsto dalla teoria. 5