La successione pn=(31)n soddisfa la ricorrenza a tre termini
pn+1=310pn−pn−1,p0=1,p1=31.
(a) Mostrare che la ricorrenza ha come soluzione generale pn=α3−n+β3n e determinare α, β per i dati assegnati.
(b) Calcolare p2,…,p6 in un'aritmetica a 4 cifre significative (con 31→0,3333, 310→3,333) e confrontare con i valori esatti.
(c) Spiegare l'andamento dell'errore e dire se il problema "calcolare pn" è mal condizionato o se è l'algoritmo a essere instabile.
(d) Proporre un algoritmo stabile.
Soluzione
(a) Soluzione generale
Si cerca pn=rn: sostituendo, rn+1=310rn−rn−1, cioè (dividendo per rn−1) r2−310r+1=0, che ha radici r=2310±9100−4=2310±38, cioè r=3 e r=31. Quindi pn=α3−n+β3n. Le condizioni iniziali: p0=α+β=1 e p1=3α+3β=31. Dalla prima α=1−β; nella seconda 31−β+3β=31⇒38β=0⇒β=0, α=1.
La soluzione cercata è la sola che non contiene la componente crescente 3n.
(b) Calcolo a 4 cifre
Si arrotonda a 4 cifre significative dopo ogni operazione.
p2=3,333⋅0,3333−1: il prodotto è 1,110889→1,111, quindi p2=1,111−1=0,1110.
p3=3,333⋅0,1110−0,3333=0,3700−0,3333=0,0367.
p4=3,333⋅0,0367−0,1110=0,1223−0,1110=0,0113.
p5=3,333⋅0,0113−0,0367=0,03766−0,0367=0,00096.
p6=3,333⋅0,00096−0,0113=0,003200−0,0113=−0,0081.
n
pn calcolato
pn esatto
errore assoluto
errore relativo
1
0,3333
0,333333
3,3⋅10−5
10−4
2
0,1110
0,111111
1,1⋅10−4
10−3
3
0,0367
0,037037
3,4⋅10−4
9⋅10−3
4
0,0113
0,012346
1,05⋅10−3
8,5⋅10−2
5
0,00096
0,004115
3,2⋅10−3
0,77
6
−0,0081
0,001372
9,5⋅10−3
6,9
(c) Andamento dell'errore
L'errore assoluto cresce di un fattore circa 3 a ogni passo (3,3⋅10−5→1,1⋅10−4→3,4⋅10−4→1,05⋅10−3…), mentre il valore esatto decresce come 3−n: l'errore relativo cresce come 9n e già a n=6 il risultato ha il segno sbagliato.
Il motivo è nella parte (a): l'arrotondamento di 310 e di p1 introduce una piccola componente β=0, e questa cresce come 3n mentre la soluzione voluta decresce come 3−n.
Il problema "calcolare (31)n" è invece ben condizionato (una potenza con errore relativo K=n sul dato 31). Quindi l'algoritmo è instabile. In doppia precisione, dove l'errore iniziale è ∼10−16, la ricorrenza dà p20≈3⋅10−8 invece di 2,9⋅10−10, e p30≈1,8⋅10−3 invece di 4,9⋅10−15.
(d) Algoritmo stabile
Si usa la ricorrenza a due termini pn+1=31pn (una divisione per 3 a ogni passo): gli errori relativi si sommano solo linearmente, ≈nu, non esplodono. Equivale a calcolare 3−n con una potenza.
Risultato.pn=3−n (α=1, β=0); la ricorrenza a tre termini in aritmetica finita porta β=0 e dà errore relativo ∼9n.
Errori tipici
Concludere che "il problema è mal condizionato" perché il risultato è sbagliato: bisogna prima chiedersi se un'altra formula dà lo stesso valore in modo accurato.
Sperare che aumentare le cifre risolva: sposta solo di qualche passo il momento in cui la componente 3n prende il sopravvento.
p5=0,03766−0,0367=0,00096; p6=0,003200−0,0113=−0,0081.
Esatti: 0,111111,0,037037,0,012346,0,004115,0,001372. Errore relativo da 10−3 (n=2) a 6,9 (n=6).
(c) L'errore assoluto cresce di ≈3 a passo (componente β3n), il valore esatto decresce come 3−n: errore relativo ∼9n. Il problema ((31)n, K=n) è ben condizionato, l'algoritmo è instabile. Doppia precisione: p30≈1,8⋅10−3 invece di 4,9⋅10−15.
(d) Stabile: pn+1=31pn (errore ≈nu).
Errori tipici: incolpare il problema senza cercare un altro algoritmo; sperare nelle cifre in più (si sposta solo il passo del crollo).