Metodi di Eulero esplicito, implicito e Crank-Nicolson
In questa pagina 7
Un'equazione differenziale ordinaria descrive come una grandezza evolve nel tempo: il raffreddamento di un pezzo, la velocità di un veicolo con attrito, la corrente in un circuito. Le equazioni risolubili in forma chiusa (Equazioni differenziali a variabili separabiliy' = a(t) b(y) con a continua su I e b continua su J. Gli zeri ȳ di b danno le soluzioni costanti y = ȳ (integrali singolari). Le altre si trovano dividendo per b(y) e integrando: ∫dy/b(y) = ∫a(t)dt + c, poi si ricava y. Se b è C¹ la soluzione del problema di Cauchy è unica, ma può esistere solo su un intervallo più piccolo di I; se b è solo continua può non essere unica (y' = ∛y).Equazioni differenziali a variabili separabili →, Equazioni differenziali lineari del primo ordiney' + a(t)y = b(t) con a, b continue su un intervallo I. Le soluzioni sono definite su tutto I e il problema di Cauchy ha una sola soluzione. Integrale generale: y = e^(−A(t))[c + ∫e^(A(t)) b(t) dt], con A primitiva di a; per l'omogenea (b = 0) y = c e^(−A(t)). Soluzione del problema con y(t0) = x0: stessa formula con A(t) = ∫ da t0 a t di a(s) ds e integrale da t0 a t. Si dimostra moltiplicando per e^(A(t)).Equazioni differenziali lineari del primo ordine →) sono l'eccezione: già non ha formula. I metodi numerici costruiscono la soluzione passo dopo passo su una griglia di istanti, partendo dal dato iniziale. Qui si trattano i tre metodi più semplici, che mostrano tutte le idee (consistenza, ordine, metodi impliciti) e sono la base dei solutori usati in pratica.
Prerequisiti: Equazioni differenziali - introduzione e problema di CauchyUn'equazione differenziale ordinaria di ordine n ha come incognita una funzione y(t) e lega y⁽ⁿ⁾ a t, y, y', …, y⁽ⁿ⁻¹⁾. L'integrale generale è l'insieme delle soluzioni, definite su un intervallo; di solito sono infinite e dipendono da n costanti. Il problema di Cauchy aggiunge n condizioni iniziali in un istante t0 (y(t0), …, y⁽ⁿ⁻¹⁾(t0)) e sotto opportune ipotesi ha una sola soluzione. y⁽ⁿ⁾ = f(t) si risolve integrando n volte.Equazioni differenziali - introduzione e problema di Cauchy →, Formula di Taylor con resto di LagrangeSe f ha n+1 derivate continue su [a,b], l'errore tra f e il suo polinomio di Taylor si scrive esattamente come f^(n+1)(c)(x-x0)^(n+1)/(n+1)! per un c opportuno: serve a stimare l'errore su tutto un intervallo e a scegliere il grado del polinomio.Formula di Taylor con resto di Lagrange →, Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson → (i metodi sono quadrature); il caso dei sistemi è in Stabilità assoluta, problemi stiff e sistemi di equazioni differenzialiSul problema test $y'=\lambda y$ ($\mathrm{Re},\lambda<0$, soluzione che decade) i metodi danno $u_{n+1}=R(z),u_n$ con $z=h\lambda$: EE $R=1+z$, EI $R=\frac1{1-z}$, CN $R=\frac{1+z/2}{1-z/2}$. La regione di stabilità assoluta è ${z:|R(z)|<1}$: per EE il disco di centro $-1$ e raggio $1$ (per $\lambda<0$ reale: $h<\frac2{|\lambda|}$), per EI l'esterno del disco di centro $1$ e raggio $1$, per CN il semipiano $\mathrm{Re},z<0$. EI e CN sono A-stabili (nessun limite su $h$ per $\mathrm{Re},\lambda<0$); per $z\to-\infty$ è $R_{EI}\to0$ (smorza) e $R_{CN}\to-1$ (oscilla con smorzamento lento). Un problema è stiff quando ha componenti che decadono a velocità molto diverse (rapporto $\frac{\max|\mathrm{Re}\lambda_i|}{\min|\mathrm{Re}\lambda_i|}$ grande): l'accuratezza permetterebbe $h$ grande, ma la stabilità di un metodo esplicito impone $h<\frac2{\max|\lambda_i|}$. Sistemi $\mathbf y'=A\mathbf y$: EE $\mathbf u_{n+1}=(I+hA)\mathbf u_n$, EI $(I-hA)\mathbf u_{n+1}=\mathbf u_n$, CN $(I-\frac h2A)\mathbf u_{n+1}=(I+\frac h2A)\mathbf u_n$; stabilità se $h\lambda_i$ sta nella regione per ogni autovalore. Oscillatore ($\lambda=\pm i\omega$): $|R_{EE}|=\sqrt{1+\omega^2h^2}>1$ (energia cresce), $|R_{EI}|<1$ (smorza), $|R_{CN}|=1$ (conserva). Equazioni di ordine $m$ si riducono a sistemi del primo ordine.Stabilità assoluta, problemi stiff e sistemi di equazioni differenziali →.
1. Il problema di Cauchy e la sua ben posizione
Se è continua e lipschitziana in , (basta ), la soluzione esiste ed è unica e dipende con continuità dai dati: due soluzioni con dati iniziali e differiscono al più di . Il problema è ben posto: piccoli errori sul dato (o accumulati dal metodo) non esplodono in tempo finito, anche se possono crescere esponenzialmente. ha le dimensioni di ed è la scala dei tempi caratteristici del problema.
Esempio. , : ha , . L'equazione lineare ha soluzione (somma della soluzione dell'omogenea e di una particolare ). Servirà come banco di prova perché si conosce la soluzione esatta.
2. Tre modi di discretizzare
Si fissa il passo e i nodi . Si indica con l'approssimazione di . Integrando l'equazione su : Il metodo dipende da come si approssima l'integrale.
Eulero esplicito (EE). Rettangolo con l'altezza a sinistra, : Eulero implicito (EI). Rettangolo con l'altezza a destra, : Crank-Nicolson (CN). Regola dei trapezi, :
Interpretazione geometrica di EE: da si segue la tangente (pendenza ) per un tratto . È lo sviluppo di Taylor troncato al primo ordine. Equivalentemente, si sostituisce con il rapporto incrementale in avanti.
Esplicito e implicito. In EE compare solo a sinistra: basta valutare . In EI e CN compare anche dentro : a ogni passo si deve risolvere un'equazione per .
- Se è lineare in , , si risolve a mano. EI: . CN: .
- Se è non lineare, si usa l'iterazione di punto fisso , che converge se (contrazione, si veda Metodo di bisezione e iterazioni di punto fissoBisezione: se f è continua e f(a)f(b) < 0 si dimezza l'intervallo tenendo la metà con il cambio di segno; dopo n passi |c_n − α| ≤ (b−a)/2^(n+1), cioè un bit di precisione per iterazione (convergenza lineare, sempre garantita). Punto fisso x = g(x): se g manda [a,b] in sé con |g'| ≤ L < 1 (contrazione) il punto fisso è unico, l'iterazione x_{k+1} = g(x_k) converge da ogni x_0 e |x_k − α| ≤ L^k/(1−L)·|x_1−x_0|; l'errore si moltiplica per circa g'(α) a ogni passo. Una stessa equazione ha molte riscritture x = g(x), alcune convergenti e altre no.Metodo di bisezione e iterazioni di punto fisso →), oppure il metodo di Newton per , partendo da (converge quadraticamente e non richiede , perché resta lontano da zero anche con grande quando : per questo si usa per i problemi stiff).
Esempio (a mano). , , (i dati esatti sono , , ).
EE: .
- ; ; .
EI: .
- ; ; .
CN: .
- ; ; .
Errori a : EE (per difetto), EI (per eccesso), CN . EE e EI sbagliano in direzioni opposte (sono i rettangoli a sinistra e a destra di una funzione monotona), e CN, la loro media in un certo senso, è molto più precisa.
3. Errore di troncamento e consistenza
Definizione. L'errore di troncamento locale è il residuo che si ottiene inserendo la soluzione esatta nello schema, diviso per . Il metodo è consistente se per ; ha ordine se .
Con Taylor (soluzione regolare , ):
- EE: perché . Ordine .
- EI: (sviluppando attorno a ). Ordine .
- CN: : è l'errore della regola dei trapezi (Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson →) applicato a , diviso per . Ordine .
4. Convergenza e ordine
L'errore globale è . Gli errori locali si accumulano a ogni passo, e il problema li amplifica (di un fattore al più ). Per controllare l'accumulo serve la stabilità, nel senso generale visto in Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo →.
Definizione (stabilità, o zero-stabilità). Un metodo è stabile se, perturbando lo schema con errori a ogni passo (e sul dato iniziale), la soluzione numerica perturbata dista da quella non perturbata al più , con indipendente da su un intervallo fissato .
Per EE, EI e CN con lipschitziana questa proprietà vale sempre (per abbastanza piccolo): a ogni passo una differenza tra due soluzioni numeriche cresce al più di un fattore (o per EI), e dopo passi il fattore totale è , che non dipende da . È una proprietà del metodo per ; la stabilità assoluta (a fissato) è un'altra cosa e si tratta nella nota sui problemi stiff.
Teorema (convergenza). Se è lipschitziana in (costante ) e il metodo è consistente di ordine e stabile, allora per , con dipendente da , dall'intervallo e dalle derivate di .
L'idea è quella del teorema di equivalenza: la soluzione esatta soddisfa lo schema a meno del residuo , cioè è una soluzione numerica perturbata con ; la stabilità dà .
Dimostrazione per EE. Per la soluzione esatta , mentre . Sottraendo, Con , , e , iterando: usando e .
Nella dimostrazione i due ingredienti sono separati: è la consistenza, il fattore , limitato indipendentemente da , è la stabilità.
Esempio. Per : , , . A con : . L'errore vero è : la stima è corretta, ma pessimistica di un fattore .
Tabella di convergenza per in (). Il rapporto è tra l'errore con il passo precedente (doppio) e quello attuale:
| EE errore | rapp. | EI errore | rapp. | CN errore | rapp. | |
|---|---|---|---|---|---|---|
| 0,2 | - | - | - | |||
| 0,1 | 2,09 | 1,92 | 4,01 | |||
| 0,05 | 2,04 | 1,96 | 4,00 | |||
| 0,025 | 2,02 | 1,98 | 4,00 | |||
| 0,0125 | 2,01 | 1,99 | 4,00 |
I rapporti e confermano gli ordini e . Per ottenere un errore di EE richiede circa (3700 passi), CN solo (25 passi): CN costa di più per passo (un'equazione implicita, qui lineare e quindi gratis) ma molto meno complessivamente.
Stima dell'ordine da tre soluzioni con passi quando la soluzione esatta non è nota: , come per la quadratura.
5. Implementazione
import numpy as np
f = lambda t, y: t - y # y' = t - y, y(0) = 1
esatta = lambda t: t - 1 + 2 * np.exp(-t) # soluzione esatta
def eulero_esplicito(f, t0, y0, h, n):
t, y = t0, y0
for _ in range(n):
y += h * f(t, y); t += h
return y
def eulero_implicito(t0, y0, h, n): # f lineare: u_{n+1}(1+h) = u_n + h t_{n+1}
t, y = t0, y0
for _ in range(n):
t += h; y = (y + h * t) / (1 + h)
return y
def crank_nicolson(t0, y0, h, n): # u_{n+1}(1+h/2) = u_n(1-h/2) + h/2 (t_n + t_{n+1})
t, y = t0, y0
for _ in range(n):
y = (y * (1 - h / 2) + h / 2 * (t + t + h)) / (1 + h / 2); t += h
return y
print("tre passi con h = 0.2:", [round(eulero_esplicito(f, 0, 1, 0.2, k), 6) for k in (1, 2, 3)],
[round(eulero_implicito(0, 1, 0.2, k), 6) for k in (1, 2, 3)],
[round(crank_nicolson(0, 1, 0.2, k), 6) for k in (1, 2, 3)])
print("esatta :", [round(float(esatta(0.2 * k)), 6) for k in (1, 2, 3)])
print("\n h EE: errore rapp. EI: errore rapp. CN: errore rapp.")
old = [None] * 3
for n in (5, 10, 20, 40, 80):
h = 1 / n
errs = [abs(esatta(1) - v) for v in (eulero_esplicito(f, 0, 1, h, n), eulero_implicito(0, 1, h, n), crank_nicolson(0, 1, h, n))]
rapp = [f"{o / e:5.2f}" if o else " -" for o, e in zip(old, errs)]
print(f"{h:6.4f} {errs[0]:.3e} {rapp[0]} {errs[1]:.3e} {rapp[1]} {errs[2]:.3e} {rapp[2]}")
old = errsOutput:
tre passi con h = 0.2: [0.8, 0.68, 0.624] [0.866667, 0.788889, 0.757407] [0.836364, 0.738843, 0.695417]
esatta : [0.837462, 0.74064, 0.697623]
h EE: errore rapp. EI: errore rapp. CN: errore rapp.
0.2000 8.040e-02 - 6.800e-02 - 2.463e-03 -
0.1000 3.840e-02 2.09 3.533e-02 1.92 6.138e-04 4.01
0.0500 1.879e-02 2.04 1.802e-02 1.96 1.533e-04 4.00
0.0250 9.294e-03 2.02 9.102e-03 1.98 3.832e-05 4.00
0.0125 4.623e-03 2.01 4.575e-03 1.99 9.580e-06 4.00In MATLAB ode45 (Runge-Kutta adattivo) e ode23, ode15s (per problemi stiff) risolvono [t,y] = ode45(@(t,y) t-y, [0 1], 1); i metodi di questa nota si scrivono con un ciclo for. In Python scipy.integrate.solve_ivp(f, (0,1), [1]) è l'equivalente.
Errori da evitare
- Valutare al tempo sbagliato: EE usa , EI usa , CN entrambi.
- Trattare EI come esplicito: compare dentro ; con lineare si isola , con non lineare servono punto fisso o Newton.
- Confondere errore locale e globale: il primo è per passo (o per unità di tempo), il secondo sull'intervallo; si perde una potenza di perché si fanno passi.
- Credere che l'ordine dica tutto: un metodo di ordine alto può essere instabile per non abbastanza piccolo (si veda la nota sulla stabilità).
- Applicare la stima come previsione realistica: è un limite superiore spesso pessimistico, specialmente quando è grande.
- Dimenticare l'arrotondamento nel rapporto degli errori: i rapporti e valgono solo per abbastanza piccolo e prima che gli errori di macchina dominino.
Esercizi svolti: Esercizio - Eulero esplicito a mano e confronto con la soluzione esatta del raffreddamento, Esercizio - Eulero implicito e Crank-Nicolson su un'equazione lineare con forzante, Esercizio - Eulero implicito e Crank-Nicolson per un'equazione non lineare con Newton, Esercizio - ordine di convergenza dalla tabella degli errori e stima del passo.
Domande d'esame
- Ricavare i metodi di Eulero esplicito, implicito e Crank-Nicolson dall'integrale di su . Traccia. Rettangolo a sinistra, a destra, trapezi.
- Che cosa significa che un metodo ha ordine ? Calcolare l'errore di troncamento di Eulero esplicito. Traccia. ; Taylor: .
- Dimostrare che l'errore globale di Eulero esplicito è . Traccia. , , somma geometrica: .
- Qual è il vantaggio e quale il costo dei metodi impliciti? Traccia. Stabilità migliore (nota seguente); a ogni passo un'equazione non lineare da risolvere (punto fisso con o Newton).
Versione ripasso
(Equazioni differenziali - introduzione e problema di CauchyUn'equazione differenziale ordinaria di ordine n ha come incognita una funzione y(t) e lega y⁽ⁿ⁾ a t, y, y', …, y⁽ⁿ⁻¹⁾. L'integrale generale è l'insieme delle soluzioni, definite su un intervallo; di solito sono infinite e dipendono da n costanti. Il problema di Cauchy aggiunge n condizioni iniziali in un istante t0 (y(t0), …, y⁽ⁿ⁻¹⁾(t0)) e sotto opportune ipotesi ha una sola soluzione. y⁽ⁿ⁾ = f(t) si risolve integrando n volte.Equazioni differenziali - introduzione e problema di Cauchy →, Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di RichardsonUna formula di quadratura approssima $\int_a^b f,dx$ con $\sum w_if(x_i)$ ottenuta integrando il polinomio che interpola $f$ nei nodi. Trapezio $\frac{b-a}2[f(a)+f(b)]$ (grado di esattezza 1, errore $-\frac{(b-a)^3}{12}f''(\xi)$), punto medio $(b-a)f(m)$ (grado 1, errore $+\frac{(b-a)^3}{24}f''(\xi)$), Cavalieri-Simpson $\frac{b-a}6[f(a)+4f(m)+f(b)]$ (grado 3, errore $-\frac{(b-a)^5}{2880}f^{(4)}(\xi)$). Composite con passo $h=\frac{b-a}n$: trapezi errore $-\frac{(b-a)h^2}{12}f''(\xi)$ (ordine 2, rapporto tra errori 4 se $h$ si dimezza), Simpson errore $-\frac{(b-a)h^4}{180}f^{(4)}(\xi)$ (ordine 4, rapporto 16, $n$ pari). Estrapolazione di Richardson: se $Q(h)=I+Ch^p+\dots$ allora $I\approx\frac{2^pQ(h/2)-Q(h)}{2^p-1}$; per i trapezi $p=2$ e $\frac{4T_{h/2}-T_h}3=S_{h/2}$; ripetuta dà la tabella di Romberg. Stima dell'errore a posteriori: $I-Q(h/2)\approx\frac{Q(h/2)-Q(h)}{2^p-1}$.Formule di quadratura - trapezi, Cavalieri-Simpson ed estrapolazione di Richardson →)
Problema. , , lipschitziana in (costante ): ben posto, . Nodi , .
Metodi (da ):
- EE: (rettangolo a sinistra, tangente);
- EI: (a destra, implicito);
- CN: (trapezi).
Impliciti. : EI ; CN . Non lineare: punto fisso () o Newton su .
Troncamento. : EE , EI , CN (errore dei trapezi su ). Consistente se ; ordine se .
Convergenza. Stabile: perturbazioni a ogni passo spostano la soluzione numerica al più di , indipendente da (per EE il fattore ). Consistenza + stabilità : EE e EI ordine 1, CN ordine 2. Prova per EE (D): , , , . Dimezzando : errore (EE, EI) o (CN). Ordine da .
Esempio , , , :
- EE: ;
- EI (): ;
- CN (): ;
- esatti .
Errori in : EE e EI (rapporti ), CN (rapporti ) per . Stima EE: , , : .
Passaggi principali.
- Taylor per EE: , .
- Somma geometrica: e .
- Costo: CN costa di più per passo ma per errore servono 25 passi contro di EE.
- Errori in : EE (difetto), EI (eccesso), CN : i due rettangoli sbagliano in verso opposto.
- Impliciti non lineari: punto fisso converge per (contrazione); Newton su senza limite su .
- Locale e globale: per unità di tempo; passi, errore globale . MATLAB
ode45,ode15s. - Troncamento di EI e CN: EI si sviluppa attorno a , , da cui ; CN è la regola dei trapezi applicata a , errore diviso per .
- Stima pessimistica: per a con il limite supera l'errore vero di un fattore .
- Ben posizione: soluzioni con dati e distano al più .
Errori tipici.
- valutata al tempo sbagliato.
- EI trattato come esplicito.
- Errore locale e globale confusi.
- Stima presa per previsione.
Esercizi su questo argomento
- Esercizio - Eulero esplicito a mano e confronto con la soluzione esatta del raffreddamento
- Esercizio - Eulero implicito e Crank-Nicolson per un'equazione non lineare con Newton
- Esercizio - Eulero implicito e Crank-Nicolson su un'equazione lineare con forzante
- Esercizio - ordine di convergenza dalla tabella degli errori e stima del passo
- Esercizio - passo massimo di Eulero esplicito per un'equazione test e confronto con i metodi impliciti