31 Stabilità assoluta
L’accuratezza da sola non basta a decidere se un metodo numerico per ODE sia utilizzabile. Per problemi che contengono modi che decadono rapidamente un metodo può essere di ordine elevato e ciò nonostante richiedere un passo h piccolissimo solo per non esplodere. Questo capitolo sviluppa il concetto di stabilità assoluta e confronta le regioni di stabilità dei metodi visti nei capitoli precedenti.
31.1 L’equazione test di Dahlquist
Il modello di riferimento è l’equazione test scalare
y'(t) = \lambda\, y(t), \qquad \lambda\in\mathbb{C} \tag{31.1}
la cui soluzione esatta avanza di un passo secondo
y(t_{n+1}) = e^{q}\, y(t_n), \qquad q = h\lambda
Se \mathrm{Re}(\lambda)<0 la soluzione esatta decade. È ragionevole chiedere che un buon metodo numerico riproduca questo decadimento per il valore q=h\lambda scelto.
Perché proprio questa equazione? Perché, come vedremo nella Sezione 31.5, la linearizzazione di un sistema attorno ad una traiettoria e la diagonalizzazione della matrice jacobiana riconducono il caso vettoriale ad una collezione di equazioni scalari della forma 31.1, una per ogni autovalore.
31.2 Funzione e regione di stabilità
Applicando un metodo a un passo alla 31.1 si ottiene sempre una relazione della forma
y_{n+1} = R(q)\, y_n \qquad\Longrightarrow\qquad y_n = R(q)^{n}\, y_0
dove R(q) è detta funzione di stabilità del metodo. La soluzione numerica resta limitata per n\to\infty se e solo se |R(q)|\leq 1.
Definizione 31.1 (Regione di stabilità assoluta) Dato un metodo a un passo con funzione di stabilità R(q), la sua regione di stabilità assoluta è
\mathcal{S} = \big\lbrace q\in\mathbb{C} ~:~ |R(q)| \leq 1 \big\rbrace \tag{31.2}
La frontiera di \mathcal{S} è descritta da |R(q)|=1. Per ogni metodo consistente vale
R(q) = 1 + q + \mathcal{O}(q^2)
cioè R riproduce localmente l’esponenziale e^q vicino all’origine; più precisamente, un metodo di ordine p ha
R(q) = \sum_{k=0}^{p} \dfrac{q^k}{k!} + \mathcal{O}(q^{p+1})
31.3 I metodi fondamentali
Eulero esplicito
y_{n+1} = y_n + h\lambda y_n = (1+q) y_n \qquad\Longrightarrow\qquad \boxed{\,R_{\mathrm{EE}}(q) = 1+q\,}
La condizione |1+q|\leq 1 descrive il disco chiuso di raggio 1 centrato in -1. Sull’asse reale negativo
-2 \leq q \leq 0
quindi per \lambda reale negativo il metodo richiede
h \leq \dfrac{2}{|\lambda|} \tag{31.4}
Si tratta di un vincolo di pura stabilità: può essere enormemente più severo del passo necessario a risolvere accuratamente la parte lenta della soluzione.
Runge-Kutta espliciti del secondo ordine
Tutti i metodi RK espliciti a due stadi di ordine due (punto medio, Heun3, Ralston4) hanno la stessa funzione di stabilità
\boxed{\,R_{\mathrm{RK2}}(q) = 1 + q + \dfrac{q^2}{2}\,}
I coefficienti dei tableau sono diversi, ma sull’equazione test i metodi coincidono. L’intervallo di stabilità sull’asse reale negativo è ancora [-2,0]: aumentare l’ordine da 1 a 2 non allarga il passo ammissibile per un modo reale negativo.
Runge-Kutta classico del quarto ordine
\boxed{\, R_{\mathrm{RK4}}(q) = 1 + q + \dfrac{q^2}{2} + \dfrac{q^3}{6} + \dfrac{q^4}{24} \,}
cioè il polinomio di Taylor5 di grado 4 di e^q. L’intervallo di stabilità reale è circa
-2.7853 \lesssim q \leq 0
un po’ più largo di Eulero6, ma pur sempre limitato.
Eulero implicito
y_{n+1} = y_n + q y_{n+1} \qquad\Longrightarrow\qquad \boxed{\,R_{\mathrm{EI}}(q) = \dfrac{1}{1-q}\,}
La condizione |R|\leq 1 diventa |1-q|\geq 1, cioè l’esterno del disco di raggio 1 centrato in +1. Tale insieme contiene tutto il semipiano sinistro chiuso. Inoltre
R_{\mathrm{EI}}(q) \longrightarrow 0 \qquad \text{per } |q|\to\infty,\ \mathrm{Re}(q)<0
quindi i modi molto rigidi vengono fortemente smorzati.
Metodo dei trapezi (Crank-Nicolson)
y_{n+1} = y_n + \dfrac{q}{2}\big( y_n + y_{n+1} \big) \qquad\Longrightarrow\qquad \boxed{\, R_{\mathrm{CN}}(q) = \dfrac{1 + q/2}{1 - q/2} \,}
Si verifica subito che |R_{\mathrm{CN}}(q)|\leq 1 se e solo se \mathrm{Re}(q)\leq 0: la regione di stabilità è esattamente il semipiano sinistro. Però
R_{\mathrm{CN}}(q) \longrightarrow -1 \qquad \text{per } q\to -\infty
I modi rigidi non vengono smorzati: sopravvivono numericamente come oscillazioni di segno alterno. È questa la differenza pratica fondamentale fra trapezi ed Eulero implicito.
31.4 A-stabilità e L-stabilità
Definizione 31.2 (Metodo A-stabile) Un metodo a un passo si dice A-stabile se
\big\lbrace q\in\mathbb{C} ~:~ \mathrm{Re}(q)\leq 0 \big\rbrace \subseteq \mathcal{S}
cioè se ogni modo stabile dell’equazione test resta numericamente stabile per ogni passo h>0.
Definizione 31.3 (Metodo L-stabile) Un metodo A-stabile si dice L-stabile se in più
R(q) \longrightarrow 0 \qquad \text{per } |q|\to\infty \text{ nel semipiano sinistro}
L’A-stabilità impedisce la crescita dei modi rigidi stabili; la L-stabilità li sopprime. Dalla discussione precedente:
- Eulero implicito è A-stabile e L-stabile;
- il metodo dei trapezi è A-stabile ma non L-stabile;
- nessun metodo di Runge-Kutta esplicito è A-stabile (31.3).
31.5 Dal caso scalare ai sistemi
Si consideri il sistema lineare
\bm{y}' = \bm{A}\bm{y}
Per un metodo di Runge-Kutta la funzione di stabilità si estende formalmente all’argomento matriciale:
\bm{y}_{n+1} = R(h\bm{A})\, \bm{y}_n
Se \bm{A} è diagonalizzabile, \bm{A}=\bm{V}\bm{\Lambda}\bm{V}^{-1}, allora
R(h\bm{A}) = \bm{V}\, R(h\bm{\Lambda})\, \bm{V}^{-1}
e poiché R(h\bm{\Lambda}) è diagonale, il problema si disaccoppia in tante equazioni test scalari quanti sono gli autovalori. La condizione pratica è quindi
\boxed{\; h\lambda_j \in \mathcal{S} \quad \text{per ogni autovalore } \lambda_j \text{ di } \bm{A} \;} \tag{31.5}
Problemi stiff
Si consideri
\bm{y}' = \bm{A}\bm{y}, \qquad \bm{A} = \begin{bmatrix} -1 & 0 \\ 0 & -1000 \end{bmatrix}
I due modi decadono come e^{-t} ed e^{-1000t}. Dopo un tempo brevissimo il secondo modo è numericamente nullo e la soluzione è governata interamente dal primo: per accuratezza basterebbe h\approx 10^{-1}. Ma Eulero esplicito, per la 31.4, richiede
h \leq \dfrac{2}{1000} = 2\cdot 10^{-3}
per non esplodere, cioè un passo 500 volte più piccolo di quello richiesto dall’accuratezza, e lo richiede per tutta la durata dell’integrazione. Un problema con questa caratteristica si dice stiff; una misura grossolana è il rapporto
\dfrac{\max_j |\mathrm{Re}(\lambda_j)|}{\min_j |\mathrm{Re}(\lambda_j)|}
detto rapporto di stiffness (qui vale 1000). Per questi problemi i metodi impliciti A-stabili non sono un lusso ma una necessità.
31.6 Diagrammi di stabilità
Le regioni che seguono sono calcolate direttamente dalla definizione 31.2, tracciando la curva di livello |R(q)|=1.
Le regioni sono tutte limitate: aumentare l’ordine ne cambia forma ed estensione, ma non produce A-stabilità.
Il grafico seguente mostra il confronto fra |R(q)| ed |e^q|=e^{q} sull’asse reale negativo: si vede dove ogni metodo perde il contatto con la soluzione esatta.
31.7 Stabilità e accuratezza
Il fatto che q appartenga a \mathcal{S} garantisce solo che la propagazione numerica resti limitata: non dice che l’approssimazione sia accurata. Eulero implicito è stabile per q negativo arbitrariamente grande, ma
R_{\mathrm{EI}}(q) = \dfrac{1}{1-q}
approssima male e^q a passo grossolano. La scelta pratica di h deve quindi soddisfare due condizioni separate:
- stabilità: gli autovalori scalati h\lambda_j devono stare in \mathcal{S};
- accuratezza: l’errore globale deve rispettare la tolleranza richiesta.
Per problemi non stiff è di norma l’accuratezza a determinare h; per problemi stiff un metodo esplicito è invece limitato dalla stabilità.
Problemi oscillanti e asse immaginario
Per problemi quasi conservativi gli autovalori stanno vicino all’asse immaginario e conta il comportamento di R(i\omega h). Si distinguono due errori:
- errore di dissipazione: |R(i\omega h)| \neq 1;
- errore di dispersione (o di fase): \arg R(i\omega h) \neq \omega h.
Un metodo può quindi essere assolutamente stabile e riprodurre comunque male le oscillazioni. Si noti che Eulero esplicito ha |R(i\theta)|=\sqrt{1+\theta^2}>1: nessun tratto dell’asse immaginario, tranne l’origine, appartiene alla sua regione di stabilità, per cui esso è inutilizzabile sui problemi puramente oscillanti.
Procedura pratica
- Linearizzare localmente la ODE: \bm{y}' \approx \bm{J}_{\bm{f}}(t,\bm{y})\,\bm{y} + \cdots
- Stimare gli autovalori \lambda_j dello jacobiano \bm{J}_{\bm{f}}.
- Scalarli con il passo candidato: q_j = h\lambda_j.
- Verificare che i q_j stiano in \mathcal{S}.
- Imporre separatamente la tolleranza di accuratezza.
31.8 Quadro riassuntivo
| Metodo | Ordine | Tipo | R(q) | Stabilità su \mathbb{R}^{-} | A-stab. | L-stab. |
|---|---|---|---|---|---|---|
| Eulero esplicito | 1 | esplicito | 1+q | [-2,0] | no | no |
| RK2 (Heun, punto medio, Ralston) | 2 | esplicito | 1+q+\dfrac{q^2}{2} | [-2,0] | no | no |
| RK4 classico | 4 | esplicito | \sum_{k=0}^{4}\dfrac{q^k}{k!} | \approx[-2.7853,\,0] | no | no |
| Eulero implicito | 1 | implicito | \dfrac{1}{1-q} | (-\infty,0] | sì | sì |
| Trapezi (Crank-Nicolson) | 2 | implicito | \dfrac{1+q/2}{1-q/2} | (-\infty,0] | sì | no |
| Punto medio implicito | 2 | implicito | \dfrac{1+q/2}{1-q/2} | (-\infty,0] | sì | no |
| Gauss-Legendre (s stadi) | 2s | implicito | Padé (s,s) | (-\infty,0] | sì | no |
| Radau IIA (s stadi) | 2s-1 | implicito | Padé (s-1,s) | (-\infty,0] | sì | sì |
I punti essenziali del capitolo:
- le regioni di stabilità dei metodi di Runge-Kutta espliciti sono sempre limitate, perché R è un polinomio;
- un metodo A-stabile contiene tutto il semipiano sinistro, e deve necessariamente essere implicito;
- la L-stabilità aggiunge lo smorzamento dei modi molto rigidi;
- il metodo dei trapezi è A-stabile ma non L-stabile;
- su un problema stiff il passo di un metodo esplicito è dettato dalla stabilità, non dall’accuratezza;
- stabilità e accuratezza sono requisiti indipendenti.