Condizionamento di un problema e stabilità di un algoritmo
In questa pagina 7
Prerequisiti: Aritmetica di macchina - floating point, precisione di macchina e cancellazioneUn calcolatore rappresenta solo un insieme finito di numeri F(β,t,L,U); ogni numero reale viene arrotondato con errore relativo al più u = ½β^(1−t) (u ≈ 1,1·10⁻¹⁶ in doppia precisione) e ogni operazione è esatta più un errore (1+δ), |δ| ≤ u. Conseguenze: overflow e underflow, somma non associativa, assorbimento, e soprattutto la cancellazione numerica nella differenza di numeri quasi uguali, che si evita riformulando l'espressione.Aritmetica di macchina - floating point, precisione di macchina e cancellazione → (errore relativo, unità di arrotondamento ), Derivata - definizione e significatoLa derivata è il limite del rapporto incrementale; geometricamente è la pendenza della retta tangente. f è derivabile in x0 se e solo se f(x) = f(x0) + f'(x0)(x − x0) + o(x − x0); derivabile implica continua, non viceversa. Derivata destra e sinistra, punti angolosi, flessi a tangente verticale, cuspidi.Derivata - definizione e significato → e Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange →.
Il calcolo numerico si occupa di due domande distinte che è facile confondere:
- quanto è sensibile il problema ai piccoli errori sui dati? (condizionamento, proprietà del problema);
- quanto è sensibile il procedimento con cui lo risolviamo agli errori di arrotondamento? (stabilità, proprietà dell'algoritmo).
Le sorgenti dell'errore
L'errore con cui si ottiene un risultato ha tre origini:
- Errore sui dati (o inerente): i dati di partenza sono misure (un calibro dà con incertezza ) oppure numeri reali arrotondati per entrare nel calcolatore.
- Errore di troncamento (o analitico): il metodo sostituisce un oggetto infinito o continuo con uno finito. Esempio: si calcola una derivata con un rapporto incrementale, si arresta una serie, si approssima un integrale con una somma.
- Errore di arrotondamento: ogni operazione di macchina commette un errore relativo .
Problemi ben posti
Definizione (problema ben posto, Hadamard). Il problema "dato , trova tale che " è ben posto se: (1) la soluzione esiste; (2) è unica; (3) dipende con continuità dai dati . Altrimenti è mal posto.
La terza condizione è la più importante in pratica: se una piccola variazione di può produrre una grande variazione di , i dati inevitabilmente sporchi (misure, arrotondamenti) rendono il risultato inaffidabile. La continuità però non basta: serve sapere quanto il problema amplifica.
Numero di condizionamento
Si perturba il dato in , con piccolo, e si calcola . Per la formula di Lagrange (o di Taylor al primo ordine, 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 →) e dividendo per si ottiene l'errore relativo sul risultato:
Definizione (numero di condizionamento). Per derivabile con è il fattore con cui un errore relativo sul dato viene moltiplicato nel risultato. Il problema è ben condizionato se è piccolo (qualche unità), mal condizionato se è grande.
Regola pratica. Se i dati hanno cifre significative corrette, il risultato ne ha circa . Un errore di solo arrotondamento () con lascia solo cifre.
Altri casi con più variabili: per ogni dato ha il suo e l'errore massimo è circa .
| operazione | commento | |
|---|---|---|
| , | per ciascun dato | errori relativi che si sommano, ben condizionato |
| , | , | mal condizionato quando nella differenza: è la cancellazione |
| gli errori si dimezzano | ||
| mal condizionato solo per grande | ||
| mal condizionato vicino a (dove ) | ||
| mal condizionato vicino a |
Esempio 1: il coseno vicino a . Per : . Si perturba con errore relativo , cioè . Previsione: errore relativo su circa (). Calcolo diretto: e , variazione relativa ✓. Una perturbazione dello sull'angolo cambia il risultato del : vicino a la pendenza del coseno vale circa , quindi la variazione assoluta del risultato è pari a quella del dato (); ma il valore del coseno è prossimo a zero, e diviso per un numero così piccolo l'errore relativo esplode.
Esempio 2: radice doppia. Le radici di sono . Se il termine noto del polinomio viene perturbato di (errore minuscolo, come un arrotondamento) le radici si spostano di : amplificazione . Per le radici diventano complesse (Python: np.roots([1, -2, 1 + 1e-10]) dà 1 ± 1e-5j). Una radice multipla è sempre mal condizionata: il grafico del polinomio è tangente all'asse, una piccola traslazione verticale lo allontana molto in orizzontale.
Esempio 3: sistema lineare. Il sistema , ha soluzione . Se il secondo termine noto passa da a (variazione relativa ) la soluzione diventa : il risultato cambia del . Le due rette sono quasi parallele; amplificazione dell'ordine di . Il numero di condizionamento di un sistema è trattato in Norme di matrici e condizionamento dei sistemi lineariNorme di vettore $|x|1=\sum|x_i|$, $|x|2=\sqrt{\sum x_i^2}$, $|x|\infty=\max|x_i|$. Norma di matrice indotta $|A|=\max{x\ne0}\frac{|Ax|}{|x|}$: $|A|1$ = massima somma per colonne, $|A|\infty$ = massima somma per righe, $|A|2=\sqrt{\lambda{\max}(A^TA)}$ (= $\rho(A)$ se $A$ simmetrica); valgono $|Ax|\le|A||x|$, $|AB|\le|A||B|$, $\rho(A)\le|A|$. Numero di condizionamento $\kappa(A)=|A||A^{-1}|\ge1$ ($\kappa_2=\frac{\sigma_{\max}}{\sigma_{\min}}$, per SPD $\frac{\lambda_{\max}}{\lambda_{\min}}$, per ortogonali 1). Se $A\mathbf x=\mathbf b$ e $A(\mathbf x+\delta\mathbf x)=\mathbf b+\delta\mathbf b$: $\frac{|\delta\mathbf x|}{|\mathbf x|}\le\kappa(A)\frac{|\delta\mathbf b|}{|\mathbf b|}$ (D); con residuo $\mathbf r=\mathbf b-A\hat{\mathbf x}$: $\frac1\kappa\frac{|\mathbf r|}{|\mathbf b|}\le\frac{|\mathbf x-\hat{\mathbf x}|}{|\mathbf x|}\le\kappa\frac{|\mathbf r|}{|\mathbf b|}$. Si perdono circa $\log_{10}\kappa$ cifre; un residuo piccolo non garantisce un errore piccolo se $\kappa$ è grande.Norme di matrici e condizionamento dei sistemi lineari →.
Stabilità di un algoritmo
Un algoritmo calcola con una successione di operazioni elementari; ciascuna introduce un errore , e questi errori si propagano e si possono amplificare. Sia il risultato calcolato.
Definizione (errore in avanti e all'indietro).
- Errore in avanti (forward): .
- Errore all'indietro (backward): la perturbazione dei dati per cui è il risultato esatto, , cioè . Un algoritmo è stabile all'indietro se l'errore all'indietro è dell'ordine di (di poco più di un arrotondamento sui dati).
Collegamento fondamentale, dalla definizione di : Quindi un algoritmo stabile applicato a un problema ben condizionato dà un risultato accurato. Se invece il problema è mal condizionato ( grande), nessun algoritmo può dare di più di circa cifre corrette: l'errore è nel problema, non nel metodo. Se il problema è ben condizionato e il risultato è sbagliato, l'algoritmo è instabile.
Esempio svolto: ricorrenza instabile. Sia per . Per parti (Integrazione per parti∫ f·g' dx = f·g − ∫ f'·g dx (regola del prodotto letta al contrario). Si usa per log x, arcsin x, arctan x (scritti come "funzione per 1"), per sin²x, cos²x, sinh²x, cosh²x (integrale circolare: l'integrale di partenza ricompare e si porta a sinistra) e per prodotti come x^n·e^(αx), x^n·sin(βx), e^(αx)·sin(βx).Integrazione per parti →): Il problema è ben condizionato (un integrale di una funzione positiva e limitata: , cioè è piccolo e decrescente). Si prova la ricorrenza in avanti con cifre significative, partendo da (errore ):
| calcolato | esatto | errore assoluto | errore | |
|---|---|---|---|---|
Il motivo: se , allora e quindi , cioè Ad ogni passo l'errore viene moltiplicato per : già a il risultato è sbagliato quasi del . In doppia precisione , e : la ricorrenza in avanti dà , un valore assurdo (l'integrale di una funzione positiva è positivo).
Rimedio. Si inverte la ricorrenza: . Ora l'errore viene diviso per a ogni passo: . Si può partire da un valore anche grossolano a un indice alto , ad esempio (l'errore è ), e a basso l'errore residuo è . Con cifre e partendo da si ottiene all'indietro (esatto ), (), (), (), , ✓: le cifre corrette sono quelle del dato, nessuna amplificazione. Lo stesso problema, due algoritmi: uno instabile, uno stabile.
Consistenza, stabilità e convergenza di uno schema numerico
Un metodo numerico dipende da un parametro che ne fissa l'accuratezza (il passo , il numero di iterazioni o nodi): approssima .
Definizione.
- Consistenza: se si inserisce nello schema la soluzione esatta , il residuo tende a zero per (): lo schema "assomiglia" al problema.
- Stabilità: la soluzione numerica dipende con continuità, in modo uniforme rispetto a , dai dati: piccole perturbazioni dei dati non vengono amplificate al diminuire di .
- Convergenza: per .
Teorema (di equivalenza di Lax-Richtmyer). Per un problema ben posto e lineare, uno schema consistente è convergente se e solo se è stabile. Per i problemi non lineari vale in generale almeno la direzione consistenza + stabilità convergenza.
Perché funziona. La soluzione esatta , inserita nello schema, non lo soddisfa esattamente: lascia un residuo (errore di troncamento), cioè è la soluzione dello schema con dati perturbati di . La soluzione numerica è invece la soluzione dello schema con i dati veri. La stabilità dice che due soluzioni dello schema con dati che differiscono di distano al più , con indipendente da . Quindi per la consistenza. Se dipendesse da e crescesse (per esempio come ), il prodotto potrebbe non tendere a zero: per questo la stabilità deve essere uniforme. Lo schema si applica alle equazioni differenziali in Metodi di Eulero esplicito, implicito e Crank-NicolsonProblema di Cauchy $y'=f(t,y)$, $y(t_0)=y_0$, con $f$ lipschitziana in $y$ (costante $L$): ben posto. Nodi $t_n=t_0+nh$, $u_n\approx y(t_n)$. Eulero esplicito $u_{n+1}=u_n+h,f(t_n,u_n)$; Eulero implicito $u_{n+1}=u_n+h,f(t_{n+1},u_{n+1})$ (equazione da risolvere a ogni passo: punto fisso se $hL<1$, Newton, o formula chiusa se $f$ è lineare); Crank-Nicolson $u_{n+1}=u_n+\frac h2[f(t_n,u_n)+f(t_{n+1},u_{n+1})]$ (regola dei trapezi). Errore di troncamento locale $\tau_n=\frac{y(t_{n+1})-y(t_n)}h-\Phi$: $\frac h2y''$ (EE), $-\frac h2y''$ (EI), $-\frac{h^2}{12}y'''$ (CN). Consistenza + stabilità $\Rightarrow$ convergenza: ordine 1 per EE e EI, ordine 2 per CN, cioè errore globale $O(h)$ e $O(h^2)$; per EE $|e_n|\le\frac{Mh}{2L}\big(e^{L(t_n-t_0)}-1\big)$ con $M=\max|y''|$ (D). Dimezzando $h$ l'errore si divide per 2 (EE, EI) o per 4 (CN).Metodi di Eulero esplicito, implicito e Crank-Nicolson →, dove è l'errore di troncamento locale.
Esempio svolto: derivata numerica. Per approssimare si usa il rapporto incrementale .
- Errore di troncamento: dallo sviluppo di Taylor, . Tende a zero con (schema consistente, di ordine ).
- Errore di arrotondamento: i due valori e hanno ciascuno errore relativo ; la loro differenza (numeri quasi uguali!) ha errore assoluto , e dividendo per l'errore diventa : cresce al diminuire di .
- Errore totale . Il minimo è per , circa in doppia precisione.
Per in (), errore relativo calcolato:
| errore relativo |
L'errore scende come (troncamento) fino a , poi risale come (arrotondamento): rimpicciolire oltre il necessario peggiora il risultato. Nel linguaggio delle definizioni: lo schema è consistente (il troncamento tende a zero), ma una perturbazione dei dati , produce sul risultato un errore fino a , con un fattore di amplificazione che non è limitato uniformemente in . Lo schema non è stabile rispetto agli errori di arrotondamento, e infatti in aritmetica di macchina non converge per .
Codice
import math
I = 1 - math.exp(-1) # I_n = integrale di x^n e^(x-1) su [0,1]
for n in range(1, 21):
I = 1 - n * I # in avanti: instabile
print("avanti I_20 =", I)
J = 0.0
for n in range(40, 20, -1):
J = (1 - J) / n # all'indietro: stabile, parte da I_40 ~ 0
print("indietro I_20 =", J)
for k in (2, 4, 6, 8, 10, 12): # derivata numerica di exp in x = 1
h = 10.0**-k
print(k, abs((math.exp(1 + h) - math.exp(1)) / h - math.e) / math.e)Output:
avanti I_20 = -30.19239488558378
indietro I_20 = 0.045544884075818054
2 0.005016708416805288
4 5.000166739738369e-05
6 4.999377015549417e-07
8 2.429016271026634e-09
10 5.693704999536528e-07
12 0.00015903952213936482In MATLAB il numero di condizionamento di una matrice è cond(A); per le derivate diff e per le radici di un polinomio roots.
Errori tipici
- Confondere condizionamento e stabilità: il primo riguarda il problema (indipendente dall'algoritmo), la seconda l'algoritmo. Un metodo instabile si cambia; un problema mal condizionato si può solo riformulare o accettare.
- Credere che ridurre migliori sempre un'approssimazione: oltre domina l'arrotondamento.
- Calcolare come (condizionamento assoluto): il fattore relativo è .
- Dedurre dal fatto che l'algoritmo è "corretto" (formula giusta) che sia anche stabile: la ricorrenza è esatta ma instabile.
Domande d'esame
- Quando un problema è ben posto? Risposta: se la soluzione esiste, è unica e dipende con continuità dai dati.
- Definire il numero di condizionamento di e calcolarlo per . Risposta: ; per vale .
- Differenza tra problema mal condizionato e algoritmo instabile. Risposta: il primo amplifica gli errori sui dati qualunque sia il metodo; il secondo amplifica gli errori di arrotondamento anche su un problema ben condizionato.
- Perché nella derivata numerica esiste un ottimale? Risposta: il troncamento cala con , l'arrotondamento cresce: la somma ha un minimo a .
Versione ripasso
Sorgenti dell'errore: dati (misure, arrotondamento in ingresso), troncamento (metodo), arrotondamento (macchina, ; vedi Aritmetica di macchina - floating point, precisione di macchina e cancellazioneUn calcolatore rappresenta solo un insieme finito di numeri F(β,t,L,U); ogni numero reale viene arrotondato con errore relativo al più u = ½β^(1−t) (u ≈ 1,1·10⁻¹⁶ in doppia precisione) e ogni operazione è esatta più un errore (1+δ), |δ| ≤ u. Conseguenze: overflow e underflow, somma non associativa, assorbimento, e soprattutto la cancellazione numerica nella differenza di numeri quasi uguali, che si evita riformulando l'espressione.Aritmetica di macchina - floating point, precisione di macchina e cancellazione →).
Problema ben posto (Hadamard): soluzione esistente, unica, dipendente con continuità dai dati.
- Prodotto e quoziente: per dato; somma/differenza: , enorme se ; : ; : ; : ; : .
- a : ; errore relativo sul dato sul risultato (calcolato ).
- Radice doppia: ha radici ; sposta di (amplificazione ).
- Sistema , : soluzione ; con termine noto diventa (Norme di matrici e condizionamento dei sistemi lineariNorme di vettore $|x|1=\sum|x_i|$, $|x|2=\sqrt{\sum x_i^2}$, $|x|\infty=\max|x_i|$. Norma di matrice indotta $|A|=\max{x\ne0}\frac{|Ax|}{|x|}$: $|A|1$ = massima somma per colonne, $|A|\infty$ = massima somma per righe, $|A|2=\sqrt{\lambda{\max}(A^TA)}$ (= $\rho(A)$ se $A$ simmetrica); valgono $|Ax|\le|A||x|$, $|AB|\le|A||B|$, $\rho(A)\le|A|$. Numero di condizionamento $\kappa(A)=|A||A^{-1}|\ge1$ ($\kappa_2=\frac{\sigma_{\max}}{\sigma_{\min}}$, per SPD $\frac{\lambda_{\max}}{\lambda_{\min}}$, per ortogonali 1). Se $A\mathbf x=\mathbf b$ e $A(\mathbf x+\delta\mathbf x)=\mathbf b+\delta\mathbf b$: $\frac{|\delta\mathbf x|}{|\mathbf x|}\le\kappa(A)\frac{|\delta\mathbf b|}{|\mathbf b|}$ (D); con residuo $\mathbf r=\mathbf b-A\hat{\mathbf x}$: $\frac1\kappa\frac{|\mathbf r|}{|\mathbf b|}\le\frac{|\mathbf x-\hat{\mathbf x}|}{|\mathbf x|}\le\kappa\frac{|\mathbf r|}{|\mathbf b|}$. Si perdono circa $\log_{10}\kappa$ cifre; un residuo piccolo non garantisce un errore piccolo se $\kappa$ è grande.Norme di matrici e condizionamento dei sistemi lineari →).
Stabilità: errore in avanti ; all'indietro . Backward stabile se . Vale: errore in avanti errore all'indietro. Problema mal condizionato: nessun algoritmo salva.
Ricorrenza , (per parti, Integrazione per parti∫ f·g' dx = f·g − ∫ f'·g dx (regola del prodotto letta al contrario). Si usa per log x, arcsin x, arctan x (scritti come "funzione per 1"), per sin²x, cos²x, sinh²x, cosh²x (integrale circolare: l'integrale di partenza ricompare e si porta a sinistra) e per prodotti come x^n·e^(αx), x^n·sin(βx), e^(αx)·sin(βx).Integrazione per parti →): , . A cifre: contro ; in doppia . Rimedio: da (errore diviso per ): .
Schemi: consistenza (residuo ), stabilità (uniforme in ), convergenza; consistenza + stabilità convergenza, perché con indipendente da ; per problemi lineari vale anche il viceversa (Lax-Richtmyer) (Metodi di Eulero esplicito, implicito e Crank-NicolsonProblema di Cauchy $y'=f(t,y)$, $y(t_0)=y_0$, con $f$ lipschitziana in $y$ (costante $L$): ben posto. Nodi $t_n=t_0+nh$, $u_n\approx y(t_n)$. Eulero esplicito $u_{n+1}=u_n+h,f(t_n,u_n)$; Eulero implicito $u_{n+1}=u_n+h,f(t_{n+1},u_{n+1})$ (equazione da risolvere a ogni passo: punto fisso se $hL<1$, Newton, o formula chiusa se $f$ è lineare); Crank-Nicolson $u_{n+1}=u_n+\frac h2[f(t_n,u_n)+f(t_{n+1},u_{n+1})]$ (regola dei trapezi). Errore di troncamento locale $\tau_n=\frac{y(t_{n+1})-y(t_n)}h-\Phi$: $\frac h2y''$ (EE), $-\frac h2y''$ (EI), $-\frac{h^2}{12}y'''$ (CN). Consistenza + stabilità $\Rightarrow$ convergenza: ordine 1 per EE e EI, ordine 2 per CN, cioè errore globale $O(h)$ e $O(h^2)$; per EE $|e_n|\le\frac{Mh}{2L}\big(e^{L(t_n-t_0)}-1\big)$ con $M=\max|y''|$ (D). Dimezzando $h$ l'errore si divide per 2 (EE, EI) o per 4 (CN).Metodi di Eulero esplicito, implicito e Crank-Nicolson →).
Derivata numerica: (troncamento) più (arrotondamento); . Per in : errore relativo (), (), (). MATLAB: cond(A), roots, diff.
Passaggi principali.
- Derivazione di : , , si divide per . Più variabili: , errore massimo .
- a : , ; e , variazione relativa (prevista ).
- Ricorrenza a cifre: (); errore: , cioè .
- Limiti di : (da ); partendo da l'errore a è .
- All'indietro da a cifre: , , , , , .
- Derivata numerica: errore totale , minimo per (annullando la derivata rispetto a ).
Errori tipici: confondere condizionamento (problema) e stabilità (algoritmo); credere che piccolo migliori sempre; usare invece di ; ritenere stabile un algoritmo solo perché la formula è esatta.
Esercizi su questo argomento
- Esercizio - Criteri di arresto, incremento contro errore e residuo di (x-1)3
- Esercizio - Numero di condizionamento di ln x, ex, 1/(1-x) e cos x
- Esercizio - Passo ottimo nella derivata numerica di ln x, differenze in avanti e centrate
- Esercizio - Problema ben condizionato e algoritmo instabile, ex - 1 per x piccolo
- Esercizio - Ricorrenza p(n+1) = (10/3) p(n) - p(n-1) instabile