Professional Documents
Culture Documents
Introduzione
Lanalisi numerica (calcolo numerico, matematica computazionale,. . . ) `e la disciplina che consente di risolvere in modo approssimato, generalmente mediante lutilizzo di un computer, un
qualunque problema matematico.
Da un punto di vista formale le fasi principali che consentono di passare da un problema reale
alla sua risoluzione pu`o essere schematizzato come segue:
Fasi per la risoluzione di un problema reale
1. Modello matematico continuo: F (x, y) = 0.
2. Modello matematico discreto, approssimazione del modello continuo: FN (xN , yN ) = 0.
3. Individuazione di un algoritmo eciente di risoluzione.
4. Implementazione su un calcolatore.
5. Interpretazione ed analisi dei risultati.
dove F (x, y) = 0 indica il problema matematico continuo, y indica il dato e x indica la soluzione,
FN (xN , yN ) = 0 indica il problema matematico discreto, yN indica il dato, xN indica la soluzione
ed N `e il parametro di discretizzazione. Il problema (continuo o discreto) F (x, y) = 0 `e detto
ben posto (o stabile) se ammette unica soluzione e se tale soluzione dipende in modo continuo
dai dati, cio`e se a piccole perturbazioni dei dati corrispondono piccole perturbazioni dei risultati.
Il problema discreto FN (xN , yN ) = 0 `e detto convergente se xN x quando N .
In ognuna delle fasi sopra si commettono degli errori, nei capitoli successivi, noi analizzeremo in
particolare gli errori che vengono commessi nelle fasi 2-5. Nella fase 3. per algoritmo eciente si
intende un algoritmo che non propaghi violentemente gli errori commessi ma anche un algoritmo
che permetta di risolvere il problema in tempi ragionevoli.
Si noti che, in alcuni casi si pu`o saltare la fase 1. e quindi passare direttamente dal problema
reale al modello matematico discreto.
Diamo di seguito, prima un esempio di risoluzione di un problema reale attraverso le fasi
schematizzate sopra e poi unaltra risoluzione dello stesso problema reale utilizzando uno schema
risolutivo dove la fase 1. viene saltata.
Esempio 1.1 In questo esempio si vuole risolvere il problema della propagazione di una epidemia
1. Modello matematico continuo: Modello S.I.R. di Kecmack Mekendrick (1927).
Siano T R, T > 0, il tempo di osservazione dellepidemia, t [0, T ] la variabile tempo,
S il numero dei suscettibili, cio`e il numero degli individui che si possono ammalare, I
il numero degli infetti, cio`e il numero degli individui che sono ammalati e sono fonte a
loro volta di infezioni, R il numero dei rimossi, cio`e il numero degli individui che si sono
ammalati e sono guariti (o deceduti) diventando cos` immuni. Allora, t [0, T ], S, I
e R devono soddisfare S(t) + I(t) + R(t) = N , dove N `e il numero dei soggetti sotto
osservazione, e
dS(t)
= r S(t) I(t),
S(0) = S,
dt
dI(t)
dt
dR(t)
dt
= a I(t),
R(0) = R,
1
(1)
.
dx
x
(2)
n = 0, 1, 2, . . . nmax .
Indichiamo con
Sn = S(tn ), In = I(tn ), Rn = R(tn ),
dalla (2) si ha
n = 0, 1, 2, . . . nmax ,
dS(tn )
S(tn + t) S(tn )
Sn+1 Sn
=
.
dt
t
t
(3)
0 n nmax 1,
nmax = 140,
r = 0.0035,
a = 0.5,
S = 783,
I = 1,
R=0
800
700
600
500
400
300
200
100
0
20
40
60
80
100
120
140
nmax = 140,
L = 30,
Pim = 0.04,
Pcon = 0.1,
s0 = 783,
i0 = 1,
r0 = 0
800
700
600
500
400
300
200
100
0
20
40
60
80
100
120
140
Errori
Diamo prima alcune denizioni elementari. Se indichiamo con xT il valore esatto e con xA il
valore approssimato di un numero (grandezza) possiamo dare le seguenti denizioni
Errore: E = xA xT ;
Errore assoluto: EA = |xA xT |;
Errore realtivo: Er =
EA
;
|xT |
E
xT
Possiamo osservare che il calcolo di Er quando xT `e prossimo allo zero `e molto complicato e
che in generale il valore vero xT non si conosce. Pertanto lerrore relativo viene approssimato
nel seguente modo
EA
Er
.
|xA |
Per come abbiamo denito EA si potrebbe obiettare che anche questo non lo possiamo calcolare
se non conosciamo xT . Tuttavia nella realt`a si conosce proprio EA indipendentemente da xT .
Pensiamo infatti ad una serie di n misurazioni Xi , i = 1, 2, . . . n, eettuate per stimare una
certa grandezza X (ad esempio la profondit`a h di un pozzo utilizzando il tempo t di caduta di
un sasso lasciato cadere dal bordo del pozzo `e data da h gt2 /2 dove g `e laccelerazione di
gravit`a), allora si ha
(
)
EA =
1in
1in
(2)
(1)
Definizione 2.4 Gli errori di troncamento si commettono quando, nelle fasi di risoluzione
di un problema, si passa dal modello continuo al modello discreto. Ossia quando un problema
la cui risoluzione comporta eettuare un numero innito di operazioni viene risolto con un
numero nito di operazioni.
Ad esempio, si commette un errore di troncamento ogni volta che si ha un procedimento che
comporta la stima di un limite come nel calcolo della derivata in un punto, nel calcolo
di un
integrale denito etc. Come esempio consideriamo il calcolo della somma S della serie k=0 dk .
Se indichiamo con SN = N
SN . Se
k=0 dk la somma sei primi N + 1 termini allora S = limN
approssimiamo S con SN commettiamo un errore di troncamento Etr = S SN =
k=N +1 dk .
Definizione 2.5 Data una funzione f : [a, b] R, y = f (x), dato x lerrore sulla variabile indipendente si denisce errore di propagazione f = f (x + x) f (x), cio`e lerrore
commesso sulla variabile dipendente.
Utilizzando la (2) si pu`o dunque dire che se x `e piccolo possiamo approssimare lerrore di
propagazione nel seguente modo
f = f (x + x) f (x) f (x)x.
(4)
f
xk ,
f = f (x1 + x1 , . . . , xn + xn ) f (x1 , . . . , xn )
xk
k=1
dove
f
xk
(5)
x xy
2 ,
y
y
b b2 4ac
x1,2 =
2a
essendo x1 e x2 funzioni continue rispetto alle variabili a, b e c allora la soluzione dipende con
continuit`a dal dato.
Dunque abbiamo detto che se un problema `e matematicamente stabile e y 0 allora anche
x 0. Tuttavia poiche non sempre `e possibile mandare a zero la perturbazione o errore sul
dato `e interessante capire come tende a zero la perturbazione sulla soluzione quando tende a
zero la perturbazione sul dato. Nel senso che non vogliamo che a piccole perturbazione sul dato
possano corrispondere grandi perturbazione sulla soluzione.
Definizione 2.8 Un generico problema matematico F (x, y) = 0 `e detto numericamente stabile se a piccole perturbazione sul dato y corrispondono piccole perturbazione sulla soluzione
x, se questo non accade il problema `e detto malcondizionato.
Il grado di buon o mal condizionamento numerico di un problema `e stabilito dal numero di
condizionato
K = max
y
||x||/||x||
,
||y||/||y||
||x||/||x||
y0 ||y||/||y||
K = lim
(6)
(7)
a > 0,
dove il dato `e y.
Perturbando y con y si ha x + x = ay+y e dunque
x
ay+y ay
=
= ay 1,
x
ay
y
a 1
|x/x|
= |y ln(a)| ,
K = lim
= lim y
y0 |y/y|
y0
y
e dunque se a `e vicino a zero oppure se y `e molto grande il numero di condizionamento K `e
grande e dunque il problema `e mal condizionato.
Un altro modo per vedere che il problema `e mal condizionato `e quello di calcolare lerrore
relativo di f (y) = ay
Er (f ) =
|f (y)y|
ay | ln(a)y|
|f |
=
= |y ln(a)| Er (y),
|f |
f
ay
e dunque anche se lerrore sul dato Er (y) `e piccolo lerrore sulla soluzione Er (f ) `e grande se a
`e vicino a zero oppure se y `e molto grande.
Esempio 2.11 (Instabilit`a dellalgoritmo o del metodo) Calcolare
1
I=
x30 ex1 dx.
0
Poiche per n 1
1
n x1
x e
dx =
xn ex1 |10
1
n1 x1
dx = 1 n
Se indichiamo con
xn ex1 dx,
an =
(8)
si ha che
an = 1 nan1 ,
n 1,
a0 =
0
1
ex1 dx = ex1 |10 = 1 ,
e
dalla (8) possiamo calcolare a1 conoscendo a0 e quindi a2 conoscendo a1 no ad a30 . Inplementando tale algoritmo con il Matlab su di un computer in duplice precisione si ottiene che
a30 = 3.2968 1015 , mentre I 0.0344828, dunque questo algoritmo `e instabile. In genere
gli algoritmi di ricorsione sono instabili.
9
Un generico numero reale z R nel sistema numerico decimale ha la seguente rappresentazione posizionale
z = an an1 . . . a1 a0 .a1 a2 . . . ,
(9)
z=
ak 10k
k=
si noti che se z ha un numero nito m N di cifre dopo il punto lespressione sopra diventa
z=
ak 10k ,
k=m
e si dice che z ha una rappresentazione posizionale finita. Oltre alla rappresentazione (9)
si pu`o prendere in esame anche la rappresentazione posizionale normalizzata
z = (.b1 b2 . . . bt . . . ) 10p ,
(10)
bk 10pk
(11)
k=1
bk 10pk ,
(12)
k=1
(13)
3.1
Cambio di base
ak k .
k=
Ad esempio
101.111=2 =
=
23.32=4 =
=
1 22 + 0 21 + 1 20 + 1 21 + 1 22 + 1 23
4 + 1 + 0.5 + 0.25 + 0.125 = 5.875=10
2 41 + 3 40 + 3 41 + 2 42
8 + 3 + 3 0.25 + 0.125 = 11.875=10 .
Ovviamente si pu`o fare anche il procedimento inverso, cio`e passare da un numero in base 10
alla sua rappresenzazione in base .
Se z N `e un numero intero positivo la sua rappresentazione in base si ottiene tramite
lalgoritmo delle suddivisioni successive. Detto b0 = z, per ogni i = 0, 1, 2, . . . , n, deniamo qi
e ri rispettivamente il quoziente ed il resto della divisione di bi per (bi = qi + ri ), e se qi = 0
poniamo bi+1 = qi altrimenti n = i, allora in base si ha
z = rn rn1 . . . r0 .
Ad esempio la rappresentazione di 18 nelle basi = 2, 4 si ottiene nel seguente modo
=2
n bn qn rn
0 18 9 0
1 9 4 1
2 4 2 0
3 2 1 0
4 1 0 1
18=10 = 10010=2
=4
(14)
n bn qn rn
0 18 4 2
1 4 1 0
2 1 0 1
(15)
18=10 = 102=4
(16)
=4
n bn in fn
1 .25 1 0
.25=10 = .1=4
11
(17)
(18)
(19)
Si noti che un numero avente una quantit`a nita di cifre in una base pu`o avere innite cifre in
unaltra base. Ad esempio 5.2=6 = 5 60 + 2 61 = 5.3=10 mentre
=2
n bn in
1 .8 1
2 .6 1
3 .2 0
4 .4 0
5 .8 1
=4
fn
.6
.2
.4
.8
.6
n
1
2
3
.8=10 = .1100=2
bn in
.8 3
.2 0
.8 3
(20)
fn
.2
.8
.2
.8=10 = .30=4
(21)
(22)
Ogni numero reale z R si pu`o scrivere come z = (I(z) + F (z)) con I(z) Z, I(z) 0, la
sua parte intera e F (z) R, 0 F (z) < 1 la sua parte frazionaria e dunque
z = (I(z) + F (z) ).
Ad esempio 18.25=10 = 10010.01=2 , 18.25=10 = 102.1=4 , 18.8=10 = 10010.1100=2 ,
16.8=10 = 100.30=4 .
3.2
Dato x Z, nella rappresentazione in modulo e segno di x su k bit (RMSk x), un bit `e riservato
al segno ( 0 corrisponde al segno + mentre 1 corrisponde al segno ) ed i restanti k 1 bit
sono per la rappresentazione in binario del valore assoluto del numero (|x|). In genere il bit
riservato al segno `e il primo bit da sinistra, cio`e il bit MSB (Most Signicant Bit).
Ad esempio se k = 8 si ha
x
2
+5
+0
0
RMS8 x
10000010
00000101
00000000
10000000
RMS8
00000101
10000101
10001010=RMS8 (10)
12
RCU8 x
00000101
11111010
00000000
11111111
Tale rappresentazioni ha gli stessi difetti della rappresentazione in modulo e segno, cio`e:
lo zero ha due rappresentazioni;
non `e possibile utilizzare le usuali regolo di calcolo per eseguire le operazioni, ad esempio
si ha
x
x
x+x
5
5
10
RCU8
11111010
11111010
(1)11110100= RCU8 (11)
Inoltre la rappresentazione in complemento ad uno su k bit ha lo stesso range della rappresentazione in modulo e segno su k bit cio`e [2k1 + 1, 2k1 1].
Infatti, il pi`
u grande numero positivo rappresentabile in complemento ad uno su k bit `e x tale
che RCUk x = 011 . . . 1 =RMSk x (1 ripetuto k 1 volte) e quindi x = 2k1 1.
Il pi`
u piccolo numero negativo rappresentabile in complemento ad uno su k bit `e x tale che
RCUk x = 100 . . . 0 (0 ripetuto k 1 volte) che corrisponde a x = 11 . . . 12 (1 ripetuto k 1
volte) e quindi x = (2k1 1).
13
3.2.3
k2
di 2i dk1 2k1 .
i=0
Ad esempio se k = 8 si ha
x
+15
15
+0
RCD8 x
00001111
11110001
00000000
k1
dk1 2
k1
x=
k2
di 2 dk1 2
i
k1
i=0
k2
di 2
i
i=0
k2
2i = 2k1 1
i=0
k2
di 2 dk1 2
i
k1
02
k1
i=0
k2
i=0
i
k1
i
= 0 dalla 2. dk1 = 0 che implica k2
3. Se x = k2
i=0 di 2 dk1 2
i=0 di 2 = 0 e quindi
di = 0 per ogni i = 0, 1, . . . , k 1.
Definizione 3.12 Si denisce complemento a due di un numero negativo x Z su k bit (CDk x)
come quel valore che sommato al valore assoluto del numero da come risultato 2k , cio`e
CDk x + |x| = 2k
CDk x = 2k |x| .
CDk x = 2 + x = 2 +
k2
di 2 2
i
k1
k1
=2
(2 1) +
k2
i=0
di 2 =
i=0
k1
di 2i
i=0
e dunque
RCDk x = dk1 dk . . . d0 CDk x = (dk1 dk . . . d0 )2
che prova la b), inoltre
RCDk x = (CDk x)2 = (2k |x|)2 = (2k 1 |x| + 1)2 = (2k 1)2 RCDk (x) + 12
dove le ultime operazioni sono fatte in base = 2 e (2k 1)2 RCDk (x) si ottiene da
RCDk (x) scambiando le cifre, e questo dimostra la c) per x < 0, e invertendo RCDk x con
RCDk (x) si prova la c) per x > 0.
Le propriet`a sopra danno due modi diversi per calcolare la rappresentazione in complemento a
due di un numero x Z su k bit.
Ad esempio si ha:
volendo calcolare RCD8 (5), consideriamo CD8 (5) = 28 5 = (100000000 101)2 =
111110112 dunque RCD8 (5) = 11111011 pari alla rappresentazione in binario su 8 bit
di CD8 (5);
volendo calcolare RCD8 (1), consideriamo CD8 (1) = 28 1 = (100000000 1)2 =
111111112 dunque RCD8 (1) = 11111111;
volendo calcolare RCD8 (15) consideriamo RCD8 ((15)) = RCD8 (15) = 00001111
invertendone le cifre si ottiene 11110000 ed aggiungendo 1 si ha 11110000+1 = 11110001 =
RCD8 (15).
Consideriamo il seguente esempio con k = 8:
x
x
x+x
RCD8
65 01000001
65 01000001
130 10000010
x
x
x x
65
65
130
RCD8
10111111
10111111
(1)01111110
il risultato del calcolo nella rappresentazione in complemento a due `e errato come si vede
dal fatto che i due risultati hanno segno opposto a quello che dovrebbero avere. Lerrore `e
dovuto al fatto che il risultato reale `e fuori dal range della rappresentazione [-128,127]. Questo
tipo di errore `e detto errore di overflow e si ha quando il numero di bit a disposizione non `e
` possibile controllare se, sommando
suciente per rappresentare il risultato di una operazione. E
due numeri, c`e stato o meno errore di overow nel seguente modo:
la somma di numeri di segno opposto non genera errori di overfow (infatti il risultato `e
ancora un valore nel range);
se sommando due numeri con lo stesso segno si ottiene un numero di segno opposto allora
si ha errore di overow altrimenti no.
15
Si osservi che a causa della dimensione nita della memoria, non valgono pi`
u le usuali regole
delle operazioni, come ad esempio lassociativa. Infatti se ad esempio A `e vicino al pi`
u grande
numero nel range della rappresentazione allora loperazione (A + A) A dar`a un errore di
overow mentre loperazione A + (A A) dar`a come risultato A.
3.3
Passiamo ora a vedere come possono essere rappresentati i numeri reali su un calcolatore introducendo i numeri oating-point ed i numeri macchina.
3.3.1
Linsieme dei numeri oat `e linsieme di tutti quei numeri reali che hanno una rappresentazione
posizionale normalizzata nita in base con mantissa limitata ed esponente limitato. In particolare, dati , t, L, U Z con > 1, U, t > 0 e L < 0, si denisce linsieme dei numeri
floating-point
F = F(, t, L, U ) = {x R : x =
di i , p, di Z, 0 di 1, d1 = 0, L p U }
i=1
(23)
Allinsieme dei oat F si associa linsieme dei numeri macchina NM che sono dati da
NM (, t, L, U ) = F(, t, L, U ) {0}.
Osservazione 3.13 Linsieme dei oat F(, t, L, U ) ha le seguenti propriet`
a.
1. La cardinalita di F(, t, L, U ) `e 2( 1) t1 (U L + 1).
2. Il pi`
u piccolo numero oat positivo `e L1 .
3. Il pi`
u grande numero oat positivo `e (1 t ) U .
4. I numeri oat sono distribuiti in modo simmetrico rispetto allo zero, i oat che hanno lo
stesso esponente sono ugualmente distanziati, la minima distanza tra due oat consecutivi
(aventi lo stesso segno) `e Lt , la massima distanza tra due oat consecutivi (aventi lo
stesso segno) `e U t ,
Dimostrazione.
1. Il numero dei oat si ottiene moltiplicando il numero di possibili valori che pu`o assumere
un qualunque parametro nella rappresentazione (23) di un oat. In particolare ci sono
due modi per scegliere il segno di un oat, il suo esponente p pu`o essere scelto tra
U L + 1 possibili valori infatti L p U, d1 pu`o essere scelto tra 1 possibili valori
infatti 1 d1 1, le restanti t 1 cifre della mantissa di , i = 2, 3, . . . , t possono
essere scelte tra possibili valori infatti 0 di 1. Dunque la cardinalita di F `e
pari a 2( 1) t1 (U L + 1)
16
2. Il pi`
u piccolo numero oat positivo si ha quando si prende la mantissa e lesponente il
pi`
u piccoli tra le possibili scelte e quindi la sua rappresentazione `e (.10 . . . 0) L , dove
si hanno t 1 cifre pari a 0, e corrisponde al numero L1 .
3. Il pi`
u grande numero oat positivo si ha quando si prende la mantissa e lesponente il pi`
u
grande tra le possibili scelte e quindi la sua rappresentazione `e(.( 1)(
1)
.
.
.
(
1))
se 0 dt+1 < 2
(.d1 d2 . . . dt ) p ,
Fl (x) =
.
ed `e data da
M =
Infatti Fl (1) = (.10 . . . 0) dove si hanno t 1 cifre pari a 0 mentre il oat successivo di 1
`e (.10 . . . 01) dove si hanno t 2 cifre pari a 0. Se Fl `e ottenuto per troncamento allora il
pi`
u piccolo reale 1 + M il cui oat `e il successivo di 1 `e (.10 . . . 010 . . . ) dove il secondo 1 `e
alla posizione t e dunque
M = (.00 . . . 010 . . . ) = 1t .
17
(.10 . . . 0 0 . . . )
2
M = (.00 . . . 0 0 . . . ) = t1+1 .
2
2
Si noti che se t 1 L allora M `e un oat e quindi possiamo anche dire che M `e il pi`
u piccolo
oat tale che Fl (1 + M ) > 1.
3.3.2
|x Fl (x)|
|x|
158 (10011110)2
133 (10000101)2
291
Fl
(.10011110) 28
(.10000101) 28
(1.00100011) 28
(.10010001) 29 = (290)10
nellesempio sopra siamo partiti da due numeri x e y aventi rappresentazioni esatte (Er (x) =
Er (y) = 0) ed abbiamo ottenuto un risultato approssimato, in particolare se indichiamo con
loperazione eseguita dal calcolatore si ha Er (x y) 0.0034.
Lerrore di incolonnamento si commette eseguendo somme e sottrazioni di numeri macchina
con esponente abbastanza diverso, in quanto per poter eseguire loperazione i numeri vanno
incolonnati in modo da avere lo stesso esponente (il pi`
u grande). Ad esempio supponiamo t = 8
e = 2:
18
x
y
x+y
96.5 (1100000.1)2
1.75
(1.11)2
98.25
Fl
(.11000001) 27
(.11100000) 2
(.11000001) 27
(.00000011) 27
(.11000100) 27 = (98)10
nellesempio sopra siamo partiti da due rappresentazioni esatte di x e y (Er (x) = Er (y) = 0) ma
per poterli sommare abbiamo dovuto approssimare y per poterlo riportare allo stesso esponente
di x ottenendo Er (x y) 0.0025.
Lerrore di cancellazione si commette quando si sottraggono numeri macchina con esponenti
vicini. Ad esempio supponiamo t = 8 e = 2:
x
y
xy
15.8
15.5
0.3
(1111.1100 . . . )2
(1111.1)2
(.11111100) 24
(.11111000) 24
(.00000100) 24
(.10000000) 21 = (0.25)10
si noti che lerrore di cancellazione `e nullo se i valori iniziali x e y sono numeri macchina, mentre
nel caso contrario ha come eetto quello di propagare violentemente lerrore infatti nellesempio
sopra Er (x) = 0, Er (y) 0.003 mentre Er (x y) = 0.16.
Osservazione 3.14 Per eetto degli errori sopra elencati, nellinsieme dei numeri macchina
possono non valere propriet`a vere nei numeri reali.
Vediamo ad esempio come non `e pi`
u valida la propriet`a associativa. Ad esempio supponiamo
t = 8 e siano x = 0.75, y = 65.6, z = 64, allora (x y) z = x (y z). Infatti Fl (x) =
(.11000000) 20 , Fl (y) = (.10000011) 27 , Fl (z) = (.10000000) 27 , le rappresentazioni di x
e z sono esatte quella di y `e approssimata.
x
y
xy
xy
z
(x y) z
y
z
yz
x
yz
x (y z)
(.11000000) 20
(.10000011) 27
(.10000100) 27
(.10000000) 27
(.00000100) 27
(.10000011) 27
(.10000000) 27
(.00000011) 27
(.11000000) 20
(.11000000) 2
(.00000001) 27
(.10000011) 27
(.10000100) 27
err. inc.
(.10000000) 22 = (2)10
err. canc.
(.01100000) 2
(.11000000) 2
(1.00100000) 2
(.10010000) 22 = (2.25)10
Come si osserva i due risultati sono dierenti e rispetto al valore vero x + y z = 2.35 il pi`
u
preciso `e x (y z).
19