Carla Guerrini 1 Approssimazione delle Derivate Consideriamo una funzione f : [a, b] → R derivabile con continuità in [a, b] fino ad un ordine p, con p ≥ 2. Vogliamo approssimarne la derivata prima in un generico punto x di [a, b]. Dalla definizione di f 0 si può ritenere, per h sufficientemente piccolo e positivo, la quantità (δ+ f )(x) = f (x + h) − f (x) h rappresenti una approssimazione di f 0 (x). L’errore che si commette può essere ricavato dallo sviluppo in serie di Taylor di f , col resto nella forma di Lagrange, in un intorno destro di x di ampiezza h > 0 : f (x + h) = f (x) + hf 0 (x) + h2 f ”(ξ) 2 ove ξ è un punto opportuno in [x, x + h]. Quindi h (δ+ f )(x) = f 0 (x) + f ”(ξ) 2 e quindi (δ+ f )(x) approssima f 0 (x) a meno di un errore che tende a 0 come h, cioè è accurato al primo ordine. L’approssimazione ottenuta è detta formula alle differenze finite in avanti. In maniera del tutto analoga dal seguente sviluppo f (x − h) = f (x) − hf 0 (x) + h2 f ”(η) 2 con η ∈ [(x − h, x], possiamo ottenere la seguente formula alle differenze finite all’indietro . f (x) − f (x − h) h sempre accurata di primo ordine. Se la funzione é piú regolare, si puó fare di meglio, sviluppiamo in serie di Taylor al secondo ordine sia in avanti che all’indietro (δ− f )[x) = f (x + h) = f (x) + hf 0 (x) + h2 h3 f ”(x) + f 000 (ξ) 2 3! h2 h3 f ”(x) − f 000 (η) 2 3! ove ξ ∈ [x, x + h] e η ∈ [x − h, x]. Se facciamo la differenza fra la prima e la seconda equazione otteniamo la cosı́ detta differenza finita centrata f (x − h) = f (x) − hf 0 (x) + (δf )(x) = f (x + h) − f (x − h) 2h che è accurata di ordine 2 rispetto ad h in quanto h2 000 f (x) − (δf )(x) = [f (ξ) + f 000 (η)] 12 0 10/05/2011 2 dove ξ e η sono due punti opportuni appartenenti agli intervalli (x − h, x) e (x, x + h) rispettivamente. Tale formula fornisce il coefficiente angolare della retta passante per i punti (x − h, f (x − h)) e (x + h, f (x + h). (7−4 x)/(x2+1) 8 7 6 5 4 3 2 1 0 x−h −1 −2 −1.5 −1 −0.5 x x+h 0 x 0.5 1 1.5 2 Esempio Sia f (x) la funzione costo di un dato prodotto x, cioé f (x) indica il costo sostenuto per produrre x. Quando la quantità prodotta subisce una variazione (per es. un incremento) h passando da x0 a x0 +h il costo subisce una variazione f (x0 + h) − f (x0 ), questa variazione di costo é rapportata alla variazione di produzione che l’ha provocata, il rapporto: ∆f f (x0 + h) − f (x0 ) = h h esprime il tasso medio di variazione dei costi relativamente al variare della produzione. Se la variazione di produzione tende a zero considerando il limite della precedente espressione, (se esiste) coincide con f 0 (x0 ), rappresenta il costo marginale in x0 . Certi economisti dicono che il costo marginale é il costo dell’ultima unità prodotta. Ma il costo dell’ultima unità prodotta è chiarmente dato da f (x0 ) − f (x0 − 1) che solo molto grossolanamente assomiglia a f 0 (x0 ). Se una funzione di costo f1 ha in x0 un costo marginale maggiore rispetto ad un’altra funzione di costo f2 significa che f1 è più sensibile ai cambiamenti di produzione, basta di poco aumentare la produzione che si ha un’impennata dei prezzi (o costi). Se invece f (x) indica il profitto o guadagno, gli stessi discorsi portano al cosı́ detto profitto marginale in x0 . Il significato geometrico è ben noto: la derivata in x0 è il coefficiente angolare della retta tangente alla curva (x0 , f (x0 ). 10/05/2011 3 Esercizio A particolari istanti temporali t è stata misurata la quota q(t) raggiunta da un fluido all’interno di un imbuto conico retto che presenta un foro circolare sul fondo di raggio r = 10cm, ottenendo i seguenti valori: t 0.0 5 10 q(t) 1.0 0.8811 0.7366 15 20 0.5430 0.1698 Sapendo che all’istante iniziale il fluido raggiunge la quota di 1m, si vuole ottenere una stima della velocità di svuotamento q 0 (t) dell’imbuto da confrontare con quella attesa per via teorica data da q q 0 (t) = −0.6πr2 19.6q(t)/A(t) essendo r il raggio del foro ed A(t) l’area della sezione orizzontale del cono determinata dal fluido quando si trova a livello q(t). Risolvendo questo problema utilizzando le differenze in avanti, all’indietro e centrate per approssimare q 0 (t) otteniamo t 0.0 5 10 15 20 q’(t) -0.0220 -0.0259 -0.0326 -0.0473 -0.1504 δ+q -0.0238 -0.0289 -0.0387 -0.0746 – δ− q – -0.0238 -0.0289 -0.0387 -0.0746 δq – -0.0263 -0.0338 -0.0567 – Come si vede l’accordo fra la derivata esatta e quella calcolata sulla base delle misure è più soddisfacente quando si usano le differenze centrate. Esempio: Un semplice problema differenziale Nelle equazioni differenziali l’incognita non é un numero o un vettore, ma una o piú funzioni di cui si conoscono relazioni che legano la funzione stessa a un certo numero di derivate successive. Consideriamo per ora il discorso a livello intuitivo e consideriamo il seguente problema ai limiti: −u”(x) = f (x), u(0) = α, 0≤x≤1 u(1) = β. Supponiamo che le funzioni coinvolte siano regolari, per esempio si richiede che la funzione f sia continua, mentre la funzione u sia derivabile due volte con derivata seconda continua. Il modello appena scritto richiede di trovare una funzione u : [0, 1] → R la cui derivata seconda sia uguale ad una assegnata funzione f . Inoltre si richiede che la funzione u(x) assuma in x = 0 il 10/05/2011 4 valore α e in x = 1 il valore β. Vogliamo trasformare il problema in un problema di dimensione finita, (per come é posto il problema non ha dimensione finita, perché devo scovare una intera funzione) per cui si vuole discretizzare il modello. Introduciamo una suddivisione dell’intervallo [0, 1] con n + 2 punti equidistanti, l’ampiezza di ogni sottointervallo sará indicata con h: 0 = x0 < x1 = h < x2 = 2h < . . . < xi = ih < . . . < xn+1 = 1 1 dove ovviamente h = n+1 . Indichiamo con ui , i = 0, . . . , n + 1 i valori approssimati della funzione u(xi ) nei punti della suddivisione. Che relazioni ci sono tra tali valori? Utilizziamo l’equazione che lega u” alla funzione f (x). Approssimiamo la derivata della funzione u(x) con un opportuno rapporto incrementale. Abbiamo svariate scelte, per esempio, se x é uguale a xi con i = 1, . . . , n (punti interni all’intervallo), u(x + h) − u(x) , h u(x) − u(x − h) , h u(x + h) − u(x − h) . 2h L’ultima approssimazione a causa della sua simmetria é la piú accurata. Per la derivata seconda possiamo scegliere la seguente approssimazione che fa intervenire solo i punti x, x − h, e x + h ed é simmetrica u”(x) ' u(x + h) − 2u(x) + u(x − h) h2 Il rapporto incrementale approssima la derivata seconda a meno di un certo errore. Nel limite h → 0 si ottiene la derivata seconda, ma noi ci fermiamo per un h fissato. Possiamo sostituire al posto dei valori u(x), u(x ± h) i valori approssimati ui che soddisferanno −ui+1 + 2ui − ui−1 = f (xi ), h2 f or i = 1, . . . , n Moltiplicando le equazioni scritte per h2 si ottiene infine il sistema lineare −ui+1 + 2ui − ui−1 = h2 f (xi ), i = 1, . . . , n. Per il caso i = 1 si ha inoltre che ui−1 = u0 = α per cui la prima equazione (prima riga del sistema) si puó scrivere come −u2 + 2u1 = h2 f (x1 ) + α, e analogamente l’ultima equazione si scriverá (essendo un+1 = β) 2un − un−1 = h2 f (xn ) + β. 10/05/2011 5 Per esempio nel caso in cui n = 5, α = 0, 2 −1 0 0 0 −1 2 −1 0 0 0 −1 2 −1 0 0 0 −1 2 −1 0 0 0 −1 2 u1 u2 u3 u4 u5 β = 0 si ottiene il sistema = h2 f (h) f (2h) f (3h) f (4h) f (5h) , dove h = 1/6. in generale si ottiene un sistema lineare n × n con matrice A a banda e con elementi aij nulli se |i − j| > 1 , matrici di questo tipo sono tridiagonali. L’ampiezza della banda é uguale a 1, la matrice A é inoltre simmetrica. In MatLab la matrice del sistema per questo semplice problema puó essere ottenuta tramite un’unica istruzione. Se n = 5 la matrice precedente si genera con A = diag(2 ∗ ones(n, 1)) − diag(ones(n − 1, 1), 1) − diag(ones(n − 1, 1), −1); 10/05/2011 6 Schemi alle differenze finite per funzioni in due variabili Nel caso in cui la funzione dipenda da due variabili, i concetti esposti precedentemente vanno estesi al caso di derivate parziali. Per semplicitá si consideri di forma rettangolare lo spazio in cui si vuole studiare la funzione. Possiamo immaginare che la funzione f sia la distribuzione della temperatura in un ambiente. Nel piano un punto é individuato da una coppia di indici (i, j), i = 1, . . . , N ; j = 1, . . . , M e che i nodi siano distribuiti in modo uniforme (vedi la figura sottostante i nodi che hanno lo stesso indice i hanno il medesimo valore della coordinata x). In pratica si tratta di utilizzare le stesse formule scritte in precedenza, facendo variare solo l’indice relativo alla variabile rispetto alla quale si deve effettuare la derivata mantenendo fisso l’altro. 7 j 1 −−−−−−−−−−−−−−−−−−> M 6 5 4 3 2 1 0 0 2 4 6 i 1 −−−−−−−−−−−−−−−−−−> N 8 10 Utilizzando la funzione in due variabili g(i, j) e facendo variare solo l’indice relativo alla variabile rispetto alla quale si vuole differenziare, mantenedo fisso l’altro δg g(i + 1, j) − g(i − 1, j) (i, j) = δx 2∆x rappresenta la derivata parziale rispetto a x valutata nel nodo (i, j) in modo simile g(i, j + 1) − g(i, j − 1) δg (i, j) = δy 2∆y g(i + 1, j) − 2g(i, j) + g(i − 1, j) δ2g (i, j) = e 2 δx ∆x2 δ2g g(i, j + 1) − 2g(i, j) + g(i, j − 1) (i, j) = , δy 2 ∆y 2 rappresentano rispettivamente la derivata parziale rispetto a y nel nodo (i, j) e le derivate seconde. 10/05/2011 7 Equazione di Laplace e soluzione numerica Molti problemi sono descritti da una equazione differenziale del tipo δ2f δ2f + =b δx2 δy 2 nota come equazione di Poisson. In questa equazione f (x, y) rappresenta la distribuzione di una qualche variabile fisica (per esempio la temperatura) mentre b(x, y) rappresenta la sorgente (per esempio l’intensitá di una fonte di calore). In molti problemi il termine sorgente é nullo in tutto il dominio e l’equazione assume la forma δ2f δ2f + =0 δx2 δy 2 nota come equazione di Laplace (questa equazione é stata impiegata nella teoria del Rischio, nello studio della probabilitá del fallimento di una compagnia di assicurazione oltre che in numerosi problemi di fisica e ingegneria). Per la soluzione delle equazioni di Poisson o Laplace é necessario assegnare le condizioni al contorno. Nei problemi di fisica queste condizioni possono essere di due tipi: in alcuni casi viene assegnata la medesima variabile f , mentre in altri viene assegnata la sua derivata normale. Il primo caso viene indicato come condizioni di Dirichlet (caso in cui, per esempio, si conosce la temperatura su tutto il contorno), nel secondo condizioni di Neumann (caso in cui la sorgente di calore é posizionata sul contorno). Come esempio viene presentata la soluzione numerica dell’equazione di Laplace in un dominio rettangolare con condizioni di Dirichlet assegnata al contorno. Si consideri la lastra piana rettangolare di lati Lx = 5 e Ly = 4, i lati vengono discretizzati rispettivamente con n = 5, e m = 4, di conseguenza ∆x = Lnx = ∆y = Lmy = 1, l’intera lastra é quindi suddivisa in (n + 1) × (m + 1) nodi, ognuno dei quali individuano una coppia (i, j) con i = 0, . . . , n, e j = 0, . . . , m. Poiché la funzione é nota sul bordo saranno note le quantitá f (0, j), f (5, j), j = 0, . . . 4 e f (i, 0), f (i, 4), i = 1, . . . , 5 sono date. Utilizzando le differenze del secondo ordine scritte precedentemente e ricordando che ∆x = ∆y = 1 le espressioni delle derivate seconde si semplificano ulteriormente per cui: δ2f = f (i+1, j)−2f (i, j)+f (i−1, j); δx2 δ2f = f (i, j +1)−2f (i, j)+f (i, j −1). δy 2 Sostituendo queste due espressioni nell’equazione di Laplace in corrispondenza del nodo (i, j) si ottiene f (i, j − 1) + f (i − 1, j) − 4f (i, j) + f (i + 1, j) + f (i, j + 1) = 0 Questa equazione va scritta per i = 1, . . . , 4 e j = 1, . . . , 3 tenendo conto che i valori di f nei nodi al contorno sono noti, quindi per il nodo (1, 1) avremo −4f (1, 1) + f (2, 1) + f (1, 2) = −f (1, 0) − f (0, 1) per il nodo (2, 1) in modo simile si ha f (1, 1) − 4f (2, 1) + f (3, 1) + f (2, 2) = −f (2, 0) 10/05/2011 8 nei nodi con entrambi gli indici superiori a 1 e inferiori a n − 1 e m − 1 rispettivamente nessuno dei termini che compare nella somma é di bordo e quindi tutti i contributi sono incogniti, per esempio nel nodo (3, 2) la differenza prende la seguente forma: f (3, 1) + f (2, 2) − 4f (3, 2) + f (4, 2) + f (3, 3) = 0 raccoglendo tutte le equazioni si ottiene un sistema lineare del tipo Ax = b ove a= −4 1 0 0 1 0 0 0 0 0 0 0 1 −4 1 0 0 1 0 0 0 0 0 0 0 1 −4 1 0 0 1 0 0 0 0 0 0 0 1 −4 1 0 0 1 0 0 0 0 1 0 0 1 −4 1 0 0 1 0 0 0 b= 0 1 0 0 1 −4 1 0 0 1 0 0 0 0 1 0 0 1 −4 1 0 0 1 0 0 0 0 1 0 0 1 −4 1 0 0 1 0 0 0 0 1 0 0 1 −4 1 0 0 −f (1, 0) − f (0, 1) −f (2, 0) f − (3, 0) −f (4, 0) − f (5, 1) −f (0, 2) 0 0 −f (5, 2) −f (0, 3) − f (1, 4) −f (2, 4) −f (3, 4) −f (4, 4) − f (5, 4) 0 0 0 0 0 1 0 0 1 −4 1 0 0 0 0 0 0 0 1 0 0 1 −4 1 0 0 0 0 0 0 0 1 0 0 1 −4 ; x= f (1, 1) f (2, 1) f (3, 1) f (4, 1) f (1, 2) f (2, 2) f (3, 2) f (4, 2) f (1, 3) f (2, 3) f (3, 3) f (4, 3) La struttura della matrice risulta essere pentadiagonale e decisamente sparsa, a diagonale dominante questo consente di utilizzare procedimenti iterativi indispensabili per la soluzione di problemi con un numero elevato di incognite. , 10/05/2011 9 Equazioni differenziali ordinarie Una equazione differenziale é una equazione che coinvolge una o piú derivate di una funzione incognita. Se sono tutte derivate ordinarie l’equazione si dice Equazione Differenziale Ordinaria (ODE), se ci sono anche delle derivate parziali l’equazione si dice alle Derivate Parziali (PDE). Si dice che é una equazione differenziale ordinaria di ordine p se p é l’ordine massimo delle derivate che vi compaiono. In generale posti y(t) = y1 (t) y2 (t) .. . ; f (t, y(t)) = e f1 (t, y1 (t), . . . , yn (t)) f2 (t, y1 (t), . . . , yn (t)) .. . , fn (t, y1 (t), . . . , yn (t)) yn (t) si chiama sistema di equazioni differenziali del primo ordine un sistema di equazioni della forma y 0 (t) = f (t, y(t)) (1) ove le funzioni f1 , f2 , . . . , fn sono assegnate. Una insieme ordinato di funzioni y1 (t), . . . , yn (t) definite in un intervallo [t0 , t1 ] e in esso differenziabile che soddisfano in t la relazione yi0 (t) = fi (t, y1 (t), . . . , yn (t)), per i = 1, . . . , n si dice soluzione del sistema (1). Una equazione differenziale ordinaria di ordine n é una relazione della forma F (t, y(t), y 0 (t), y (2) (t), . . . , y (n) (t)) = 0 (2) essa lega la variabile t, una funzione y(t) incognita e le sue derivate y 0 (t), . . . , y (n) (t). Si dice soluzione dell’equazione differenziale una funzione y(t) continua e derivabile che soddisfa identicamente la relazione (2). Se é possibile esplicitare la y (n) (t) allora l’equazione precedente puó essere scritta in forma normale (3) y (n) (t) = ϕ(t, y(t), y 0 (t), y (2) (t), . . . , y (n−1) (t)). Ogni equazione differenziale ordinaria di ordine n > 1 esprimibile in forma normale puó essere ridotta ad un sistema di n equazioni del primo rodine y1 (t) y2 (t) .. . = y(t) = y 0 (t) yn (t) = y (n−1) (t) Se le funzioni y1 (t), y2 (t), . . . , yn (t) soddisfano il sistema 0 y1 (t) y 0 (t) 2 = y2 (t) = y3 (t) .. . 0 yn (t) = ϕ(t, y1 (t), . . . , yn (t)) 10/05/2011 10 risolvere l’equazione (3) equivale a risolvere il sistema. Una equazione si dice lineare se vale a0 (t)y (n) (t) + a1 (t)y (n−1) (t) + . . . + an (t)y(t) = b(t). Se ai (t) = ai l’equazione si dice lineare a coefficienti costanti. In generale, un sistema di equazioni differenziali del primo ordine ha infinite soluzioni. Geometricamente l’insieme delle soluzioni forma un insieme di curve dello spazio Rn+1 dette curve integrali del sistema. L’insieme delle curve integrali si dice anche campo direzionale associato al sistema e permette di controllare visivamente l’andamento delle soluzioni. Per ogni punto (t∗ , y ∗ ) passa una curva integrale che in (t∗ , y ∗ ) é tangente alla direzione f (t∗ , y ∗ ). É possibile associare ad ogni punto un vettore con la direzione della tangente alla curva integrale che passa per il punto y 0 (t∗ ) = f (t∗ , y ∗ (t∗ )). Per individuare una sola soluzione tra le infinite soluzioni del sistema differenziale si aggiunge una condizione, che consiste nell’imporre che la soluzione assuma in un punto un determinato valore. Problemi di questo tipo descrivono il moto di un sistema dinamico nel tempo (esempio y 0 (t) é la velocitá se y(t) é lo spazio). campo direzionale per eq.differenz. y"=exp(−2t)−2y 2 1.5 1 0.5 0 −0.5 −1 −2 −1 0 1 2 3 Esempio: Problema Consideriamo una popolazione di batteri posta in un ambiente limitato nel quale non possono convivere piú di B batteri. Supponiamo che inizialmente la popolazione abbia un numero di individui pari a y0 ¿ B e che il fattore di crescita dei batteri sia pari a una costante C. In questo caso il cambiamento della popolazione di batteri nel tempo sará proporzionale al numero di batteri preesistenti, modulato dal fatto che piú di B batteri non possono convivere contemporaneamente. Questo fenomeno é esprimibile dall’equazione differenziale y dy = Cy(1 − ), dt B ove y = y(t) indica il numero di batteri al tempo t. La sua risoluzione consente di stabilire l’evoluzione della popolazione batterica. 10/05/2011 11 Questa ammette come soluzione tutte le funzioni che soddisfano la relazione y(t) = Bψ(t) (B + ψ(t)) con ψ(t) = eCt+K e K costante. Se imponiamo che y(0) = 1 1= BeK , (B + eK ) K = ln( B ). B−1 Se ora supponiamo che due popolazioni batteriche y1 , y2 siano in competizione fra loro, all’equazione differenziale si dovranno sostituire le due equazioni: dy1 = C1 y1 (1 − b1 y1 − d2 y2 ), dt dy2 = C2 y2 (1 − b2 y2 − d1 y1 ), dt dove C1 e C2 sono fattori di crescita (positivi) delle due popolazioni batteriche. I coefficienti d1 ed2 si riferiscono all’interazione tra le due popolazioni, mentre b1 e b2 sono legati dall’abbondanza dei nutrienti. Queste ultime costituiscono il sistema delle equazioni di Lotka-Volterra e sono alla base di numerose applicazioni. Per un problema ai valori iniziali si intende che sono assegnate delle condizioni iniziali del tipo y(x0 ) = y0 . Nel caso di problemi con valori al contorno boundary value problem, che nella pratica si incontrano molto spesso, si cerca la soluzione y(x) sull’intervallo (a, b) che soddisfa una condizione ai bordi della forma r(y(a), y(b)) = 0 Una equazione differenziale ordinaria ammette in generale infinite soluzioni. Per fissarne una é necessario imporre una condizione, per esempio il valore assunto dalla soluzione in un punto dell’intervallo di integrazione. 10/05/2011 12 Esistenza e Unicitá della soluzione Definizione 1. Data una funzione f : [t0 , t∗ ] → Rn , si chiama problema di Cauchy il problema della ricerca di una funzione y(t) continua e derivabile su [t0 , t∗ ] a valori in Rn tale che ( y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗ y(t0 ) = y0 . (4) Il problema di Cauchy consiste nel determinare tra le curve integrali dell’equazione y 0 (t) = f (t, y(t)) quella che passa per il punto (t0 , y0 ). Supponiamo che la funzione f (t, y(t)) sia definita e contiunua nella regione S = {(t, y), |t ∈ [t0 , t∗ ], y ∈ Rn }, [t0 , t∗ ] limitato supponiamo anche che esista una costante L detta costante di Liptshitz, per cui kf (t, y) − f (t, z)k ≤ Lky − zk, ∀t ∈ [t0 , t∗ ], ∀y, z ∈ Rn . (5) Allora per ogni vettore assegnato y0 esiste una ed una sola funzione y(t) che soddisfa le seguenti condizioni: • y(t) é continua assieme alla sua derivata prima in [t0 , t∗ ], cioé y ∈ C[t10 ,t∗ ] • y 0 (t) = f (t, y(t)) per t ∈ [t0 , t∗ ]; • y(t0 ) = y0 . Inoltre per la soluzione y(t; t0 , u) del problema ( y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗ y(t0 ) = u. si deduce la seguente relazione ky(t; t0 , u) − y(t; t0 , v)k ≤ eL|t−t0 | ku − vk. (6) Quest’ultima relazione ci assicura la dipendenza con continuitá della soluzione del problema di Cauchy dal valore iniziale. Possiamo inoltre osservare che se ∂fi , i, j = 1, . . . , n esistono nella regione le derivate parziali ∂y j S = {(t, y), |t ∈ [t0 , t∗ ], −∞ < yi < ∞, i = 1, . . . , n}, e sono continue e limitate, allora si puó prendere L = sup k (t,y)∈S k = maxi dove k ∂f ∂y Pn ∂fi j=1 | ∂yj |. ∂f k ∂y [t0 , t∗ ] limitato 10/05/2011 13 Il problema di Cauchy per (3) (sistema di equazioni diff.) richiede di determinare una soluzione y(t) che soddisfa le condizioni iniziali y(t0 ) = µ1 , y 0 (t0 ) = µ2 , . . . , y (n−1) (t0 ) = µn ove i numeri µ1 , . . . , µn , sono assegnati. Il teorema precedente mostra che se f é continua e lipschitziana il problema di Cauchy é ben posto secondo Hadamard in quanto la soluzione esiste, é unica e dipende con continuitá dai dati iniziali. Si osserva inoltre che la sola continuitá della f (t, y) non é sufficiente ad assicurare l’unicitá della soluzione, perché assicura solo l’esistenza mentre la lipschitzianitá assicura l’unicitá. Spesso nelle applicazioni la derivata di f rispetto a y oppure le derivate parziali ∂fi nel caso di sistema, esistono e sono continue, ma non limitate in S. In ∂yj questo caso, mentre il problema di Cauchy é ancora risolubile, la soluzione y(t) puó essere definita solo in un intorno di t0 , che puó dipendere anche da y0 , e non su tutto l’intervallo [t0 , t∗ ]. Data una funzione f : R → R, diciamo che f é regolare e uniformemente monotona decrescente se f é differenziabile e la sua derivata soddisfa −M ≤ f 0 (x) ≤ −m < 0 per ogni x, dove M e m sono costanti positive. Condizionamento del problema e dipendenza della soluzione dai dati Osservando la relazione (6) la ben posizione secondo Hadamard non é sufficiente per la risoluzione del problema numerico in quanto il fattore eL|t−t0 | puó essere grande. In questi casi piccole perturbazioni sui dati iniziali possono corrispondere grandi perturbazioni sulla soluzione. Consideriamo il problema ( y 0 (t) = f (t, y(t)) t0 ≤ t ≤ t∗ y(t0 ) = y0 . (7) e assumiamo che la funzione f (t, y(t)) soddisfi una condizione meno restrittiva della condizione di Lipschitz, cioé supponiamo che esista una funzione ν(t) continua a tratti in [t0 , t∗ ] per cui < f (t, y) − f (t, z), y − z >≤ ν(t)ky − zk2 (8) per ogni t ∈ [t0 , t∗ ] e per ogni coppia y, z ∈ Rn . Questa condizione viene chiamata condizione di Lipschitz unilaterale. La condizione (8) é meno restrittiva di (5), poiché se vale quest’ultima e applicando la disuguaglianza di Schwartz, si ha | < f (t, y) − f (t, z), y − z >≤ kf (t, y) − f (t, z)kky − zk ≤ Lky − zk2 per cui dalla (5) deduciamo (8), ma non il viceversa. 10/05/2011 14 La condizione (8) serve per trattare in modo differente le equazioni campione y 0 = y e y 0 = −y. • y 0 = y la condizione (8) risulta < y − z, y − z >= ky − zk2 ≤ ν(t)ky − zk2 , quindi ν(t) = 1. • y 0 = −y la condizione (8) é < −y + z, y + z >= −ky − zk2 ≤ ν(t)ky − zk2 quindi ν(t) = −1. Per ambedue le equazioni la costante di Lipschitz L = 1. Consideriamo il problema perturbato ( dy² (t) dt = f (t, y² (t)) + ²1 ψ(t) t0 ≤ t ≤ t∗ y² (t0 ) = η + ²0 σ. (9) dove ψ é un vettore di n componenti continue in [t0 , t∗ ], σ ∈ Rn e ²0 , ²1 sono numeri reali. Si suppone che la funzione f sia continua in S e soddisfi la (8), in tal caso vale il seguente Teorema Se f (t, y(t)) é continua in S e soddisfa la (8) allora ∀t ∈ [t0 , t∗ ] le soluzioni del sistema (7) e del sistema (9) soddisfano la disuguaglianza µ L(t) ky(t) − y² (t)k ≤ e k²0 σk + Z t t0 ¶ −L(τ ) e k²1 ψ(τ )kdτ , ove L = Z t t0 ν(τ )dτ. (10) Sappiamo che il problema di Cauchy (7) quando la funzione f (t, y) soddisfa la condizione di Lipschitz é un problema ben posto cioé si ha per la soluzione esistenza unicitá e dipendenza continua dai dati. Da un punto di vista numerico la dipendenza continua dai dati é essenziale dal momento che si opera su quantitá affette da errori, ma puó non essere sufficiente per una adeguata approssimazione numerica, perché non garantisce che gli errori trasmessi dai dati sulle soluzioni siano piccoli. Occorre che il problema si ben condizionato. Si tratta di una richiesta piú fine della dipendenza continua dai dati, perché con essa si vuole che a piccole variazioni sui dati corrispondano piccole variazioni sui risultati (stabilitá numerica). Il teorema precedente mostra che il problema (7) é ben condizionato quando il numero di condizione Z t max exp( t0 ≤t≤t∗ t0 ν(τ )dτ ) non é troppo grande. Tornando ai nostri due problemi campioni si ha che • y 0 = y; • y 0 = −y; ν(t) = 1 quindi il problema é mal condizionato; ν(t) = −1 quindi il problema é ben condizionato. 10/05/2011 15 Come caso particolare studiamo la stabilitá numerica del seguente problema perturbato: ( y² (t) = f (t, y² (t)) t0 ≤ t ≤ t∗ (11) y² (t0 ) = η + ² Si ha: y² (t) = y² (t0 ) + e y(t) = y(t0 ) + Z t t0 Z t t0 f (τ, y² (τ ))dτ f (τ, y(τ ))dτ, con y(t0 ) = η. sottraendo si ottiene Z t y² (t) − y(t) = ² + t0 f (τ, y² (τ )) − f (τ, y(τ ))dτ. Ponendo z(t) = y² (t) − y(t) e applicando il teorema del valor medio si ha Z t ∂f (τ, y(τ ) z(t) = ²+ t0 ∂y ovvero z 0 (t) = z(t)dτ, ∂f (τ, ξ) z(t), ∂y con z(t0 ) = ² dove ξ é nell’intorno di y(t). quindi Z t ∂f (τ, ξ) z(t) = ²exp( t0 ∂y Il numero di condizione del problema é exp( Z t ∂f (τ, ξ) y² (t) − y(t) ∼ exp( t0 ∂y dτ ). R t ∂f (τ,ξ) t0 ∂y dτ ) e si ha che dτ )ky² (t0 ) − y(t0 )k per t ≥ t0 , quindi la differenza diminuisce se ∂f < 0 oppure aulmenta se ∂y ∂f > 0. In conclusione il problema di Cauchy é ben condizionato quando ∂y ∂f < 0, tuttavia se il modulo di ∂f é grande si ha un problema di tipo stiff. ∂y ∂y Esempio(problema mal condizionato) 1 soluzione generale y(t) = e3t (C + e−3t (t + )) 3 ( In questo caso C = perturbato 1 , 3 y 0 (t) = 3y − 3t y(0) = 13 si osserva che L = 3(t − t0 ), ν(t) = 3 Problema ( y 0 (t) = 3y − 3t y(0) = 31 + ² y² (t) = y(t) + ²e3t = t + 31 + ²e3t . Per t = 5 si ha che y² (t) = 16 + ²e15 . Se ² é la 3 precisione di macchina non trovo neppura una figura corretta nella soluzione. 10/05/2011 16 Sfortunatamente solo un numero limitato di equazioni differenziali ordinarie puó essere risolto analiticamente, ma anche se é possibile trovare la soluzione in linea teorica, nella pratica a volte non si riesce a calcolarla. Cerchiamo quindi dei metodi numerici in grado di approssimare la soluzione per ogni classe di equazioni differenziali ordinarie che ammettono una soluzione. La strategia generale di tali metodi consiste nel dividere l’intervallo di integrazione I in sottointervalli [tn , tn+1 ] di ampiezza h. Il parametro h é detto passo di discretizzazione. Si cerca, quindi, per ogni nodo tn un valore incognito un che approssimi yn = y(tn ). Il metodo numerico genera una successione di valori um che approssimano la soluzione y(t) nei punti tm . Il metodo numerico é una equazione alle differenze che date le approssimazioni um+j , j = 0, . . . , k permette di calcolare um+k+1 . L’intero k indica il numero di passi del metodo; se k = 1 il metodo é detto metodo ad un passo, se k > 1 é detto a piú passi. Consideriamo una partizione tm dell’intervallo I = [a, b] in cui é definito il problema di Cauchy, ( y 0 (t) = f (t, y(t)) a ≤ t ≤ b y(a) = η. (12) b−a h dove h é il passo di integrazione. Indichiamo con um una approssimazione di y(tm ) su questa partizione. La formula generale di un metodo a k passi é data dalla seguente formula alle differenze: tm = a + mh, m = 0, 1, . . . , N ; N= Pk j=0 αj um+j = hϕ(h, tm , ; um , um+1 , . . . , um+k ; f ) uµ = ηµ (h) (13) µ = 0, 1, . . . , k − 1 Supporremo che la funzione ϕ sia continua rispetto a tutte le variabili e lipschtziana rispetto alla variabile u, cioé kϕ(h, tm , ; um , um+1 , . . . , um+k ; f ) − ϕ(h, tm , ; vm , vm+1 , . . . , vm+k ; f )k ≤ ≤M k X kum+j − vm+j k, j=0 dove M é una costante che non dipende da h. Supponiamo inoltre che ϕ(h, tm , ; um , um+1 , . . . , um+k ; 0) = 0. A questa classe generale appartengono numerosi metodi, essi possono essere cosı́ suddivisi: • metodi Runge-Kutta impliciti ed espliciti; • metodi lineari a piú passi di Adam-Bashforth e Adams-Multon, • metodi alle differenze all’indietro • metodi predictor corrector 10/05/2011 17 Convergenza Nel caso in cui h → 0 la partizione tm diventa l’intervallo continuo [a, b]. Una proprietá naturale che occorre richiedere ad un metodo numerico é che al limite per h tendente a zero la soluzione discreta um diventi la soluzione esatta y(t). Quindi un metodo si dice convergente se per ogni problema del tipo (12) lim um = y(tm ) h→0 per ogni t ∈ [a, b] e per tutte le soluzioni {um } che soddisfano le condizioni iniziali uµ = ηµ per cui lim h→0 t = a + mh ηµ (h) = η, µ = 0, 1, . . . , k − 1 Oppure in modo equivalente max ky(tm ) − um k →h→0 0. a≤t≤b Si noti che questa condizione richiede implicitamente la convergenza dei nodi iniziali. Si osservi anche che un metodo numerico affinché sia convergente l’equazione alle differenze deve risultare una approssimazione sufficientemente accurata dell’equazione differenziale. Consistenza Consideriamo il vettore residuo τm+k = Rm+k = k X αj ym+j − hϕ(h, tm ; ym , . . . , ym+k ; f ), j=0 chiamato anche errore locale di troncamento in tm+k . Il metodo si dice consistente con l’equazione differenziale se il residuo Rm+k soddisfa la condizione µ lim h→0 t = a + mh ¶ 1 Rm+k = 0. h La simbologia scritta sotto il limite indica che simultaneamente h → 0 e m → ∞ in modo tale che t = a + mh rimanga fisso. Si osservi che se h → 0 e m é fisso allora t → a. Si considera fisso il valore di t. Inoltre se si chiedesse solo che limh→0 Rm+k si avrebbe solo che lim h→0 X αj ym+j = 0 e quindi solo una condizione sugli αj e non su ϕ. Il residuo é costruito a partire dalle equazioni alle differenze sostituendo in esse la soluzione esatta alla soluzione approssimata. Essa non soddisfa esattamente l’equazione alle differenze e la discrepanza che si ottiene é l’errore locale di troncamento. La consistenza é condizione necessaria per la convergenza. Infatti un metodo 10/05/2011 18 (13) convergente é consistente. La convergenza implica la consistenza, ma il viceversa non é vero. Stabilitá Puó accadere che un metodo numerico applicato a un dato problema soffra di instabilitá numerica intrinseca che persiste anche al limite per h tendente a zero e impedisce la convergenza. In pratica abbiamo la soluzione numerica un soddisfa l’equazione alle differenze mentre y(tn ) soddisfa entro una certa accuratezza una perturbazione dell’equazione alle differenze. Per la convergenza occorre che un sia insensibile a perturbazioni ossia stabile rispetto a tali perturbazioni. Consideriamo il problema differenziale (12) e si perturbino sia la funzione f sia il dato iniziale η. Sia z(t) la soluzione del problema perturbato ( z 0 (t) = f (t, z(t) + δ(t)) t ∈ [a, b] z(a) = η + δ Siano (δ(t), δ) e (δ ∗ (t), δ ∗ ) due perturbazioni di (12)e siano z(t) e z ∗ (t) le corrispondenti soluzioni dei problemi perturbati. Se esiste C > 0 tale che kz(t) − z ∗ (t)k ≤ C² ∀t ∈ [a, b] quando kδ(t) − δ ∗ (t)k ≤ ² e kδ − δ ∗ k ≤ ² allora il problema a valori iniziali é detto stabile. Ogni metodo numerico applicato a (12) introduce errori di discretizzazione e arrotondamento che possono essere interpretati come perturbazioni del problema originario, se il problema non é totalmente stabile allora nessun metodo ha speranza di produrre una soluzione accettabile. Lo stesso vale se l’equazione alle differenze introdotta dal metodo é essa stessa troppo sensibile alle perturbazioni. Per questo motivo si considerano gli effetti delle perturbazioni sulla ϕ e sui valori iniziali η. Una soluzione perturbata {vn , n = 0, 1, . . . , m} di (13) soddisfa l’equazione alle differenze perturbata ( P k αj vm+j = hϕ(h, tm ; vm , vm+1 , . . . , vm+k ; f ) + δm+k vµ = ηµ (h) + δµ µ = 0, 1, . . . , k − 1 j=0 (14) dove {δm , m = 0, 1, . . . , N } é la perturbazione. n o Siano {δm , m = 0, 1, . . . , N } e δ̃m , m = 0, 1, . . . , N due perturbazioni e siano {vm , m = 0, 1, . . . , N } e {ṽm , m = 0, 1, . . . , N } le corrispondenti soluzioni perturbate. Se esistono due costanti σ e h0 per cui ∀h ∈ (0, h0 ], si verifica la condizione kvm − ṽm k ≤ σ² 0 ≤ m ≤ N quando kδm − δ̃m k ≤ ², 0 ≤ m ≤ N si dice che il metodo é zero stabile. Il concetto di zero stabilitá é connesso strettamente alla stabilitá dell’equazione alle differenze quando h tende a zero. 10/05/2011 19 Occorre ribadire che • la zero-stabilitá é connessa con ció che accade quando h tende a zero. • La zero stabilitá é una proprietá del metodo e non del problema che corrisponde alla richiesta che l’equazione alle differnze sia insensibile alle perturbazioni, ossia che l’equazione alle differenze sia ben posta. • se il metodo non é zero-stabile, le soluzioni ottenute con due precisioni diverse potrebbero essere infinitamente distanti, indipendentemente dalla precisione utilizzata ( cioé interpreto gli errori di arrotondamento e rappresentazione come perturbazioni). Del metodo (13) consideriamo il primo polinomio caratteristico ρ(z) = k X αj z j . j=0 Il metodo si dice che soddisfa le condizioni delle radici se tutte le radici del polinomio caratteristico sono minori o uguali a 1 in modulo e quelle in modulo uguali a 1 sono semplici. Infatti per h → 0 il metodo (13) tende all’equazione alle differenze k X αj ym+j = 0 j=0 il cui polinomio caratteristico coincide con ρ(z). Non sorprende dunque che sia la localizzazione delle radici di ρ(z) a controllare la zero-stabilitá del metodo. Siano z1 , z2 , . . . , zk le radice di ρ(z). Se il metodo é consistente, una radice é 1 cioé ρ(1) = 0. questa radice é detta radice principale z1 = 1, le restanti radici z2 , . . . , zk sono radici spurie che sorgono perché si rappresenta una equazione differenziale del primo ordine con una equazione alle differenze di ordine k. Il metodo deve essere tale da assicurare che le radici spurie tendano a zero per h → 0, dunque la zero-stabilitá é assicurata dalla condizione delle radici: • nelle ipotesi di continuitá della ϕ si ha che zero − stabilità ⇔ condizione delle radici • (teorema di Lax-Richtmayer) convergenza ⇔ consistenza + stabilità La zero-stabilitá non é la sola forma di stabilitá di una soluzione numerica. 10/05/2011 20 Di solito il termine • condizionamento si riferisce alla sensibilitá della soluzione di un problema a perturbazione dei dati; • stabilitá si riferisce alla sensibilitá di un algoritmo alle perturbazioni (errori) che sorgono durante i calcoli. Nello studio delle equazioni differenziali questi due significati tendono a sovrapporsi esiste ambiguitá nella terminologia perché spesso si parla in entrambi i casi di stabilitá. Un metodo a un passo (k=1) soddisfa necessariamente la condizione della radice perché la sola radice di ρ(z) é z = 1. Quindi si ha che convergenza ⇔ stabilità per avere la convergenza occorre che sia zero-stabile che corrisponde alla ben posizione dell’equazione alle differenze. La ben posizione dice che si ha dipendenza continua della soluzione dell’equazione alle differenze dalle perturbazioni sui dati. Dice cioé che per h piccolo, l’equazione alle differenze ha lo stesso comportamento dell’equazione differenziale rispetto alle perturbazioni. Quindi intuitivamente se, per h → 0, si ha che • l’equazione alle differenze approssima bene l’equazione differenziale • la soluzione dell’equazione alle differenze ha la stessa stabilitá della soluzione dell’equazione differenziale allora la soluzione dell’equazione alle differenze converge alla soluzione dell’equazione differenziale in un punto t, per ogni t. 10/05/2011 21 Metodi a un passo La definizione generale di un metodo ad un passo é la seguente ( un+1 = un + hF (tn , un ; h) n = 0, 1, . . . , N − 1 u0 = y0 (15) ove F é determinata da f ed é funzione di tn , un e h. Il Metodo di Eulero é il piú semplice di tutti i metodi numerici ed é definito come segue ( un+1 = un + hf (tn , un ) n = 0, 1, . . . , N − 1 . u0 = y 0 (16) ed é suggerito dalla formula di derivazione numerica f (x, y(xi )) = y 0 (xi ), y 0 (xi ) ∼ y(xi + 1) − y(xi ) h da cui si ricava y(xi+1 ) − y(xi ) = f (xi , y(xi )) h Derivazione Geometrica Nel punto t0 é noto il valore y0 della soluzione analitica. Per calcolare y(t0 + h) occorre muoversi lungo la curva integrale passante per (t0 , y0 ). Di tale punto é nota la pendenza nel punto (t0 , y0 ) poiché vale y00 = f (t0 , y0 ). Se h é sufficientemente piccolo invece di spostarsi lungo la curva integrale ci si sposta lungo la sua tangente e si considera come approssimazione di y(t0 + h) il valore y(t0 + h) ' y0 + hf (t0 , y0 ) = y1 Tale punto non appartiene piú alla curva integrale y(x), soluzione del problema di Cauchy, ma a una nuova curva integrale. Se il problema é ben condizionato, le due curve integrali sono molto vicine e si puó pensare di approssimare y(x) con la nuova curva integrale, si prosegue poi determinando in modo analogo a prima y2 = y1 + hf (t1 , y1 ) ' y(t1 + h) . . . Ad ogni passo si commette un errore (errore locale di troncamento) dato dalla distanza tra il valore calcolato un+1 e il valore che si otterrebbe seguendo la curva integrale che passa per (tn , yn ) e dopo un certo numero di passi tali errori si accumulano dando luogo ad un errore globale che dipende anche dal condizionamento del problema di Cauchy nell’intervallo scelto. Tale errore deve anche tener conto degli errori di arrotondamento nelle operazioni aritmetiche se il metodo é implementato in aritmetica finita. Pertanto il metodo di Eulero costruisce nel campo direzionale associato al problema di Cauchy, una poligonale in cui ogni segmento ha la direzione 10/05/2011 22 della tangente alla curva integrale che passa per l’origine del segmento. 50 100 150 200 250 300 350 400 450 500 100 200 300 400 500 600 Il metodo di Eulero si puó anche pensare come derivazione da una formula di quadratura, dalla relazione y(x) = y(xi ) + Z x xi y 0 (τ )dτ = y(xi ) + Z x xi f (τ, y(τ ))dτ usando la formula dei rettangoli si ottiene y(xi+1 ) ∼ y(xi ) + hf (xi , y(xi )) In generale un metodo ad un passo é di ordine p se l’errore locale di troncamento é un infinitesimo di ordine p + 1 rispetto ad h, cioé τ (t, y, h) = O(hp+1 ) Un metodo a un passo é consistente se é almeno del primo ordine, infatti τn+1 = τ (tn , yn , h) = y(tn + h) − y(tn ) − hF (tn , yn ; h) 2 = y(tn ) + hy 0 (tn ) + h2 y”(tn + θh) − y(tn ) − hF (tn , yn ; h) = h(f (t, y) − F (t, y; h)) + O(h2 ) Per cui il metodo di Eulero é consistente, infatti f (t, y; h) = f (t, y) = F (t, y, 0) e quindi l’errore locale di troncamento τ (t, y; h) = h2 y”(x + θh) 0 < θ < 1 2 10/05/2011 23 Analisi di Convergenza Un metodo si dice convergente se ∀ n = 0, . . . , Nh , |un − yn | ≤ C(h) ove C(h) é un infinitesimo rispetto ad h per h → 0. Se C(h) = O(hp ) per qualche p > 0 diremo che il metodo converge con ordine p. Per verificare che il metodo di Eulero in avanti é convergente scriviamo l’errore nel modo seguente: en = yn − un = (yn − u∗n ) + (u∗n − un ), (17) dove u∗n = yn−1 + hf (tn−1 , yn−1 ), vale a dire che u∗n é la soluzione numerica calcolata in tn a partire dalla soluzione esatta al tempo tn−1 . Il termine yn −u∗n della (17) rappresenta l’errore prodotto da un passo del metodo di Eulero in avanti, mentre il termine u∗n − un rappresenta la propagazione dell’errore accumulato al livello temporale precedente. La figura rappresenta geometricamente un passo del metodo di Eulero in avanti. un en u* n hτ n un−1 y n yn−1 y=y(t) t n−1 tn t Poiché l’errore globale risulta essere la somma dell’errore di troncamento dell’ultimo passo e della propagazione degli errori di troncamento nei passi precedenti, il metodo risulta convergente se entrambi tendono a zero per h che tende a zero. yn − u∗n yn − u∗n = hτn , τn = h é detto errore locale di troncamento. Dalla definizione di u∗n e supponendo che y sia derivabile due volte si ha yn − u∗n h2 = y”(ξn ), 2 per un opportuno ξn ∈ (tn−1 , tn ). (18) 10/05/2011 24 L’errore di troncamento é definito: τ (h) = max |τn (h)|. n=0,...,N h Occorre notare che queste formule valgono per qualsiasi metodo numerico a un passo. Per il metodo di Eulero in avanti si deduce dalla (18) che l’errore di troncamento diventa: τ (h) = Mh , 2 ove, M = max∗ |y”(t)| = maxt∈[t0 ,t∗ ] |f 0 (t, y(t))|. t∈[t0 ,t ] Si deduce che limh→0 τn = 0. Un metodo per il quale l’errore di troncamento locale tende a zero per h che tende a zero si dice consistente. Diremo inoltre che é consistente con ordine p se τ (h) = O(hp ) per un opportuno p ≥ 1. Per il secondo addendo della (17) abbiamo u∗n − un = en−1 + h[f (tn−1 , yn−1 ) − f (tn−1 , un−1 )] poiché f é lipschitziana rispetto al suo secondo argomento, si trova |u∗n − un | ≤ (1 + hL)|en−1 |. Se l’errore iniziale é nullo cioé e0 = 0 la relazione precedente diventa |en | ≤ |un − u∗n | + |u∗n − yn | ≤ (1 + hL)|en−1 | + h|τn (h)| ≤ [1+(1+hL)+. . .+(1+hL)n−1 ]hτ (h) = (1 + hL)n − 1 eL(tn −t0 ) − 1 τ (h) ≤ τ (h) L L avendo usato la relazione n−1 X (1 + hL)k = [(1 + hL)n − 1]/(hL) k=0 la disuguaglianza 1 + hL ≤ ehL , ed avendo infine osservato che nh = tn − t0 . Si trova quindi |en | ≤ (eL(tn −t0 ) − 1) M ( )h, L 2 ∀n = 0, . . . , Nh , (19) da cui discende che il metodo di Eulero é convergente con ordine pari a 1. L’ordine del metodo é uguale all’ordine dell’errore di troncamento locale. La consistenza é necessaria per poter avere la convergenza. Se non fosse soddisfatta, il metodo ad ogni passo introdurrebbe un errore non infinitesimo con h, che sommandosi con gli errori pregressi pregiudicherebbe in modo irrimediabile la possibilitá che l’errore globale tenda a zero con h che tende a zero. La proprietá che un − u∗n si mantenga limitato per h che tende a zero é la proprietá chiamata zero stabilitá. La zero stabilitá unita alla consistenza implica la convergenza. D’altra parte il polinomio caratteristico associato all’eq. alle differenze del metodo di Eulero risulta essere ρ(z) = z − 1 e z = 1 é la radice principale quindi il metodo soddisfa la condizione della radice. 10/05/2011 25 Esempio Consideriamo il seguente problema con valore iniziale u0 = −u + sin(t), u(0) = 1. Sappiamo che la soluzione esatta u(t) = 32 e−t + 12 (sin(t) − cos(t)) che si trova applicando uno dei metodi che avete studiato in analisi matematica. Se invece applichiamo il metodo di Eulero considerando h = 41 otteniamo i seguenti risultati: • h = 14 , per cui t1 = 1 4 e u0 = 1, allora 1 3 u1 = u0 + hf (t0 , u0 ) = 1 + (−1 + sin(0)) = . 4 4 Allora u(1/4) ≈ 0.75 e l’errore in questa approssimazione é e1 = u(1/4) − u1 = .8074469434 − .75 = .05744... • t2 = 2h = 1/2 e u1 = 3/4 dal passo precedente. Allora u2 = u1 + hf (t1 , u1 ) = 3 1 3 1 + (− + sin( ) = 0.6243509898 4 4 4 4 quindi u(1/2) ≈ 0.62435... e l’errore in questa approssimazione é e2 = u(1/2) − u2 = .7107174779 − .6243509898 = .0863664881 Metodo di eulero in avanti Metodo di eulero in avanti 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0.6 0.5 0 0.5 nodi 4errore 0.090904 Metodo di eulero in avanti 1 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0 0.5 nodi 16errore 0.020562 1 0 0.5 nodi 8errore 0.042461 Metodo di eulero in avanti 1 0 0.5 nodi 32errore 0.010122 1 10/05/2011 26 Se nell’approssimare la derivata usiamo le formule alle differenze finite all’indietro resta definito il metodo di Eulero implicito ( un+1 = un + hf (tn+1 , un+1 ) n = 0, . . . , Nh − 1, u0 = y0 La soluzione numerica un+1 al tempo tn+1 richiede, per essere calcolata, informazioni su f (tn+1 , un+1 ) quindi anche da se stessa. Per questo motivo il precedente metodo di Eulero è detto esplicito, questo è detto implicito. Un metodo implicito generalmente è più costoso perchè richiede per il calcolo di un+1 la risoluzione di un problema non lineare, se f è non lineare rispetto al secondo argomento. Nel problema presentato dello sviluppo di una sola popolazione batterica, l’equazione dy y = Cy(1 − ), dt B viene discretizzata con il metodo di Eulero esplicito un+1 = un + hCun (1 − un ) B mentre il metodo implicito richiede la soluzione della seguente equazione non lineare in un+1 un+1 un+1 = un + hCun+1 (1 − ) B I metodi impliciti però godono di migliori proprietà di stabilità. Eulero implicito Eulero implicito 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0 0.5 nodi 4errore 0.071254 Eulero implicito 1 1 1 0.9 0.9 0.8 0.8 0.7 0.7 0 0.5 nodi 16errore 0.019356 1 0 0.5 nodi 8errore 0.037619 Eulero implicito 1 0 0.5 nodi 32errore 0.0098211 1 I grafici sin qui riportati sono stati ottenuti utilizzando le seguenti functions: 10/05/2011 function [t,u]=f_eulero(f,tspan,y0,Nh) % Eulero in avanti % [t,u]=f_eulero(f,tspan,y0,Nh) % tspan=[t0,tf] % Nh nodi h=(tspan(2)-tspan(1))/Nh; tt=[tspan(1):h:tspan(2)] y=y0(:); % valore iniziale w=y; u=y.’; for t=tt(1:end-1) w=w+h*feval(f,t,w,varargin{:}); u=[u;w.’]; end t=tt; return %---------------------------function [t,u]=b_eulero(odefun,tspan,y0,Nh) % risolve ODE con Eulero implicito % [t,u]=b_eulero(odefun,tspan,y0,Nh) % tspan=[t0,tf]; y0 condizione iniziale % odefun: deve ritornare un vettore contenente % f(t,y) tt=linspace(tspan(1),tspan(2),Nh+1); y=y0(:); u=y.’; global glob_h glob_t glob_y glob_odefun; glob_h=(tspan(2)-tspan(1))/Nh; glob_y=y; glob_odefun=odefun; glob_t=tt(2); options=optimset; options.Display=’off’; options.TolFun=1.e-12; options.MaxFunEvals=10000; for glob_t=tt(2:end) w=fsolve(@(w) beulerfun(w),glob_y,options); u=[u;w.’]; glob_y=w; end t=tt; clear glob_h glob_t glob_y glob_odefun end %------------------------function [z]=beulerfun(w) % function secondaria inclusa nel file b_eulero global glob_h glob_t glob_y glob_odefun; z=w-glob_y-glob_h*feval(glob_odefun,glob_t,w); end 27 10/05/2011 28 Metodo di Crank-Nicolson Sommando membro a membro il generico passo dei metodi di Eulero esplicito e Eulero implicito si ottiene il metodo di Crank-Nicolson nel quale h un+1 = un + [fn + fn+1 ] 2 Questo metodo é consistente e si dimostra che l’errore di troncamento locale tende a zero come h2 , e quindi il metodo é convergente con ordine di convergenza 2. Esercizio Prendendo spunto dalle function scritte in precedenza costruite una function che implementa il metodo di Crank-Nicolson. Considerate il seguente problema di Cauchy ( y 0 (t) = cos(2y(t)), t ∈ (0, 1] y(0) = 0, 4t −1) (La soluzione esatta é y(t) = 1/2arcsin( (e )) confrontate questo metodo (e4t +1) con i metodi di Eulero visti in precedenza. 10/05/2011 29 Supponiamo ad esempio che il metodo numerico sia del tipo multistep lineare cioé possa essere scritto nella seguente forma generale: un+1 = p X aj un−j + h j=0 p X bj fn−j + hb−1 fn+1 , n = p, p + 1, . . . (20) j=0 per opportuni coefficienti {ak } e {bk } per p > 0. Il polinomio π(r) = rp+1 − p X aj rp−j j=0 é detto primo polinomio caratteristico associato al metodo numerico, mentre σ(r) = b−1 rp+1 + p X bj rp−j j=0 é detto secondo polinomio caratteristico. Allora il seguente p(r) = π(r) − λhσ(r), é detto polinomio caratteristico del metodo. Siano rj , j = 0, . . . , p le radici del polinomio π(r). Il metodo (20) é zero-stabile se e solo se valgono le seguenti condizioni sulle radici di π(r): ( |rj | ≤ 1 ∀j = 0, . . . , p (21) 0 π (rj ) 6= 0 ∀j tale che |rj | = 1 Nel metodo di Eulero in avavnti p = 0, a0 = 1, b−1 = 0, b0 = 1. Nel metodo di Eulero all’indietro p = 0, a0 = 1, b−1 = 1, b0 = 0, e per il metodo di CrankNicolson p = 0, a0 = 1, b−1 = 1/2, b0 = 1/2. In tutti questi casi c’é una sola radice di π(r) che vale 1 e di conseguenza tutti questi metodi sono zero-stabili. Vale inoltre il seguente Teorema di equivalenza di Lax-Ritchmyer: Ogni metodo consistente é convergente se e solo se é zero-stabile. L’errore di troncamento locale per un metodo multistep (20) é definito come p p X X 1 yn+1 − aj yn−j − h bj f (tn−j , yn−j ) − hb−1 f (tn+1 , yn+1 ) . τn = h j=0 j=0 Il metodo é detto consistente se τ (h) = max|τn (h)| tende a zero per h che tende a zero. Si puó dimostrare che questa condizione equivale a richiedere che p p p X j=0 aj = 1, X j=−1 bj − X jaj = 1 j=0 corrisponde ad affermare che r = 1 é una radice del polinomio π(r). 10/05/2011 30 Fino ad ora ci siamo occupati di problemi di Cauchy su intervalli limitati in cui il numero di sottointervalli Nh dipende da h e tende all’infinito solo se h → 0. Ma esistono svariate situazioni in cui occorre trovare la soluzione del problema di Cauchy in intervalli di tempo grandi, (virtualmente infiniti). In questo caso anche per h fissato Nh puó tendere all’infinito e le limitazioni di en ottenute nella (19) possono perdere di significato in quanto a secondo membro compaiono quantitá illimitate. Si cerca quindi di caratterizzare metodi che pur in corrispondenza di h grandi siano accurati anche per t → ∞. Sfortunatamente il metodo di Eulero in avanti non gode di questa proprietá. Se consideriamo il seguente problema ( y 0 (t) = λy(t) , t ∈ (0, ∞), . y(0) = 1 (22) dove λ é un numero reale negativo. La soluzione esatta y(t) = eλt tende a zero per t → ∞, mentre il metodo di Eulero in avanti u0 = 1, un+1 = un (1 + λh) = (1 + λh)n+1 , n ≥ 0. Avremo limn→∞ un = 0 se e solo se −1 < 1 + hλ < 1, ovvero h < 2 . |λ| (23) Questa condizione esprime la richiesta che per un h fissato la soluzione numerica riproduca l’andamento della soluzione esatta quando tn tende all’infinito. 2 Se h > |λ| allora un+1 → ∞ per n che tende all’infinito. La condizione (23) é una condizione di stabilitá, anzi la proprietá che lim un = 0 n→∞ é detta di assoluta stabilitá. Nell’esempio seguente consideriamo λ = −1 allora occorre scegliere h < 2 in figura sono riportati i risultati ottenuti per h = 30 , 30 , 30 , 30 . 12 14 16 18 10/05/2011 31 eulero in avanti) eulero in avanti) 150 10 100 5 50 0 0 −5 −50 −100 0 10 20 passo 2.5 eulero in avanti) 30 −10 1 1 0.5 0.5 0 0 −0.5 −0.5 −1 0 10 20 passo 1.875 30 −1 0 10 20 passo 2.1429 eulero in avanti) 30 0 10 20 passo 1.6667 30 Eulero implicito Eulero implicito 1 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 0 10 20 30 nodi 15errore 6.9692e−008 Eulero implicito 0 1 1 0.8 0.8 0.6 0.6 0.4 0.4 0.2 0.2 0 0 10 20 30 nodi 60errore 2.7104e−011 0 0 10 20 30 nodi 30errore 9.3123e−010 Eulero implicito 0 10 20 30 nodi 120errore 2.8421e−012 10/05/2011 32 Contrariamente il metodo di Eulero all’indietro e di Crank-Nicolson non richiedono limitazioni su h per³ garantire l’assoluta stabilitá , infatti si trova: ´n+1 1 un+1 = un + hλun+1 e un+1 = 1−λh , n ≥ 0, che tende a zero per n → ∞ per tutti i valori h > 0, analogamente applicando Crank-Nicolson si trova " un+1 (1 + = (1 − #n+1 hλ ) 2 λh ) 2 , n≥0 che per λ < 0 tende a zero per n → ∞ per tutti i possibili valori di h > 0. Possiamo quindi affermare che il Metodo di Eulero in avanti é condizionatamente assolutamente stabile mentre Eulero all’indietro e Crank-Nicolson sono incondizionatamente assolutamente stabili. La regione di Assoluta Stabilitá Supponiamo che nel problema (22) λ sia un numero complesso con parte reale negativa. In tal caso la soluzione eλt tende ancora a zero quando t → ∞. Chiamiamo regione di assoluta stabilitá A di un metodo numerico l’insieme dei valori del piano complesso z = hλ in corrispondenza dei quali il metodo é assolutamente stabile. Per esempio per il metodo di Eulero in avanti la regione di assoluta stabilitá é costituita dai valori z = hλ ∈ C tali che |1+λh| < 1, cioé dal cerchio di raggio unitario e centro (−1, 0), da cui risolvendo rispetto ad h si ottiene h < −2Re(λ) . Per il metodo di Eulero all’indietro l’assoluta stabilitá é |λ|2 invece soddisfatta per ogni valore di hλ al di fuori del cerchio di raggio unitario di centro (1, 0) del piano complesso. Metodi che risultano incondizionatamente assolutamente stabili si dicono A − stabili. Il metodi di Eulero all’indietro e di Crank-Nicolson sono dunque A − stabili cosı́ come molti altri metodi impliciti, questa proprietá rende i metodi impliciti interessanti benché richiedano costi computazionali decisamente piú elevati dei metodi espliciti. Esempio Calcoliamo la restrizione a cui deve essere soggetta h qualora si utilizzi Eulero in avanti per la risoluzione del problem di Cauchy y 0 (t) = λy(t) con λ = −1 + i. Questo valore di λ appartiene alla frontiera della regione di assoluta stabilitá. Un qualunque h ∈ (0, 1) sará sufficiente ad assicurare che hλ ∈ A. Se fosse λ = −2 + 2i la disuguaglianza |1 + λh| < 1 comporterebbe una restrizione piú severa h ∈ (0, 1/2). Nel caso si consideri un problema generalizzato del tipo ( y 0 (t) = λ(t)y(t) + r(t) , t ∈ (0∞), . y(0) = 1 (24) dove λ e r sono due funzioni continue e −λmax ≤ λ(t) ≤ −λmin con 0 < λmin < λmax < +∞, la soluzione esatta non tende necessariamente a zero quando t tende all’infinito, per cui non pare sensato chiedere che un metodo numerico sia assolutamente stabile in questo caso. Si puó peró dimostrare che un metodo assolutamente stabile per il problema (22) , quando viene applicato a un problema del tipo (24) garantisce che le eventuali perturbazioni restino sotto controllo quando t tende all’infinito, accettando al piú una opportuna limitazione sul passo h. 10/05/2011 33 Metodi Runge-Kutta e Metodi Multistep Per ottenere metodi di ordine superiore a 1 si potrebbe considerare lo sviluppo in serie di Taylor ai primi p termini. Per esempio se p=2 si ha che h F (um , tm ; h; f ) = f (tm , ym ) + (ft (tm , ym ) + fy (tm , ym )) 2 ma questo procedimento é molto costoso. Nei metodi Runge-Kutta la funzione F (tm , um ; h) é determinata calcolando numericamente l’integrale Z tm +1 tm f (t, y(t)dt = y(tm+1 ) − y(tm ). Considerando una partizione numerica tm ≤ τ1 < τ2 < . . . < τq ≤ tm+1 di [tm , tm+1 ] questo integrale puó essere approssimato con la formula di quadratura numerica h q X cj f (τj , y(τj )) con y(τj ) = vj = vm + h j=1 j−1 X bj` f (τj , v` ) `=1 Nell’integrando appare la funzione y(t) che deve essere assegnata nei nodi τj . Poiché si vuole che la formula di quadratura sia esatta almeno per polinomi di grado 0 si ha che h q X cj = tm+1 − tm j=1 P e poiché h = tm+1 − tm allora si ottiene la condizione qj=1 cj = 1. Inoltre si P vuole che la formula di quadratura h j−1 `=1 bj,` f (τj , v` ) sia esatta almeno per polinomi di grado zero, per cui h j−1 X bj,` = τj − tm `=1 e poiché τj = tm + aj h con j = 1, . . . , q allora h j−1 X `=1 bj,` = aj h, pertanto j−1 X bj,` = aj `=1 Come si puó osservare questa classe di metodi é caratterizzati dal fatto che, nella definizione del metodo, tra due punti successivi tm e tm+1 vengono usati dei punti ausiliari (stages o stadi) nei quali viene calcolata la funzione f (t, y). Ad esempio nel caso di un solo punto ausiliario (metodo di Heun), si pone h h un+1 = un + hf (tn + , un + fn ). 2 2 Si é quindi introdotto il punto ausiliario t∗ = tn + h2 . Si calcola y ∗ = yn + h2 fn e si considera questo valore come approssimazione di y(t∗ ). Si calcola poi f (t∗ , y ∗ ) e lo si usa per ottenere yn+1 . Si puó dimostrare che questo metodo é di ordine 10/05/2011 34 due. In generale un metodo a q stages (stadi) é definito da P um+1 = um + h qj=1 cj Kj f (tm , ym ) K1 = Kj = aj = 1= P f (tm + haj , um + h q`=0 bj,` K` ) Pj−1 b j = 2, . . . , q Pq`=1 j` j=1 cj I coefficienti {bij } , {ci } e {ai } caratterizzano completamente un metodo Runge-Kutta (RK) e sono generalmente raggruppati nell’array di Butcher a1 a2 .. . b11 b21 .. . b12 b22 .. . ... ... .. . b1q b2q .. . aq bq1 bq2 . . . bqq c1 c2 . . . cq Se i coefficienti bij sono uguali a zero per j ≥ i, con i = 1, 2, . . . q, allora ciascun Ki puó essere ottenuto esplicitamente usando gli i − 1 coefficienti K1 , . . . , Ki−1 che sono giá calcolati, in tal caso il metodo RK si dice esplicito, in caso contrario il metodo si dice implicito e per calcolare i coefficienti Ki si deve risolvere un sistema non lineare di dimensione q. Uno tra i piú noti metodi RK assume la forma: h un+1 = un + (K1 + 2K2 + 2K3 + K4 ) 6 dove K1 K2 K3 K4 = fn , = f (tn + h2 , un + h2 K1 ), = f (tn + h2 , un + h2 K2 ), = f (tn+1 , un + hK3 ), (25) 0 1 2 1 2 1 1 2 1 2 0 0 0 1 1 6 1 3 1 3 1 6 Questo schema si puó ricavare usando la formula di quadratura di Simpson per approssimare l’integrale fra tn e tn+1 , é un metodo esplicito di ordine 4 rispetto a h che richiede ad ogni passo 4 nuove valutazioni della f . Naturalmente si possono costruire molti altri metodi RK sia espliciti che impliciti di ordine arbitrario. Un metodo RK implicito di ordine 4 a due stadi é definito dal seguente array di Butcher √ 3− 3 6√ 3+ 3 6 1 4 √ 3+2 3 12 1 2 √ 3−2 3 12 1 4 1 2 In MatLab esiste la function ode45 basata sulla coppia di metodi RK espliciti (coppia di Dormand-Prince) di ordine 4 e 5, mentre ode23 implementa la coppia Bogacki-Shampine. In questi metodi il passo di integrazione varia 10/05/2011 35 in modo da garantire che l’errore si mantenga al di sotto di una tolleranza fissata RelTol pari a 10−3 . Il programma ode23tb implementa invece un metodo Runge-Kutta implicito. I metodi Multistep o multipasso consentono di ottenere un ordine di accuratezza elevato coinvolgendo i diversi valori un , un−1 , . . . , un−p , p ≥ 1 nella determinazione di un+1 . Un esempio é il metodo del terz’ordine di Adams-Bashforth (AB3) un+1 = un + h (23fn − 16fn−1 + 5fn−2 ) 12 questa formula é ottenuta da: yn+1 = yn + Z tn+1 tn f (t, y(t))dt sostituendo f con il polinomio interpolatore di grado 2 nei nodi tn−2 , tn−1 , tn . Se invece si sostituisce f con il polinomio interpolatore di grado 3 nei nodi tn−2 , tn−1 , tn , tn+1 si ottiene la formula di Adams-Multon (AM 4): un+1 = un + h (9fn+1 + 19fn − 5fn−1 + fn−2 ) 24 si dimostra che tutti questi metodi sono consistenti e zero-stabili. Un’altra famiglia di metodi multistep si ottiene approssimando le derivate con rapporto incrementale all’indietro di ordine elevato backward difference formula (BDF”) a due passi implicito 4 1 2h un+1 = un − un−1 + fn+1 3 3 3 o quella a tre passi (BDF3) un+1 = 18 9 2 6h un − un−1 + un−2 + fn+1 11 11 11 11 anche questi risultano consistenti e zero-stabili. 10/05/2011 36 I metodi Predictor-Corrector I metodi impliciti ad ogni passo generano un problema non lineare nell’incognita un+1 . Per risolverlo si puó ricorrere a uno dei metodi usati per il calcolo degli zeri di una funzione non lineare o utilizzare la functio fzero di Matlab. Una alternativa consiste nell’eseguire una iterazione di punto fisso ad ogni passo temporale. Ad esempio per il metodo di Crank-Nicolson per k = 0, 1, . . . fino a convergenza si calcola (k+1) un+1 = un + i hh (k) fn + f (tn+1 , un+1 ) . 2 (0) Si puó dimostrare che se il dato iniziale un+1 viene scelto opportunamente, basta una sola iterazione di punto fisso per ottenere una soluzione numerica (1) un+1 la cui accuratezza sia dello stesso ordine della soluzione un+1 calcolata col metodo implicito originale. Piú precisamente, se il metodo implicito ha ordine (0) p ≥ 2 il dato iniziale un+1 dovrá essere generato da un metodo esplicito per lo meno accurato di ordine p − 1. Se ad esempio si usa il metodo di CrankNicolson e lo si inizializza con il metodo (del primo ordine) di Eulero in avanti, si ottiene il Metodo di Heun u∗n+1 = un + hfn , un+1 = un + i hh fn + f (tn+1 , u∗n+1 ) 2 Il metodo esplicito viene detto predictor, mentre l’implicito corrector. Un altro esempio é il metodo (AB3) usato come predictor e (AM 4) usato come corrector. Essi garantiscono l’ordine di accuratezza del metodo corrector, d’altra parte essendo espliciti introducono una restrizioni sul passo di integrazione per garantire la stabilitá. Non sono generalmente adeguati per la risoluzione di problemi di Cauchy su intervalli illimitati. 10/05/2011 37 Sistemi di Equazioni Differenziali Consideriamo il seguente sistema di equazioni differenziali del primo ordine nelle incognite y1 = y1 (t), . . . , ym = ym (t): y 0 (t) 1 = f1 (t, y1 , y2 , . . . , ym ) .. . y 0 (t) = f (t, y , y , . . . , y ) m 1 2 m m (26) dove t ∈ [t0 , t∗ ] con condizioni iniziali y1 (t0 ) = y0 , . . . , ym (t0 ) = ym Per risolverlo possiamo applicare uno dei metodi visti a ciascuna delle equazioni che compongono il sistema, per esempio Eulero in avanti diventa: u (t) n+1,1 = un,1 + hf1 (t, un,1 , . . . , un,m ) .. . u n+1,m (t) = un,m + hfm (t, un,1 , . . . , un,m ) (27) Scrivendo il sistema in forma vettoriale y 0 (t) = F (t, y(t)) l’estensione dei metodi precedentemente sviluppati appare immediata. Per esempio, il metodo un+1 = un + h(θF (tn+1 , un+1 ) + (1 − θ)F (tn , un )), n ≥ 0, con u0 = y0 , 0 ≤ θ ≤ 1, rappresenta la forma vettoriale del metodo di Eulero in avanti se θ = 0, all’indietro se θ = 1 e di Crank-Nicolson se θ = 1/2 Esempio Consideriamo il sistema di equazioni di Lokta-Volterra che descrivono due popolazioni batteriche y1 , y2 in competizione fra loro in un ambiente limitato: dy1 = C1 y1 (1 − b1 y1 − d2 y2 ), dt dy2 = −C2 y2 (1 − b2 y2 − d1 y1 ), dt dove C1 e C2 sono fattori di crescita (positivi) delle due popolazioni batteriche. I coefficienti d1 ed2 si riferiscono all’interazione tra le due popolazioni, mentre b1 e b2 sono legati dall’abbondanza dei nutrienti. Consideriamo C1 = C2 = 1, b1 = b2 = 0 e d1 = d2 = 1. Per poter utilizzare le function che abbiamo giá riportato occorre costruire una function che precisi le componenti di F . per il nostro problema: function fn=sistema_locta(t,y) C1=1; C2=1; d1=1;d2=1; b1=0; b2=0; [n,m]=size(y); fn=zeros(n,m); fn(1)=C1*y(1)*(1-b1*y(1)-d2*y(2)); fn(2)=-C2*y(2)*(1-b2*y(2)-d1*y(1)); return 10/05/2011 38 Soluzione del sistema di Lkta−Volterra 3 3 2.5 2.5 2 2 1.5 1.5 1 1 0.5 0.5 0 0 2 4 6 8 evoluzione del tempo delle due componenti y1 ey2 10 0 0 0.5 1 1.5 2 piano delle fasi (y1,y2) La figura mostra la soluzione numerica del sistema. A sinistra rappresentazione in funzione del tempo dell’evoluzione delle due componenti della soluzione y1 linea piena e y2 linea tratteggiata per due diversi valori del dato iniziale (2,2) in blu (1.2,1.2) in rosso. A destra le corrispondenti traiettorie nel piano delle fasi. Generalmente si considerano equazioni differenziali ordinarie 2.5 3 10/05/2011 39 del primo ordine in quanto le equazioni differenziali di ordine p > 1 possono essere sempre ridotte ad un sistema di p equazioni del primo ordine. Infatti y (m) (x) = f (x, y(x), y 0 (x), . . . , y (m−1) (x)) introducendo le funzioni ausiliarie: z1 (x) z2 (x) .. . = y(x) = y 0 (x) .. . zm (x) = y (m−1) (x) viene trasformato in un sistema equivalente di equazioni differenziali ordinarie del primo ordine: z = 0 z10 z20 .. . 0 zm = z2 z3 .. . f (x, z1 , z2 , . . . , zm ) Modello di Van der Pol L’uso dei modelli matematici per studiare l’attivitá elettrica del cuore inizia nel 1928 quando Van der Pol propose di rappresentare il ritmo cardiaco attraverso il comportamento di un circuito elettrico contenente un elemento non lineare, una ”triode wave” la cui resistenza dipende dalla corrente applicata. Matematicamente il circuito é descritto dall’equazione differenziale del secondo ordine y1 ” − µ(1 − y12 )y10 + y1 = 0 dove µ > 0 é un parametro scalare, sostituendo y10 = y2 , si ottiene il sistema ( y10 (x) = y2 y20 (x) = µ(1 − y12 ))y2 − y1 Caso in cui l’equazione di Van der Pol risulta stiff. Quando µ aumenta, per esempio diventa 1000, la soluzione dell’equazione di Van der Pol cambia in modo drammatico e mostra delle oscillazioni su una scala temporale molto lunga e approssimare la soluzione diventa un compito difficile, si dice che il problema diventa stiff, per cui un risolutore come ode45 costruito per problemi non stiff diventa inefficiente. Nella libreria Matlab esistono le function ode15s, ode23s ecc. adatte per risolvere questo tipo di problemi. %% Esercitazione su Vand der Pol eq. caso non stiff % y"_1-mu(1-y_1^2)y_1’+y_1 [t,y]=ode45(@vdp1,[0 20],[2 0]); subplot(2,2,1) plot(t,y(:,1),t,y(:,2),’-.’),xlabel(’time t’) title(’ soluzione dell’’eq. Vander Pol \mu=1’) soluzione y 10/05/2011 40 soluzione dell’eq. Vander Pol µ=1 4 4 2 2 0 0 −2 −2 −4 0 5 10 time t 15 20 2 soluzione nel piano delle fasi −4 −4 −2 0 2 4 2000 1 1000 0 0 −1 −1000 −2 −3 0 1000 2000 3000 prima componente y1 −2000 0 1000 2000 3000 seconda componente y2 ylabel(’soluzione y’) subplot(2,2,2), plot(y(:,1),y(:,2)), title(’soluzione nel piano delle fasi’) %% Van der Pol eq. caso stiff % usiamo la function ode15s per problemi stiff [t,y]=ode15s(@vdp1000,[0 3000],[2 0]); subplot(2,2,3),title(’Van der Pol stiff \mu=1000’) plot(t,y(:,1),’-.’),xlabel(’prima componente y_1’) subplot(2,2,4),plot(t,y(:,2),’-.’),xlabel(’seconda componente y_2’) ____________________________________________ function dypt=vdp1000(t,y) % Van der Pol equation mu=1000 dypt=[y(2);1000*(1-y(1)^2)*y(2)-y(1)]; Software realizzato per gli esempi precedentemente proposti 10/05/2011 41 %% Esercizio sulla verifica della assoluta stabilita % dei metodi di Eulero % all’equazione y’(t)=\lambda y(t); y(0)=1 % nell’intervallo [0,infinito] % costruzione della soluzione esatta sol_esatta=inline(’exp(-t)’,’t’) %lambda=-1; f=inline(’-u’,’t’,’u’) y0=1; % valore iniziale tspan=[0,30] t1=linspace(tspan(1),tspan(2)); yes=feval(sol_esatta,t1); %% Prima app. h=30/12; h=30/14; ... EULERO in AVANTI s=12; h=(30/s); % passo Nh=((tspan(2)-tspan(1))/h); % numero di nodi figure for k=1:4 [t,ufe]=f_eulero(f,tspan,y0,Nh); b(k)=abs(ufe(end)-feval(sol_esatta,t(end))); subplot(2,2,k),plot(t1,yes,t,ufe,’r-.’) title(’eulero in avanti)’) xlabel([’passo ’,num2str(h),’errore ’,num2str(b(k))]) s=s+2;h=(30/s); % passo Nh=((tspan(2)-tspan(1))/h) end %% Prima app. Nh=30/12 ; h=30/14....EULERO ALL’INDIETRO s=12; h=(30/s) Nh=((tspan(2)-tspan(1))/h); % numero di nodi y0=1; figure for k=1:4 [t,ube]=b_eulero(f,tspan,y0,Nh); b(k)=abs(ube(end)-feval(sol_esatta,t(end))); subplot(2,2,k),plot(t1,yes,t,ube,’r-’) title(’Eulero implicito’) xlabel([’nodi ’,num2str(Nh),’errore ’,num2str(b(k))]) s=s+2;h=(30/s); % passo Nh=((tspan(2)-tspan(1))/h) end ____________________________________________________ function [t,u]=f_eulero(f,tspan,y0,Nh,varargin) % Eulero in avanti 10/05/2011 42 % [t,u]=f_eulero(f,tspan,y0,Nh) h=(tspan(2)-tspan(1))/Nh; tt=[tspan(1):h:tspan(2)]; y=y0(:); % valore iniziale w=y; u=y.’; for t=tt(1:end-1) w=w+h*feval(f,t,w,varargin{:}); u=[u;w.’]; end t=tt; return ____________________________________________________ function [t,u]=b_eulero(odefun,tspan,y0,Nh,varargin) % risolve ODE con Eulero implicito % [t,u]=b_eulero(odefun,tspan,y0,Nh) % tspan=[t0,tf]; y0 condizione iniziale % odefun: deve ritornare un vettore contenente % f(t,y) tt=linspace(tspan(1),tspan(2),Nh+1); y=y0(:); u=y.’; global glob_h glob_t glob_y glob_odefun; glob_h=(tspan(2)-tspan(1))/Nh; glob_y=y; glob_odefun=odefun; glob_t=tt(2); options=optimset;options.Display=’off’; options.TolFun=1.e-12; options.MaxFunEvals=10000; for glob_t=tt(2:end) w=fsolve(@(w) beulerfun(w),glob_y,options); u=[u;w.’]; glob_y=w; end t=tt; clear glob_h glob_t glob_y glob_odefun end function [z]=beulerfun(w) global glob_h glob_t glob_y glob_odefun; z=w-glob_y-glob_h*feval(glob_odefun,glob_t,w); end ___________________________________________ %% risoluzione del sistema di eq. diff. % sistema Lotka Volterra [t,u]=f_eulero(’sistema_locta’,[0,10],[2,2],2000); figure(1),plot(t,u(:,1),t,u(:,2),’-.’) hold on [t1,u1]=f_eulero(’sistema_locta’,[0,10],[1.2,1.2],2000); plot(t1,u1(:,1),’r’,t1,u1(:,2),’r-.’) 10/05/2011 xlabel(’evoluzione del tempo delle due componenti y_1 ey_2’) title(’Soluzione del sistema di Lokta-Volterra’) figure,plot(u(:,1),u(:,2)) hold on,plot(u1(:,1),u1(:,2),’r-.’) xlabel(’piano delle fasi (y1,y2)’) _____________________________ function fn=sistema_locta(t,y) C1=1; C2=1; d1=1;d2=1; b1=0; b2=0; [n,m]=size(y); fn=zeros(n,m); fn(1)=C1*y(1)*(1-b1*y(1)-d2*y(2)); fn(2)=-C2*y(2)*(1-b2*y(2)-d1*y(1)); return 43