Libri di Testo: Sito internet: Contatti:

Libri di Testo:
• L. Gori: Calcolo Numerico, (IV Ed.) Ed. Kappa, 1999
• L. Gori, M.L. Lo Cascio: Esercizi di Calcolo Numerico,
(II Ed.) Ed. Kappa, 1999
• A. Quarteroni, F. Saleri: Introduzione al Calcolo Scientifico,
IIIa edizione Springer, 2006
• M.L. Lo Cascio: Fondamenti di Analisi Numerica, McGraw-Hill, 2008
Sito internet:
• http://www.dis.uniroma1.it/~pmn/
Contatti:
Riccardo Broglia
Tel: 06.50299297
[email protected]
Calcolo numerico: generalità
Cosa si intende per calcolo numerico?
Per calcolo numerico si intende quella branca della
matematica che studia e sviluppa modelli e metodi al
fine di risolvere problemi matematici tramite
algoritmi numerici implementati in un calcolatore.
Calcolo numerico: modellizzazione ed errori
Problema Fisico
⇓
Astrazione ed ipotesi semplificative
(
(errori
i inerenti)
i
ti)
Modello Matematico
⇓
Know How, fantasia e arte
(errori di troncamento)
Modello Numerico
⇓
Soluzione Numerica
(errore computazionale)
Algoritmo (stabilità) e computer
(errori di arrotondamento)
La soluzione numerica può essere
accettata se e solo se si ha una stima
degli errori di cui è certamente affetta
Errore computazionale: definizioni
• Errore troncamento: è dovuto alla discretizzazione di un
di un problema matematico (passaggio dal continuo al
discreto).
• Errore arrotondamento: è dovuto alla precisione finita dei
calcolatori,
l l
i cosìì come la
l sua propagazione.
i
• Errore computazionale: è la somma degli errori di
troncamento e di arrotondamento,
arrotondamento argomenti di interesse
fondamentale dell’analisi numerica.
Detta x la soluzione approssimata e x* quella esatta:
ε = x − x*
ε r = ε / x = (x − x ) / x ⎫
⎬
ε r ⋅100 = ε r %
⎭
*
*
Errore assoluto
*
Errore relativo
Errore di arrotondamento: propagazione
Calcolo di una funzione:
Y = f ( x1 , x2 , ... , xn )
Nel caso di funzione di una variabile:
Y − Y = f ( x) − f ( x )
*
*
S il
Sviluppando
d in
i serie
i la
l f(x
f( *) nell’intorno
ll’i t
di x:
(
)
f ( x* ) ≈ f ( x ) + f x ( x ) x* − x + O(Δx 2 ) ε = x − x*
123
Δx = − ε
Sostituendo:
Y − Y * = Δxf x ( x) + O(Δx 2 ) ≤ εf x ( x) = ε f x ( x)
Errore di arrotondamento: propagazione
Formula generale di propagazione degli errori:
ΔY ≤ ε f x (x)
Nel caso di funzione di più variabili:
ΔY ≤ ε1 f x1 ( x1 , ... , xn ) + L + ε n f xn ( x1 , ... , xn )
ε i = xi − xi*
Errore sul dato i-esimo
Esercizio: esprimere l’errore commesso per le operazioni di
somma algebrica (cancellazione numerica), prodotto e
rapporto tra due valori.
valori
Propagazione: esempio
Esempio 1.4.1:
x1 = 0.1234
ε1 ≤ 0.5 ⋅10 −4
x2 = 0.1233
ε 2 ≤ 0.5 ⋅10 − 4
f ( x1 , x2 ) = x1 − x2 = .0001
ε1 + ε 2
−4
10
ΔY
≤
= − 4 = 1 ⇒ ε r = 100%
Y
x1 − x2 10
Propagazione: esempio
Esempio 1.4.2: determinare le radici di x2-2ax+b=0 con a>0
Se a>>b allora: x2 = a − a 2 − b ≈ a − a = 0
Esempio: a=103.25 e b=1.021 eseguendo i calcoli con sette
cifre
if significative:
i ifi i
x2 = 103.25 − 10660.56(25) − 1.021 = 0.005
Verifica: x22 − 2ax2 + b ≈ −0.115 10 −1
Come ovviare?
x1 x2 = b ⇒ x2 =
b
a + a2 − b
=
1.021
≈ 0.00494443
103.25 + 103.245
Verifica: x22 − 2ax2 + b ≈ −0.27 10 −4
Propagazione: esempio
Esempio:
f1 ( x) = ( x − 1)
7
f 2 ( x) = x 7 − 7 x 6 + 21x 5 − 35 x 4 + 35 x 3 − 21x 2 + 7 x − 1
Le due funzioni sono identiche in senso algebrico;
calcolo di f1(x) e di f2(x) per x∈[0.9998,1.0002]:
>>x=linspace(0.9998,1.0002,100)
>> f1=(x-1).^7;
>> f2=x.^7-7*x.^6+21*x.^5-35*x.^4+35*x.^3-21*x.^2+7*x-1;
>> plot(x,f1)
>> plot(x,f2)
l t( f2)
Propagazione: esempio
1.5
x 10
-26
1.5
f1(x)
1
0.5
0
0
-0.5
-0.5
-1
-1
0.9999
1
-14
f2((x))
1
0.5
-1.5
0.9998
x 10
1.0001
1.0002
-1.5
0.9998
0.9999
f1 ( x) = ( x − 1)
7
1
1.0001
1.0002
Propagazione: condizionamento
Consideriamo il calcolo di una funzione y=f(x); e
valutiamo
l i
quale
l è l’effetto
l ff
sull risultato
i l
finale
fi l di una
perturbazione Δx=x-x* del dato di input:
ΔY ≤ Δx f x ( x)
⇒
ΔY
Y
≤ Δx
f x ( x)
f (x
( x)
ΔY
Δx xff x ( x)
Δx
≤
= Cp
Y
x f ( x)
x
Cp: numero di condizionamento del pproblema
Propagazione: condizionamento
ΔY
Δx
≤ Cp
Y
x
xff x ( x)
Cp =
f ( x)
Se Cp è “grande” il problema è mal condizionato, ossia a
ppiccole pperturbazione dei dati iniziali si hanno ggrandi variazioni dei risultati. Viceversa se Cp è “piccolo”, il problema è
ben condizionato.
Il condizionamento non dipende dall’algoritmo usato, dipende dal problema (f(x)) e dai dati di ingresso (x). Un problema
può essere ben condizionato per certi valori di input e mal
condizionato per altri.
Condizionamento: esempio
Esempio 1.5.1:
⎧ y + αz = 1
⎨
⎩αy + z = 0
⇒
2
(α ≠1)
αf ′(α )
2α 2
Cy =
=
f (α )
1−α 2
⎧ y = f (α ) = 1 /(1 − α 2 )
⎨
2
z
=
g
(
α
)
=
−
α
/(
1
−
α
)
⎩
αg ′(α ) 1 + α 2
Cz =
=
g (α )
1−α 2
Il problema del calcolo di y e z è mal condizionato
per valori di α prossimi ad 1.
Condizionamento: esempio
α
y
z
0.5555
1.446299444
-0.803419341
0.803419341
0.5554
1.446067105
-0.803145670
0.9998
2500.25
-2499.75
0.9999
5000.25
-4999.75
|Δα/α|
|Δy/y|
|Δz/z|
1.8 10-4
1.6 10-4
3.4 10-4
1.0 10-44
1.0
1.0
Esercizio: stimare il condizionamento del problema del
calcolo della y e della z nei due casi.
Algoritmo: definizione
Il problema numerico è risolto tramite un algoritmo: ossia
una successione di operazioni logiche e aritmetiche finita e
non ambigua, che consente di ottenere il risultato numerico a
partire dai dati di input.
Oltre alla tendenza del problema a propagare gli errori sui
dati bisogna tenere conto che l’uso di un algoritmo di calcolo
dati,
comporta un errore di approssimazione (troncamento dei dati
numerici), fornendo un dato finale approssimato fa(X):
l’errore totale è esprimibile come:
E f = f a ( X ) − f ( X * ) = f a ( X ) − f ( X ) + f ( X ) − f ( X * ) = Ea + Ed
Ea = f a ( X ) − f ( X )
Ed = f ( X ) − f ( X * )
Errore algoritmico
Errore di propagazione sui dati
Stabilità degli algoritmi: definizione
Stabilità numerica: sensibilità di un algoritmo alla
perturbazione dei dati di input. Un algoritmo è detto
stabile se gli errori assoluti sui dati non sono amplificati durante l’elaborazione. Viceversa, l’algoritmo
è detto instabile.
Stabilità di un algoritmo: esempio
1 1 n x
In = 0
Esempio 1.6.1: I n = ∫0 x e dx I n > 0, lim
n →∞
e
Integrando per parti:
1
1⎛
I n = 1 − nI n −1
I n = ⎜ e − n ∫ x n −1e x dx ⎞⎟ = 1 − nI n −1 =
0
⎠
e⎝
= 1 − n(1 − (n − 1) I n − 2 ) = 1 − n + n(n − 1)(1 − (n − 2) I n −3 ) = L
n −1
= 1 + ∑ (−1) k n(n − 1) L (n − k + 1) + (−1) n n! I 0 Algoritmo
Al it
k =1
1 1 x
1
Con: I o = ∫0 e dx = (e − 1) = 0.63212055882856.....
e
e
Stabilità di un algoritmo: esempio
I 0 = 0.63212055882856 14 cifre significative
I1 = 1 − I 0 = 0.36787944117144
I 2 = 1 − 2 + 2! I 0 = 0.26424111765712
I 3 = 1 − 3 + 3 ⋅ 2 − 3! I 0 = 0.20727664702865
M
M
I 25 = 0
I 26 = −3.436 ⋅1010 (!!!!)
1
0.8
yn ( x) =
1 n x
x e
e
06
0.6
n=0
0.4
0.2
0
0
n=1
n=2
n=4
n=26
0 25
0.25
05
0.5
0 75
0.75
1
Stabilità di un algoritmo: esempio
Propagazione dell’errore iniziale ε0=I0-I0* nel calcolo di In?
L’algoritmo
l i
è lineare,
li
quindi:
i di
ε n = I n − I n* = f ( I 0 ) − f ( I 0* ) = (−1) n n!( I 0 − I 0* ) = (−1) n n!ε 0
[
]
) = 1 + ∑ [(−1) n(n − 1) L (n − k + 1)]+ (−1) n! I
f ( I 0 ) = 1 + ∑k =1 (−1) k n(n − 1) L (n − k + 1) + (−1) n n! I 0
n −1
f (I
*
0
n −1
k =1
k
n
*
0
Il termine (-1)nn!, rapporto tra l’errore al “passo” n e quello
al “passo”
passo 0,
0 è detto coefficiente di amplificazione dell
dell’ererrore iniziale. L’errore cresce con n, l’algoritmo è instabile.
Stabilità di un algoritmo: esempio
L’algoritmo può essere così modificato:
I n = 1 − nI n −1
1− In
⇒ I n −1 =
n
I n = 0 e posto IN=0 per N fissato:
Sapendo che: lim
n →∞
1− Ik
I N = 0 I k −1 =
k
k = N , N − 1, K
Stabilità di un algoritmo: esempio
Propagazione dell’errore:
*
*
1
−
I
1
−
I
I
−
I
εN
*
N
N
N
N
ε N −1 = I N −1 − I N −1 =
−
=
=−
N
N
N
N
I N −1 − I N* −1
ε N −1
εN
=−
=
ε N −2 =
N −1
N − 1 N ( N − 1)
L’errore si riduce l’algoritmo è stabile.
Esercizio: valutare il valore approssimato di I0 con N=10 e
N=15, stimare l’errore commesso; usare tale algoritmo per
valutare I7. calcolare I7 a partire da un valore di I0 accurato
alla quarta cifra decimale con il metodo instabile.