Note per il corso di Calcolo Scientifico Prof.ssa R. Vermiglio L

Note per il corso di Calcolo Scientifico
Prof.ssa R. Vermiglio
L' Analisi Numerica, disciplina recentemente denominata
anche Calcolo Scientifico, si occupa dello sviluppo e
dell'analisi di algoritmi per la risoluzione di problemi
matematici che sono suggeriti dalle scienze
computazionali e dall'ingegneria.
L' ANALISI NUMERICA
* si occupa di quantita' che sono continue, cioe' i
problemi matematici trattati coinvolgono variabili reali e
complesse (problemi di matematica del continuo);
* ricerca delle tecniche di approssimazione che
convergano rapidamente e ne studia l'accuratezza.
Gli algoritmi sviluppati sono implementati su un
calcolatore -------> l'architettura dello strumento di
calcolo gioca un ruolo non trascurabile nella risoluzione
del problema e nell'accuratezza della risposta finale.
Il codice deve essere affidabile, efficiente e flessibile.
Riassumendo
l'obiettivo dell'analisi numerica e' quello di sviluppare ed
analizzare degli algoritmi efficienti, che forniscano una
soluzione ad alcuni problemi della matematica del
continuo nel minimo tempo, con la massima accuratezza
mediante il calcolatore.
1
Sono diversi gli "ingredienti" che giocano un ruolo
importante in tale disciplina, ma il suo fulcro sta negli
algoritmi.
In molti problemi l'approssimazione e' inevitabile, perche'
le quantita' coinvolte non sono calcolabili dal punto di
vista analitico.
Osservazione: nella valutazione di un algoritmo si dovra'
tener presente anche "il tempo" di esecuzione: una stima
sara' data dalla complessita' computazionale.
Esempio: regola di Cramer per soluzione dei un sistema
lineare.
2
Strategia generale.
La strategia generale per affrontare il problema da
approssimare puo' essere riassunta come segue
Sostituire il problema difficile con uno piu' semplice, che
ha la stessa soluzione del problema originale o almeno ha
una soluzione "vicina" (------> analisi errore)
complicato-------->semplice
nonlineare-------->lineare
infinito-------->finito
differenziale-------->algebrico
La soluzione ottenuta e', in
un'approssimazione di quella originale.
generale, solo
Il procedimento risolutivo richiede diverse fasi, ognuna
delle quali introduce delle semplificazioni e quindi degli
errori.
Pertanto per valutare la bonta' della risposta finale
(attendibilita' del risultato) bisogna analizzare e
controllare t u t t e le "sorgenti d'errore" o "fonti
d'incertezza".
Fonti d'incertezza
Prima dell'implementazione:
3
*formulazione del modello matematico (insieme di leggi
di natura matematica che descrivono il fenomeno da
analizzare)
------> adeguatezza del modello
*formulazione del modello numerico (algoritmo per
approssimare il modello matematico)
------> errore di analitico o di troncamento
*misurazioni sperimentali o computazioni precedenti
-----> errore nei dati di input
Durante la computazione:
* strumento di calcolo
------> errori di arrontondamento (errori di
rappresentazione sul calcolatore ed errori nelle
operazioni)
L ' a c c u r a t e z z a del risultato finale risente della
combinazione delle approssimazioni perturbazioni
introdotte nei vari passi e che possono essere amplificate
dalla natura del problema o dell'algoritmo
Esempio:
Il calcolo della superficie della Terra mediante la formula
A=4pr2
coinvolge diverse approssimazioni:
4
*la Terra viene modellata come una sfera, che idealizza la
sua vera forma
*il valore del raggio terrestre r si basa su misurazioni
empiriche e su altre computazioni
* il valore di p richiede il troncamento di un precesso
infinito
*i valori di input e i risultati delle operazioni aritmetiche
sono arrotondate sul computer.
5
Errore assoluto e relativo
Sia ~
x
definisce
un’aprossimazione del numero reale x. Si
~
Errore Assoluto = Errass(x)= |x
-x|
e, se x≠0,
Errore Relativo= Errrel(x)=Errass(x)/|x|.
Una definizione equivalente di errore realtivo e'
~
x
= x (1+e), Errrel(x)=|e|.
Nelle approssimazioni scientifiche, dove le quantita' in
gioco possono variare molto in grandezza, e' piu'
opportuno considerare l'errore relativo perche' non
~
dipende dallo "scaling", infatti x-->mx, ~
x
--->mx
lascia invarato Errrel(x).
Quando x e ~
x
sono vettori, gli errori assoluti e relativi
si misurano con le norme vettoriali ||.||. In alcuni contesti
puo' far comodo considerare l'errore relativo
"componentwise"
max i=1,...,n Errrel(xi).
Solitamente il valore esatto x e' sconosciuto, allora si
cerca una stima o una limitazione superiore dell'errore
relativo.
Per la stessa ragione, l'errore relativo e' spesso valutato
rispetto al valore approssimato invece di quello esatto.
6
Le cifre significative di un numero sono le prime cifre
diverse da zero e tutte le successive (es 0.0123,1.00567).
La nozione di cifre significative esatte e' legata all'errore
relativo e pare abbastanza intuitiva ma una sua
definizione rigorosa e' problematica.
Esempio: I seguenti numeri reali concordano fino a tre
cifre significative secondo qualsiasi ragionevole
definizione ma l’errore relativo e’ diverso:
x=1.00000, ~
x
=1.00345,Errrel(x)=3.45*10-3
x=9.0000, ~
x
=8.99899, Errrel(x)=1.12*10-4
L'errore relativo fornisce una stima piu' accurata rispetto
all'informazione sul numero delle cifre significative
esatte.
7
Calcolo del numero pigreco con l'algoritmo di Archimede instabile
l1=sqrt(2),
li+1=sqrt(2-sqrt(4-li2)), i=1,2,...
pi=li * 2i
pigreco= 3.141592653589793
p(i)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
err_ass
2.828427124746190 3.13e-01 9.97e-02
3.061467458920719 8.01e-02 2.55e-02
3.121445152258053 2.01e-02 6.41e-03
3.136548490545941 5.04e-03 1.60e-03
3.140331156954739 1.26e-03 4.01e-04
3.141277250932757 3.15e-04 1.00e-04
3.141513801144145 7.88e-05 2.51e-05
3.141572940367883 1.97e-05 6.27e-06
3.141587725279961 4.92e-06 1.57e-06
3.141591421504635 1.23e-06 3.92e-07
3.141592345611077 3.07e-07 9.80e-08
3.141592576545004 7.70e-08 2.45e-08
3.141592633463248 2.01e-08 6.40e-09
3.141592654807589 1.22e-09 3.88e-10
3.141592645321215 8.27e-09 2.63e-09
3.141592607375720 4.62e-08 1.47e-08
3.141592910939673 2.57e-07 8.19e-08
3.141594125195191 1.47e-06 4.68e-07
3.141596553704820 3.90e-06 1.24e-06
3.141596553704820 3.90e-06 1.24e-06
3.141674265021758 8.16e-05 2.60e-05
3.141829681889202 2.37e-04 7.54e-05
3.142451272494134 8.59e-04 2.73e-04
3.142451272494134 8.59e-04 2.73e-04
3.162277660168380 2.07e-02 6.58e-03
3.162277660168380 2.07e-02 6.58e-03
3.464101615137754 3.23e-01 1.02e-01
4.000000000000000 8.58e-01 2.73e-01
Matlab 4.2c eps =
2.220446049250313e-16
8
err_rel
Calcolo del numero pigreco con algoritmo di Archimede stabile
l1=sqrt(2),
li+1=
li
(sqrt(2+sqrt(4-li2)))
, i=1,2,...
pi=li * 2i , i=1,2,...
pigreco= 3.141592653589793
i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
p(i)
err_ass
2.828427124746190 3.13e-01 9.97e-02
3.061467458920718 8.01e-02 2.55e-02
3.121445152258052 2.01e-02 6.41e-03
3.136548490545939 5.04e-03 1.60e-03
3.140331156954753 1.26e-03 4.02e-04
3.141277250932773 3.15e-04 1.01e-04
3.141513801144301 7.89e-05 2.51e-05
3.141572940367092 1.97e-05 6.27e-06
3.141587725277160 4.93e-06 1.57e-06
3.141591421511200 1.23e-06 3.92e-07
3.141592345570118 3.08e-07 9.80e-08
3.141592576584873 7.70e-08 2.45e-08
3.141592634338564 1.92e-08 6.13e-09
3.141592648776986 4.81e-09 1.53e-09
3.141592652386592 1.20e-09 3.83e-10
3.141592653288993 3.01e-10 9.57e-11
3.141592653514594 7.52e-11 2.39e-11
3.141592653570994 1.88e-11 5.98e-12
3.141592653585094 4.70e-12 1.49e-12
3.141592653588619 1.17e-12 3.73e-13
3.141592653589501 2.92e-13 9.30e-14
3.141592653589721 7.19e-14 2.29e-14
3.141592653589776 1.69e-14 5.37e-15
3.141592653589790 3.11e-15 9.89e-16
3.141592653589794 4.44e-16 1.41e-16
3.141592653589794 1.33e-15 4.24e-16
3.141592653589795 1.78e-15 5.65e-16
Matlab 4.2c eps =
2.220446049250313e-16
9
err_rel
inf
1
Approssimazione dell' esponenziale exp(x)= Â i!
i=1
con il troncamento della serie
N
1
gN(x)= Â i!
i=1
gN(x)
xi
x
N
err_rel
0.5
1
20
40
100
16
19
68
103
192
1.648721270700128
2.693537214216206e-12
2.718281828459046
1.633712903499084e-16
4.851651954097902e+08 1.228543294929598e-16
2.353852668370200e+17 1.359473361693308e-16
2.688117141816133e+43 9.210461999799666e-16
-0.5
-1
-20
-4
-100
16
20
96
138
246
6.065306597126333e-01 1.830448315920528e-16
3.678794411714424e-01 3.017899073375402e-16
5.621884472130418e-09 1.727542678492420e+00
-3.165731894063124e+007.451666466185133e+17
-2.913755646891533e+257.832516501472691e+68
--------> instabile per x<0
-0.5
-1
-20
-4
-100
16
20
68
103
192
6.065306597126335e-01
3.678794411714423e-01
2.061153622438558e-09
-4.248354255291590e-18
3.720075976020839e-44
1.830448315920528e-16
1.508949536687701e-16
2.006596217642398e-16
1.813342135475986e-16
8.029533140257073e-16
--------> stabile per x<0
Matlab 4.2c eps =
2.220446049250313e-16
Approssimazione della derivata con il rapporto
incrementale
10
xi
f(x)=exp(x), x=1--------->e= 2.71828182845905
h=
1.e-01
1.e-02
1.e-03
1.e-04
1.e-05
1.e-06
1.e-07
1.e-08
errore relativo=
5.1709e-02
5.0167e-03
5.0017e-04
5.0002e-05
5.0000e-06
4.9994e-07
5.1484e-08
2.4290e-09
1.e-09
1.e-10
1.e-11
1.e-12
1.e-13
1.e-14
1.e-15
1.e-16
7.9257e-08
5.6937e-07
1.2005e-05
1.5904e-04
1.6770e-04
3.4351e-03
1.4360e-01
1.0000e+00
Matlab 4.2c eps =
2.220446049250313e-16
11
Numeri "Floating Point" o di Macchina.
L’insieme dei numeri di macchina F (i.e. l’insieme dei
numeri reali rappresentati esattamente sul calcolatore) e’
caratterizzato dagli interi
B = base di rappresentazione
t = numero cifre della mantissa
L, U = limitazioni per l’esponente
e contiene, oltre x=0, tutti i numeri reali x rappresentabili
come
d1
x=± ( B
d2
+ 2
B
dt
+....+ t
B
)Bp
dove
0≤ di ≤ B-1, i=1,...,t, d1≠ 0
-L≤p≤U.
(d1d2...dt) e' la mantissa
p e' l'esponente
c=p+L e' la caratteristica
Tale rappresentazione si dice normalizzata, perche' la
cifra piu' significativa d1≠0, per x≠0 (nei sistemi binari,
i.e. B=2, non e' necessario memorizzare d1).
Tale rappresentazione e' unica.
Proprieta' dell'insieme dei numeri di macchina F
L'insieme F e' finito: la sua cardinalita' e'
1+2(B-1)Bt-1(U+L+1)
12
Il piu' piccolo numero positivo normalizzato di F e'
realmin = B-L-1
Il piu' grande numero positivo normalizzato di e'
realmax=BU (1-B1-t)
I numeri di macchina non sono uniformemente distribuiti,
sono equispaziati solo tra due potenze successive di B.
Esercizio: Descrivere l'insieme dei numeri di macchina F
con B=2, t=3, L=2, U=1.
13
Numeri denormalizzati
L'insieme dei numeri di macchina F puo' essere esteso
includendo i numeri denormalizzati, che sono i numeri
reali con la significativa principale d1= 0 e con l'
esponente p=-L.
Tali numeri sono distribuiti tra B-L-1 e lo zero e sono
equispaziati (spaziatura pari a B-L-t)
Tali numeri permettono un underflow graduale ma la
precisione nell'approssimazione e' inferiore.
E s e r c i z i o : Descrivere l'insieme dei numeri di
denormalizzati con B=2, t=3, L=2, U=1.
14
Approssimazione dei numeri reali
Solitamente i calcolatori lavorano in una base B≠10 e
pertanto anche un numero che e’ rappresentabile con un
numero finito di cifre decimali, puo' richiedere un numero
infinito di cifre in base B.
Esempio x=(0.1)10=(0.0001100110011...)2
Esercizio: implementare in Matlab un algoritmo che
converta un numero decimale in base B.
Se un numero reale x non e' un numero di macchina, sara'
approssimato da un numero “floating point” fl(x) di F
secondo una delle seguenti strategie
Troncamento: la rappresentazione della mantissa viene
troncata dopo la t-esima cifra.
E s e m p i o : B=10, t=3: fl(0.1234567)=0.123;
fl(0.9876543)=0.987, fl(0.1235)=0.123.
Arrotondamento ("rounding"): il numero fl(x) e' il
numero di macchina piu' vicino a x. Quando x e'
equidistante da due numeri di macchina, fl(x) puo' essere
scelto con diverse ci possono essere diverse tecniche tra
cui
"round away from zero": fl(x) e' il numero piu' grande
"round to even" fl(x) e' il numero con la cifra dt pari.
Esempio: B=10, t=3:
fl(0.1234567)=0.123 e fl(0.9876543)=0.988;
fl(0.1245)=0.125 (away from zero);
fl(0.1245)=0.124 (to even)
Precisione di macchina u
15
L' applicazione x ------>fl(x) dara' errore overflow se
|fl(x)|>max{|y|, y in F}, errore di underflow se 0< |fl(x)|
<min{ |y|, y in F\{0}}.
Ogni numero releale x nel range di F sara' approssimato
da fl(x) con un errore relativo (errore di arrotandamento)
maggiorato dalla precisione di macchina u
ex=
|fl(x)-x|
|x|
≤u
dove
u= B1-t con il troncamento
1
u= 2
B1-t con l' arrotondamemto
Esempio: standard IEEE doppia precisione.
16
Esempio: Matlab esegue tutti i suoi calcoli in doppia
precisione secondo lo standard IEEE. La funzione logica
‘isieee’ ritorna il valore 1 (‘vero’) se sta usando
l’aritmetica IEEE e ) (‘falso”) in caso contrario. La
funzione ‘computer’ ci segnala su quale tipo di macchima
Matlab sta lavorando.
»isieee
ans = 1
»computer
ans = MAC2
La funzione ‘eps’ ci fornisce la distanza da 1.0 al
successivo numero floating point ed e’ uguale al doppio
della precisione di macchina.
»eps
eps = 2.2204e-16
Le funzioni ‘realmax’ e ‘realmin’ forniscono
rispettivamente i numeri realmax e realmin
»realmax
ans = 1.7977e+308
»realmin
ans=2.2251e-308
Se il risultato di una computazione e’ piu’ grande di
realmax si ha un overflow e si ottiene infinito
»realmax*2
ans = ∞
Se il risultato di una computazione e’ piu’ piccolo di
realmin si ha un numero denormalizzato o underflow a
zero se e’ piu’ piccolo di eps*realmin (piu’ piccolo
numero denormalizzato)
»realmin*eps
ans =4.9407e-324
17
»realmin*eps/2
ans = 0
I risultati di operazioni non matematicamente definite
producono un NaN
»0/0
Warning: Divide by zero
ans = NaN
»Inf/Inf
ans = NaN
»Inf-Inf
ans = NaN
»0*NaN
ans = NaN
Con il comando ‘format hex’, i numeri binari floating
point sono rappresentati nel formato esadecimale
»format hex
»eps
eps = 3cb0000000000000
»realmax
ans =7fefffffffffffff
»realmin
ans = 0010000000000000
»2*realmax
ans =7ff0000000000000
18
Aritmetica di macchina
Le operazioni elementari (op= +,/,*,-) che operano su
numeri di macchina non e' detto diano come risultato
esatto un numero di macchina. Di qui la necessita' di
definire delle operazioni di macchina (che indicheremo
con flop).
E s e m p i o : B=10, t=3 x=0.123*101, y=0.123*101=0.00123*101. Allora x+y=0.12423*101 non e' un
numero di macchina e deve essere arrotondato x fl(+)
y=0.124*101. Osserva che le ultime due cifre di y non
hanno effetto sul risultato.
Prendiamo come modello di aritmetica di macchina il
seguente:
Supponiamo che tutte le operazioni aritmetiche elementari
(op= +,/,*,-) siano calcolate con infinite cifre e che poi il
risultato sia arrotondato, in modo tale che sia soddisfatta
| (x flop y)-(x op y)|
errop =
|x opy|
≤ u ,op= +,/,*,-
Esempio: per l'addizione e la sottrazione, bisognera'
shiftare la matissa del numero con esponente piu' piccolo
per rendere gli esponenti dei due addendi uguali. Poi
dovro' sommare le mantisse ed arrontondare e
normalizzare se necessario il risultato. Questo piu' essere
molto costoso se gli operandi sono molto diversi in
dimensione, perche' richiederebbe l'uso di registri lunghi.
In pratica viene usato un registro di lunghezza t+2 cifre.
L'aritmetica di macchina non soddisfa tutte le proprieta'
dell'aritmentica esatta:
19
E s e m p i o : B=10, t=3 x=0.123*102, y=0.123*101=0.000123*102. Allora x+y=0.123123*102 e x fl(+)
y=0.123*102. Osserva che y >0 non ha effetto sul
risultato.
NON sono valide le proprieta' associativa della somma e
del prodotto, la proprieta' distributiva della somma
rispetto al prodotto, la legge di cancellazione.
Esempio: B=10, t=3, x=0.559, y=0.555, z=0.4*10-2 ----->
(x fl(+) y)fl(+) z= 0.111*101fl(+) 0.0004*101= 0.111*101;
x fl(+) (y fl(+) z)=0.559 fl(+) 0.559= 0.112*101 che e' il
risultato esatto arrotondato.
Algoritmi matematicamente equivalenti non lo sono
numericamente.
Esempio :(1+e)+e=1 ma 1 +(e+e) >1
dove e e' un numero di macchina positivo leggermente
piu' piccolo di u.
Esercizio: Verificare che non vale la proprieta'
associativa del prodotto nel seguente caso: B=10, t=5,
x=0.80001*101, y=0.12508*101, z=.80008*101.
Esercizio: Verificare che non vale la proprieta'
distributiva del prodotto rispetto alla somma nel seguente
caso: B=10, t=5, x=-0.6*101, y=0.60003*101, z=0.2*102.
20
Analisi dell'errore
Supponiamo di calcolare il valore di una funzione reale f
in un dato punto x.
x input -------->y=f(x) output
Sia g la funzione che rappresenta l'algoritmo scelto per
approssimare la funzione f in aritmetica esatta e sia infine
~
g
la funzione effettivamente calcolata in aritmetica
di macchina.
A causa degli errori di misurazione o di rappresentazione
del numero reale x sul calcolatore, sara' usato in input un
valore approssimato ~
x .
In prima approssimazione risulta
~)
f(x) - ~
g (x
errore totale=
f(x)
~)
f(x) - f(x
~)
f(x
~) - g(x
~)
f(x
+
~)
g(x
=
+
~) - ~
~)
g(x
g (x
~
~)
g (x
L' accuratezza del risultato e' misurata rispetto all'errore
totale e dipende da tutte le componenti d'errore.
21
Errore inerente
La scelta dell'algoritmo non ha effetto sull'errore dovuto
a dati inesatti, che e' quindi legato al problema assegnato
e si definisce errore inerente.
Il problema si dice ben-condizionato se non e' sensibile
alle perturbazioni introdotte sui dati, cioe' se un errore
dato nel valore di ingresso causa un errore "misurato"
nella risposta.
Il problema si dice mal-condizionato se un cambiamento
anche piccolo nei dati di ingresso puo' dare un grande
cambiamento nella risposta.
Come "misurare" il condizionamento del problema?
cond=
|errore relativo nella risposta|
|errore relativo nel dato|
~)|/|f(x)|
|f(x) - f(x
=
|x - ~
x |/|x|
Se cond >> 1 il problema sara' malcondizionato.
22
Se la funzione f e' sviluppabile con Taylor
~
f(x
~
)=f(x) + f'(x)(x
~
-x) + O((x
-x)2),
si ottiene, in prima approssimazione,
x f'(x)
cond =| f(x)
|.
Esempio: Per la funzione f(x)=cos(x) si ottiene
cond =| x tang(x) |
ed il problema e' mal condizionato per x vicino a
Infatti
cos (1.57079)=
6.32679489e-06
cos (1.57078)=
1.632679489e-05
p
2
.
err(x)=6.36e-06 --------> err(f(x))=1.58
Osserviamo che il mal-condizionamento dipende dal dato
di ingresso x.
Esercizio: calcolare il condizionamento delle funzioni
sqrt(x), exp(x), tang(x).
23
Consideriamo ora il problema del condizionamento del
calcolo di una funzione F vettoriale a valori reali.
Usando Taylor si trova in prima approssimazione
~
F(x
n
~ -x )
xi ∂
(x
i i
)=F(x) + Â ( F(x) ∂x F(x)) x
i
i
i=1
Esempio: Somma di n numeri
n
F(x1, x2,....,xn)= Â
i=1
xi
cond_i = x1+...+xn
xi
, i=1,2,...,n
(commenti caso n=2)
Esempio: Prodotto di n numeri
n
F(x1, x2,....,xn)= ’
i=1
xi
cond_i = 1 , i=1,2,...,n
Esercizio: Calcolare il condizionamento del quoziente di
due numeri.
24
Esempio : Sistema lineare Ax=b
Consideriamo il sistema lineare definito dai dati
A=
0.7800
0.4570
b=
0.5630
0.3300
0.2170
0.1270
La soluzione esatta e'
x=
1.0000
-1.0000
Perturbiamo l'elemento a(1,1) della matrice introducendo
un errore relativo Err=(0.7810-0.7800)/0.7800=1.2821e-03.
A1 =
0.7810
0.4570
0.5630
0.3300
La soluzione del sistema perturbato e'
x1 =
0.2483
0.0410
con un errore pari a
norm(x-x1,inf)=
>>ans =
1.0410.
Esempio: Zeri di polinomio
Vogliamo studiare come variano gli zeri del polinomio
25
p(x)=(x-1)(x-2).....(x-20)=
x20- 210 x19+.....
perturbando il coefficiente a=210 del monomio x19 come
segue
210+2-23
con un errrore relativo pari Err(a)=5.686e-10.
Zeri del polinomio perturbato:
1.00000 0000
2.00000 0000
3.00000 0000
4.00000 0000
4.99999 9999
10.09526 6145 ± i 0.64350 0904
11.79363 3881 ± i 1.65323 9728
13.99235 8137 ± i 2.51883 0070
16.73073 7466 ± i 2.81262 4894
19.502439400 ± i 1.94033 0347
6.00000 6944
6.99969 7234
8.00726 7603
8.91725 0249.
20. 84690 8101
Siano Fi(a)=xi(a) le funzioni che forniscono la i-esima
radice del polinomio in corrispondenza del valore a del
coefficiente, cioe' p(xi(a),a)=0, i=1,2,...,20. Il
condizionamento della i-esima radice e' misurato da
Fi'(a)
a F (a)
i
dove
∂p
-∂ a
Fi'(a)= ∂ p
∂x
|x=i=
x19
20
20
 ’
|x=i
(x-k)
j=1 k=1;k≠j
pertanto il condizionamento varia con gli zeri come
risulta dalla tabella:
26
Radice
1
2
3
4
5
6
7
8
9
10
F i'(a)
-8.2 (-18)ß
8,2 (-11)
-1.6 (-6)
2.2 (-3)
-6.1 (-1)
5.8 (+1)
-2,5(+3)
6.0 (+4)
-8.3 (+5)
7.6 (+6)
Radice
11
12
13
14
15
16
17
18
19
20
27
F i'(a)
-4.6(+7)
2.9 (+8)
-6.1(+8)
1.3 (+9)
-2.1(+9)
2.4(+9)
-1.9(+9)
1.0(+9)
-3.1(+8)
4.3 (+7)
Errore analitico o di troncamento
E' l'errore che misura la differenza tra il risultato esatto e
quello fornito dall'algoritmo che usa gli stessi dati di input
e opera in aritmetica esatta.
*E' l'errore dovuto all'approssimazione di una serie
infinita con una serie troncata
Esempio: Approssimazione di
inf
1
f(x)= exp(x)= Â i!
i=1
xi
con troncamento serie
N
1
gN(x)=exp(x)= Â i!
i=1
xi .
Per x=1 si ottiene una stima del numero e=exp(1) con
gN(1) con un errore
exp(a)
|e-gN(1)| = (N+1)!
e
< (N+1)!
dove 0<a<1.
*E' errore dovuto all'interruzione di un processo iterativo
prima della convergenza
28
Esempio: L' approssimazione della derivata f'(x) con il
rapporto incrementale
rh(x) =
f(x+h)-f(x)
h
porta all'errore
|f'(x)-rh(x)| <
|f''(a) h|
2
dove x<a<x+h. Per f(x)=exp(x) si ottiene in x=1
|e-rh(1)| <
exp(a) h
2
dove 1<a<1+h, h>0.
29
Errore algoritmico
L'errore algoritmico nasce dalla differenza tra il risultato
fornito da un algoritmo che usa l'aritmetica esatta e il
risultato prodotto dallo stesso algortimo usando aritmetica
di macchina.
Legato a questo errore c'e' il concetto di stabilita' di un
algoritmo.
Un algoritmo e' stabile se e' insensibile alle perturbazioni
dovute alle approssimazioni introdotte dalle operazioni di
macchina durante le computazioni.
La stabilita' dell'algoritmo non garantisce l'accuratezza del
risultato.
L'accuratezza dipende sia dal condizionamento del
problema sia dalla stabilita' dell'algoritmo.
Un risultato non accurato puo' risultare sia
dall'applicazione di un algoritmo instabile ad un problema
ben-condizionato sia dall'applicazione di in algoritmo
stabile ad un problema malcondizionato.
Le ricette per migliorare sono diverse: scegliere un
algoritmo piu' stabile nel primo caso, riformulare
matematicamente il problema nel secondo caso
sqrt(2)-1
Esercizio: Per calcolare y=(sqrt(2)+1
)3 si possono
considerare diverse espressioni matematicamnte
equivalenti
y = (sqrt(2)-1)6 = (3-2sqrt(2))3 =
1
(5sqrt(2)-7)2 = (sqrt(2)+1)6
= 99-70sqrt(2)
30
Indicare quale delle formulazioni risulta essere quella con
il migliore e peggiore numero di condizionamento.
Analisi dell'errore all'indietro.
Per analizzare l'errore algoritmico abbiamo a disposizione
i grafi computazionali nei casi semplici o l' analisi all'
indietro di J.H. Wilkinson (1919-1986).
L'idea e' di interpretare la soluzione approssimata fornita
dall'algoritmo con dati di macchina come soluzione esatta
di un problema perturbato.
La soluzione approssimata sara' "buona" se e' la soluzione
esatta di un problema "vicino" all'originale.
x------->f(x)
errore
errore
all'indietro
in avanti
~
~(x) =f(x
~ )
x ------>g
Esempio: La somma di due numeri di macchina x, y con
l'operazione di macchina puo' essere riscritta come segue
xo+
~
y= (x+y) (1+e) = x(1+e)+y(1+e)=x
~
+y
con |e|<u.
Esempio: Approssimiamo exp(x) con g4(x) con x numero
di macchina. Per analizzare l'errore all'indietro dobbiamo
~
calcolare ~
x
tale che exp(x
)=g (x) ovvero ~
x
4
=log(g4(x)).
Per x=1 si ottengono i valori
exp(1)=2.71828182845905, g4(1)=2.66666666666667 e
~
x =log(g (1))=0.98082925301173,
4
31
errore in avanti=0.05161516179238/exp(1)= 1.8988e-02
errore all'indietro=1.9171e-02
Cancellazione
La sottrazione di due numeri approssimati (a causa di
errori di arrotondamento o di altri errori precedenti) aventi
lo stesso segno e modulo quasi uguale e' causa di
risposta non accurata.
Esempio: I risultati non accurati dell'algoritmo di
Archimede, del rapporto incrementale, e dell'
approssimazione dell'esponenziale per x<0 sono dovuti
alla cancellazione.
Esempio (radici di equazioni di secondo grado): Le
soluzioni dell'equazione di secondo grado
ax2+bx+c=0
sono date da
-b±sqrt(b2-4ac)
x1,2=
2a
L'uso di questa formula puo' essere causa di cancellazione
quando sqrt(b2-4ac) e' circa uguale a |b|. Puo' essere
evitata calcolando la radice x1 che non da' problemi di
cancellazione e calcolando x2 con la formula
c
x2=ax
1
.
La cancellazione sotto la radice non puo' essere evitata
senza l'uso di una precisione piu' alta.
32
Esempio (deviazione standard): La media m di n numeri
x1,...,xn, e' data da
1
m=n
n
Â
xi
i=1
e la deviazione standard s e' data da
1
s=(n-1
n
2))1/2
 (xi-m)
