Quarta relazione Si risolverà il problema prima con il metodo di

annuncio pubblicitario
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
Scarica