METODO DI EULERO ESPLICITO u0 dato un+1 = un + hf (tn , un ) 0 ≤ n ≤ Nh − 1 (1) Scrivere una function [tn,un]=eulero esp(odefun,tspan,y0,Nh) con INPUT: odefun: espressione della f tspan=[t0,T]: vettore di 2 componenti: istante iniziale e finale dell’intervallo y0: valore scalare: la condizione iniziale Nh: numero (intero) di passi temporali (Nh `e tale che T = tNh ). OUTPUT: tn: vettore colonna contenente gli istanti temporali da t0 a tNh . un: vettore colonna contenente la soluzione numerica negli istanti temporali tn . c Paola Gervasio - Calcolo Scientifico - 2014/15 1 N.B. esprimere f in funzione di due variabili t e y con y non dipendente da t. ES: f (t, y ) = t − y (t): diventa f=@(t,y)[t-y] N.B. Generare il vettore dei tn con il comando linspace: tn=linspace(tspan(1),tspan(2),Nh+1); Inizializzare il vettore un della stessa dimensione di tn e memorizzare nella prima componente di un il valore di y0 . Con un ciclo costruire sequenzialmente le componenti del vettore un c Paola Gervasio - Calcolo Scientifico - 2014/15 2 Esercizio 1 (esode1.m) Si consideri il problema di Cauchy ′ y = t − y t ∈ (−1, 5] y (−1) = 1. (2) Scrivere un m-file che: 1) richiami la function eulero esp.m con h = 0.001 (calcolare Nh = (T − t0)/h e prendere la parte intera (usare fix, ceil, round)); 2) rappresenti graficamente la soluzione numerica e quella esatta (fuori dalla function eulero esp.m). La soluzione esatta `e: y (t) = t − 1 + 3e −(t+1) . 3) calcoli l’errore eh = max |y (tn ) − un | n=0,...,Nh (fuori dalla function eulero esp.m) Sol. Si ottiene err=5.541e-4 c Paola Gervasio - Calcolo Scientifico - 2014/15 3 I grafici della soluzione numerica e di quella esatta sono: Zoom 4.5 sol numerica sol esatta sol numerica sol esatta 0.24 4 0.22 3.5 0.2 3 0.18 2.5 0.16 2 0.14 1.5 0.12 1 0.1 0.5 0 −1 0 1 2 3 c Paola Gervasio - Calcolo Scientifico - 2014/15 4 0.08 5 −0.5 0 0.5 1 4 Esercizio 2 (esode2.m) Scrivere un m-file che, con un ciclo su h risolva il problema di Cauchy dell’Es. 1. Si prendano questi valori di h: h = 1, .8, .5, .1, .05, .01, .005, .001. Aprire una finestra grafica e plottare la soluzione esatta. Per ogni valore di h: - richiamare la function eulero esp per calcolare [tn,un], - plottare la soluzione numerica (con un colore diverso) sulla stessa figura sui cui `e stata disegnata la soluzione esatta, - calcolare l’errore eh = max |y (tn ) − un | n=0,...,Nh e memorizzare tali errori in un vettore. Ricordare che la sol. esatta `e: y (t) = t − 1 + 3e −(t+1) . Fuori dal ciclo su h, rappresentare in scala loglog gli errori eh trovati in funzione degli h utilizzati e verificare che Eulero esplicito `e un metodo convergente del primo ordine, cio`e che l’errore eh `e proporzionale ad h(cio`e esiste C > 0 t.c. eh = C · h) quando h → 0. c Paola Gervasio - Calcolo Scientifico - 2014/15 5 Plottando su uno stesso grafico la soluzione esatta e la soluzione numerica dei problemi dell’esercizio 2 per alcuni valori di h si ha: 5 4 sol esatta h=1 h=0.8 h=0.5 h=0.1 0.6 0.4 3 0.2 0 2 −0.2 1 −0.4 −0.6 0 −0.8 −1 −1 0 1 2 3 4 5 −1 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 sol esatta h=1 h=0.8 h=0.5 h=0.1 h=0.05 h=0.01 h=0.005 0.8 1 Tanto pi` u h `e piccolo, tanto pi` u la soluzione numerica `e vicina alla soluzione esatta (CONVERGENZA). Per h → 0, maxn |un − y (tn )| → 0. c Paola Gervasio - Calcolo Scientifico - 2014/15 6 L’errore in funzione di h `e: 1 10 Errore Eulero h 0 10 −1 errore 10 −2 10 −3 10 −4 10 −3 10 c Paola Gervasio - Calcolo Scientifico - 2014/15 −2 −1 10 10 0 10 h 7 METODO DI EULERO IMPLICITO u0 dato un+1 = un + hf (tn+1 , un+1 ), 0 ≤ n ≤ Nh − 1 (3) [tn,un]=eulero_imp(odefun,tspan,y0,Nh) INPUT: odefun: espressione della f tspan=[t0,T]: vettore con istante iniziale e finale dell’intervallo y0: valore scalare: la condizione iniziale Nh: numero intero di passi temporali (Nh `e tale che T = tNh ). OUTPUT: tn: vettore colonna contenente gli istanti temporali da t0 a tNh . un: vettore colonna contenente la soluzione numerica negli istanti temporali tn . c Paola Gervasio - Calcolo Scientifico - 2014/15 8 Ad ogni passo tn dobbiamo risolvere l’equazione non lineare con incognita un+1 : un+1 = un +hf (tn+1 , un+1 ) ⇔ F (un+1 ) = un+1 −un +hf (tn+1 , un+1 ) = 0 Attenzione: la funzione F cambia ad ogni passo tn perch`e dipende da un e da tn+1 . L’equazione non lineare F (un+1 ) = 0 pu`o essere risolta con secanti. Per semplicit`a poniamo w = un+1 . Secanti per risolvere F (w ) = 0 `e: w (0) , w (1) dati F (w (k) ) − F (w (k−1) ) w (k+1) = w (k) − w (k) − w (k−1) k≥1 Utilizziamo la function secant (www.ing.unibs.it/gervasio/CS/matlab) [zero,res,niter]=secant(fun,w0,w1,tol,nmax) c Paola Gervasio - Calcolo Scientifico - 2014/15 9 Cosa prendiamo come w0 e w1? Al primo passo temporale poniamo w (1) = u0 e w (0) = u0 + h. Per i successivi passi temporali poniamo w (1) = un e w (0) = un−1 . n=1 F=@(w)w-un(n)-h*odefun(tn(n+1),w); un(n+1)=secant(F,un(n)+h,un(n),tol,nmax); for n=2:Nh F=@(w)w-un(n)-h*odefun(tn(n+1),w); un(n+1)=secant(F,un(n-1),un(n),tol,nmax); end Esercizio 3. Ripetere lo stesso lavoro svolto nell’esercizio 2 per testare la correttezza della function eulero imp.m. Si riesce a dimostrare che il metodo di Eulero implicito ha ordine di convergenza 1. Verificare numericamente questo risultato teorico. c Paola Gervasio - Calcolo Scientifico - 2014/15 10
© Copyright 2024 Paperzz