i=1
Spesso viene usata la seguente formula matematicamente
equivalente per evitare due passaggi ai dati
1 n
s=n-1( Â (xi2-m2n))
1/2
i=1
Gli errori di cancellazione in questa seconda formulazione
possono essere piu' disastrosi che nella prima, perche' si
sottraggono due quantita' positive.
Un algoritmo numericamente stabile per calcolare la
devizione standard e' il seguente:
Per le seguenti quantita'
1
mk=k
k
Â
xi, k=1,...,n
i=1
k
qk= Â (xi-mk2k)
i=1
valgono le relazioni ricorsive
33
, k=1,...,n
xk-mk-1
m1=x1, mk=mk-1+ k
(k-1)(xk-mk-1)2
q1=0, qk=qk-1+
k
,
k=2,...,n,
,
k=2,...,n,
da cui si ricava
qn
s=(n-1
)1/2.
Esempio: La valutazione dell'espressione
ex-1
f= x
presenta il fenomeno della cancellazione per valori di x
prossimi a zero. Nella tabella che segue sono forniti i
risultati calcolati con i due algoritmi
Algoritmo 1:
if x=0 then
f=1
else
f=(exp(x)-1)/x
end
Algoritmo 2:
y=log(x)
if y=1 then
g=1
else
g=(y-1)/log(y)
end
34
x
1.e-05
1.e-06
1.e-07
1.e-08
1.e-09
1.e-10
1.e-11
1.e-12
1.e-13
1.e-14
1.e-15
1.e-16
f
1.000005000006965e+00
1.000000499962183e+00
1.000000049433680e+00
9.999999939225288e-01
1.000000082740371e+00
1.000000082740371e+00
1.000000082740371e+00
1.000088900582341e+00
9.992007221626408e-01
9.992007221626408e-01
1.110223024625157e+00
0
g
1.000005000016667e+00
1.000000500000167e+00
1.000000050000002e+00
1.000000005000000e+00
1.000000000500000e+00
1.000000000050000e+00
1.000000000005000e+00
1.000000000000500e+00
1.000000000000050e+00
1.000000000000005e+00
1.000000000000000e+00
1
Matlab 4.2
Esercizio: il computer sa contare fino a sei?
Spiega i seguenti risultati forniti dal Matlab.
»2-1
ans =
1
»(1/cos(100*pi+pi/4))^2
ans =
2.00000000000011
»3*cos(acos(10000))/10000
ans =
2.99999997414701
»s=4;for i=1:53 s=sqrt(s); end, for i=1:53 s=s^2; end
»s
s=
1
»5*((1+exp(-100))-1)/((1+exp(-100))-1)
ans =
NaN
»log(exp(6000))/1000
ans =
∞
35
BIBLIOGRAFIA
1. R. BEVILACQUA, D. BINI, M. CAPOVANI, O. M ENCHI; Introduzione alla matematica
computazionale, Zanichelli, 1987.
2. V. COMINCIOLI: Analisi Numerica. McGraw-Hill Libri Italia, 1990.
3. N. J. HIGHAM, The accuracy of floating point summation, SIAM J. Sci. Comput. 14
('93), 783-799.
4.
G. MONEGATO, Fondamenti di calcolo numerico, Levrotto e Bella, 1990.
5.
G. W. STEWART, Afternotes on Numerical Analysis, Siam, 1993.
36
OSSERVAZIONI CONCLUSIVE
L'analisi degli errori di arrotondamento e della aritmetica di
macchina e' stato un importante argomento dell'analisi
numerica agli inizi, perche' ha posto l'attenzione e definito
importanti concetti quali la stabilita' di algoritmi e il
condizionamento del problema. Tuttuvia questo argomento,
pur rimanendo fondamentale, riguarda solo una piccola parte
dell'analisi numerica perche' la sua anima sta nello sviluppo
ed analisi di algoritmi veloci. La velocita' degli strumenti di
calcolo attuali ha reso evidente il fatto che anche se esiste un
algoritmo finito, uno infinito puo' essere una scelta migliore
(per esempio nella risoluzione di sistemi linearidi grande
dimensione con matrice poco sparsa, si usano principalmente
le tecniche iterative con precondizionamento). Il principio
che attualmente guida la ricrca in diversi settori dell’analisi
numerica puo’ essere riassunto brevemente come segue: ”e'
meglio risolvere un problema approssimativamente e poi
iterare raffinando le soluzione”.
37