Quarta relazione Si risolverà il problema prima con il metodo di Eulero esplicito e poi con il metodo di Crank-Nicolson. Per ogni algoritmo si ha xn=x0+h*n 1)Risoluzione con Eulero esplicito Si osserva che tale metodo non è incondizionatamente stabile, quindi bisogna operare una scelta opportuna del passo h. Si verifica che il passo soddisfi la seguente relazione con λ≅-d(f(x,y))/d(y)=12. Infatti ???? per h=0.1 si ha h*λ=1.2<2,quindi è probabile che il passo scelto consenta all’algoritmo di lavorare in una zona numericamente stabile. Va ricordato però che la relazione è stimata quindi non si ha la certezza assoluta della stabilità numerica del metodo con passo h=0.1. Grafico i risultati ottenuti confrontandoli con i risultati di del comando ode45 di matlab Nel grafico sono evidenziati con dei pallini rossi i dieci valori trovati dal metodo di Eulero esplicito. Di che ordine è il metodo?? Qual’è l’errore previsto dalla teoria ???? La scala adottata per x(t) non consente di stimare l’errore tra la funzione calcolata dal comando matlab ode45 e dal metodo di eulero. Si esegue lo zoom nel punto in cui le due funzioni si discostano maggiormente Si osserva che l’errore quale???? si mantiene limitato perché ci troviamo relativamente vicini al punto iniziale dell’algoritmo inoltre l’errore globale ,nell’intervallo [0 1], si mantiene proporzionale al passo h=0.1, in accordo con quanto fornito dalla teoria. E lo vedi a occhio??? Per verificare che il passo scelto sia sufficiente a rendere numericamente stabile l’algoritmo si è calcolato il valore della funzione con passo (h/2) e si è graficato l’andamento della stima dell’errore . Ma nel grafico è detto che sono le curve soluzione Essendo l’errore del metodo di Eulero esplicito proporzionale ad h. la frase resta sospesa!! Si è ottenuto il seguente grafico Si nota come l’errore aumenta linearmente, come era prevedibile dallo scostamento progressivo dei valori ottenuti con il metodo di eulero esplicito e dei corrispondenti valori calcolati con il comando ode45. Ma questo comportamento no è segno di instabilità numerica. Si tratta del comportamento di un metodo di ordine 1!!! Scelgo di risolvere l’equazione con il metodo di Crank-Nicholson che garantisce stabilità numerica per ogni valore del passo h. 2)Risoluzione con Crank-Nicolson Grafico la funzione trovata con Crank-Nicolson Dal grafico si nota subito che la funzione ottenuta con il metodo di Crank-Nicholson si discosta di meno da quella ottenuta con il comando ODE45, rispetto OVVIO dato che ode 45 usa un metodo di ordine 4 o 5 !!!!! Viene ora graficato in italiano si dice : segue il grafio dell’errore.... il l’andamento dell’errore ottenuto con una prima estrapolazione di Richardson della funzione calcolata con passo h e h/2. Essendo l’errore dell’algortimo di Crank-Nicolson proporzionale ad h^2 si ottiene la seguente stima dell’errore Come era prevedibile dalla teoria il metodo di Crank-Nicolson è stabile e quindi consente di mantenere l’errore limitato indipendentemente dal passo h scelto o dal numero di punti in cui viene calcolato il valore di x(t). Come prova si graficano l’andamento della funzione e l’andamento dell’errore per h=0.4 (molto grande!!!) e si aumenta l’intervallo di osservazione di x(t) per consentire di verificare il comportamento dell’algoritmo su 10 punti (potevi anche dimezzarl !!!) Dal grafico si può notare come l’errore si mantenga stabile indipendentemente dal passo h scelto. Veramente questo grafico mostra l’andamento dell’errore per h=4!!!!! Si potrebbe utilizzare l’errore per calcolare una migliore approssimazione della funzione usando l’estrapolazione di Richardson Esercizio 2 Trasformo l’equazione differenziale del secondo ordine in un sistema di equazioni differenziali operando la sostituzione z1=y(x) Risolvo con il metodo di Runge-Kutta del quarto ordine con passo h=0.1 e grafico i risultati ottenuti confrontandoli con i risultati trovati con il comando matlab ODE45 Grafico l’andamento dell’errore con il metodo di Runge-Kutta. Essendo l’errore globale del metodo di Runge-Kutta proporzionale a h^4 si ha la seguente formula per la stima dell’errore Dal grafico si nota come l’errore si stabilizzi. Questo significa che il passo h scelto consente all’algoritmo di Runge-Kutta di lavorare nella regione di stabilità. Inoltre l’errore risulta proporzionale a 10^(-6), dalla teoria si conosce che l’errore globale nel metodo di Runge-Kutta è proporzionale a h^(4) che nel nostro caso vale 10^(-4) quindi l’andamento dell’errore è migliore di due ordini di grandezza rispetto all’andamento previsto. Si studia il problema con il metodo di Heun con passo h=0.1 e si ottiene Grafico l’andamento dell’errore per stabilire se il passo scelto è sufficiente a far lavorare l’algoritmo nella regione di stabilità Nell’intervallo [0 4] l’errore si mantiene proporzionale a h^2 ma il passo h scelto non consente all’algortimo di essere numericamente stabile. Infatti l’errore tende a crescere al crescere di x. Questo non è detto. Heun è di ordine 2 , l’errore potreebbe crescere ma restare inferiore ad 0.01 A riprova dell’andamento dell’errore si esegue lo zoom del grafico della funzione vicino a x=3.5 Si nota anche dal grafico come l’errore nell’intervallo [0 1] si mantenga proporzionale ad h^4. Terzo esercizio: Risolviamo il sistema con il metodo di Runge-Kutta del quarto ordine con passo h=0.1. Otteniamo il seguente grafico Grafichiamo l’andamento della funzione trovata con il comando ode45 e otteniamo Sembra che i due grafici si riferiscano a funzioni diverse mentre in realtà dovrebbero ,a meno di un errore proporzionale a h^4, coincidere. L’equazione proposta da esercizio è di tipo Stiff e quindi il passo scelto potrebbe essere troppo grande e portare fuori dalla regione di stabilità l’algoritmo. Scegliamo h in modo che sia verificata la disequazione 0<50*h<2.78. In fatti per h=0.1 la disuguaglianza non è soddisfatta mentre per h=0.01 lo è. Scegliamo h=0.01 e otteniamo: Il risultato è in linea con quanto fornito dall’algoritmo ode 45. Poiché la funzione non è lineare scegliamo di risolverla con un metodo predittorecorrettore dove il predittore è il metodo di eulero esplicito e il correttore è il metodo di Crank-Nicolson. Questo è un poredittore correttore di bassa accuratezza. Lo abbiamo stiìudiato per ragioni didattiche. Quello che si usa è un Adams-Bashforth (il preditore) con il metodo di Adams-Moulton (il corretore). Impostiamo un passo h di 0.01 e otteniamo: didascalie carenti Che corrisponde all’andamento della funzione ode45 di matlab. Grafico l’andamento dell’errore Dal grafico si vede che l’errore si stabilizza ad un livello molto basso. Tale valore non è circa 10^-7 come si può vedere dal seguente grafico