Esercizio - Problema ben condizionato e algoritmo instabile, e^x - 1 per x piccolo
In questa pagina 3
Teoria: 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 →; cancellazione in 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 →; sviluppo in Sviluppi di Mac-Laurin notevoliTabella degli sviluppi di Mac-Laurin da sapere a memoria (e^x, sin, cos, log(1+x), (1+x)^alpha, arctan, sinh, cosh, tan) e regole per combinarli: algebra degli o piccoli, prodotti, funzioni composte, quanti termini tenere.Sviluppi di Mac-Laurin notevoli →.
Testo
Si vuole calcolare per piccolo e positivo.
- (a) Calcolare il numero di condizionamento di e il suo limite per .
- (b) Calcolare come "esponenziale meno " in aritmetica a cifre significative per , , .
- (c) Ricavare un algoritmo stabile e ripetere il calcolo.
- (d) Domanda teorica: il problema è mal condizionato? L'algoritmo è stabile? Spiegare.
Soluzione
(a) Condizionamento
, quindi Per , e , quindi . Valori: , . Il problema è ben condizionato: un errore relativo sul dato resta un errore relativo dello stesso ordine sul risultato.
(b) Algoritmo "exp(x) - 1"
Si calcola , si arrotonda a cifre, si sottrae .
| esatto | a 5 cifre | calcolato | esatto | errore relativo | |
|---|---|---|---|---|---|
Gli errori di arrotondamento del -esimo decimale sono ora in primo piano: con tutte le cifre sono perdute.
(c) Algoritmo stabile
Dallo sviluppo di Mac-Laurin (nessuna sottrazione di numeri vicini: tutti i termini sono positivi):
| somma a 5 cifre | ||||
|---|---|---|---|---|
Tutte le cifre a disposizione sono corrette (per l'esatto è , che a cifre è : scarto relativo , cioè l'ultima cifra). Il termine è inutile sotto . In doppia precisione esiste la funzione dedicata expm1, che applica lo stesso principio per ogni .
(d) Domanda teorica
Il problema è ben condizionato (): non è colpa dei dati. L'algoritmo "calcola , sottrai " è instabile per piccolo: è calcolato con errore relativo , cioè con errore assoluto , comparabile con quando ; la sottrazione (esatta) lascia solo il rumore. Errore relativo sul risultato , molto più di . Controllo in doppia precisione con : np.exp(x) - 1 dà invece di (errore relativo , sotto il maggiorante ), e per dà invece di ; np.expm1(x) è esatta in entrambi i casi.
Risultati. (problema ben condizionato); con cifre la formula perde tutto per ; la serie dà .
Errori tipici
- Dedurre dall'errore grande che il problema sia mal condizionato: va calcolato .
- Fermare la serie troppo presto: per servono più termini (il resto è , 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 →).
Versione ripasso
(b) Algoritmo a cifre:
| a 5 cifre | calcolato | esatto | errore | |
|---|---|---|---|---|
(c) (termini positivi): , , , tutte cifre corrette. In doppia: expm1.
(d) Problema ben condizionato, algoritmo instabile (errore assoluto su , relativo ). Doppia precisione, : exp(x)-1 (errore ); : .
Errori tipici: dedurre il cattivo condizionamento dall'errore (va calcolato ); arrestare la serie troppo presto per non piccolo.