Sei sulla pagina 1di 34

Problema numerico

Relazione funzionale chiara e non ambigua tra dati iniziali e soluzione. Dati iniziali e soluzione sono due vettori finiti x, y.
f

f(x)=y

Metodo numerico
Descrizione matematica dei calcoli che si devono sviluppare per arrivare alla soluzione Attenzione: in un metodo numerico non detto ci sia la finitezza nel tempo! Quando abbiamo un metodo numerico possiamo costruire un algoritmo

Algoritmo
Sequenza finita e non ambigua di ordini (istruzioni) che ai dati iniziali (input) associano un unico risultato (output) in un tempo finito Per uno stesso metodo numerico si possono costruire pi algoritmi

Bont di un algoritmo
Generale e robusto: applicabile ad un qualsiasi insieme di dati di un certo dominio Semplicit di verifica delle ipotesi di applicazione Stabilit numerica Richiesta di risorse - numero di operazioni - quantit di memoria richiesta

Costo computazionale
Complessit computazionale di un algoritmo= numero di operazioni aritmetiche floating point richieste per la sua esecuzione Unit di misura FLOP (floating point operation) 1 flop = una operazione elementare (+,-,*,/)

Aritmetica floating point


Insieme dei numeri macchina F(B,s,L,U): tutti i numeri della forma x=0. d1 d2 d3.....ds Bm (rappresentazione floating point) dove B: base di rappresentazione d1 0 s: numero di cifre della mantissa L,U: estremi del range in cui pu variare lesponente m (L<m<U)

I calcolatori utilizzano 32 o 64 bit per rappresentare i numeri macchina (nella base B=2): Singola precisione
1 23 8

segno mantissa esponente Doppia precisione


1 52 11

segno

mantissa

esponente

Con lhidden bit: 24 e 53 cifre, rispettivamente

Aritmetica di Matlab
Matlab lavora in base 2 ma visualizza i risultati usando la base 10 Matlab lavora in doppia precisione: 16 cifre in base 10 (53 cifre binarie) L=-308, U=+308 (base B=2: L=-1022, U=1024) realmax=1.7977E+308 (21024) (massimo numero rappresentabile in valore assoluto) realmin=2.2251E-308 (2-1022) (minimo numero rappresentabile in valore assoluto)

Numeri in modulo maggiori di realmax e inferiori a realmin non possono essere rappresentati. A un numero pi grande di realmax (overflow) Matlab associa il valore speciale Inf
>>2*realmax ans=Inf >>realmin/2 ans=1.1125E-308

(underflow)

In questo caso una parte di bit destinati alla mantissa viene usata per lesponente (perdita di cifre significative). Se tale perdita supera un certo livello, Matlab restituisce 0.
>> realmin/10E+16 ans=0

ATTENZIONE: per lunderflow non viene dato un segnale di errore

Precisione di macchina
eps=2-52=2.2E-16 precisione di macchina Per Matlab: il pi grande numero macchina tale che 1+eps=1 Per definizione: il pi piccolo numero macchina tale che 1+eps>1

Lutilizzo di numeri macchina comporta i seguenti fatti: Gli errori sono sempre presenti nel calcolo Non tutti i numeri sono rappresentabili nellinsieme dei numeri macchina (overflow, underflow) Si devono utilizzare algoritmi stabili per non propagare troppo gli errori Attenzione: ricordarsi che esistono problemi sensibili alla variazione dei dati di ingresso (problemi mal condizionati)

Errore propagato
Nel problema numerico i dati iniziali sono generalmente affetti da un errore: x x + x f f(x)=y f(x+x)=

x errore inerente i dati


f

y=-y lerrore dovuto alla propagazione dellerrore inerente x (y errore propagato).


La propagazione dellerrore dipende solo dal problema numerico considerato. NON dipende dallalgoritmo usato per fare i calcoli.

Esempio: calcolare y=exp(ax) dato iniziale affetto da un errore inerente x calcolo =exp(a(x+x))=exp(ax) exp(a x) errore (relativo) propagato: |(y-)|/|y|=|exp(ax)(1-exp(a x))|/|exp(ax)|=|1-exp(a x)|
a=100, x=10, x=0.1

errore inerente (relativo): x/x= 1/100 errore (relativo) propagato: |(y-)|/|y|=exp(10)-1=2.2025E+004 Esempio di problema mal condizionato

Problema ben/mal-condizionato
Quando a piccole perturbazioni (relative) sui dati x corrispondono perturbazioni (relative) sul risultato f(x) dello stesso ordine di grandezza, il problema y=f(x) definito ben condizionato. Quando invece lerrore (relativo) sul risultato molto pi grande dellerrore (relativo) sui dati ..... il problema considerato detto mal condizionato. Uno stesso problema pu essere mal condizionato per certi dati ma non per altri.

Indice di condizionamento di un problema


x + x f ( x + x) f ( x) x K f ( x) x

K (costante) indice di condizionamento K grande problema mal condizionato (errore propagato molto pi grande dellerrore sui dati) problema ben condizionato (errore K piccolo propagato dello stesso ordine dellerrore sui dati) Nella soluzione di sistemi lineari Ax=b, K=||A|| ||A-1||

Indice di condizionamento per la valutazione di una funzione


Problema: valutare una funzione f (differenziabile) in un punto x x: valore esatto x+x: valore perturbato f(x+x)-f(x) f (x)x
f ( x + x) f ( x) f ' ( x)x f ( x) f ( x) f ( x + x) f ( x) f ' ( x) x x x f ( x) f x ( )
f ( x + x) f ( x) f ' ( x) x x f ( x) f ( x) x

f ' ( x) x K= f ( x)

Esempio di mal condizionamento: fa(x)=exp(ax2) con a>0 fa(x)=2ax exp(ax2) K=|(2ax2 exp(ax2))/exp(ax2)|=2ax2 Valutare fa(x) con a=5, in x=5 K=250 problema mal condizionato Infatti, se perturbiamo a di 0.3 (a=0.3): a1=5.3 Errore relativo sul dato di ingresso: |a1-a|/a=0.06 y=fa=5(5)=1.9356E +054 y1=fa1=5.3 (5)=3.4996E +057 Errore relativo sul risultato: |y1-y|/y=1.8070E+003

Esempio di ben condizionamento:


f ( x) = x
f ' ( x) = 1 2 x

con x>0

K=1/2 Calcolo
= x + x y

1 x = x 1+ y x 1 + x 2 x

Lerrore propagato (Esercizio 3)

1 x y y y 2 x

Errori nella risoluzione di un problema numerico


Problema y=f(x) x1=x+x f f1 e1=|f(x)-f(x1)| e2=|f(x1)-f1(x1)| errore dovuto al condizionamento errore di discretizzazione

Applichiamo lalgorimo e otteniamo un valore f2(x1) e3=|f1(x1)-f2(x1)| errore di calcolo

Stabilit numerica
Riguarda gli algoritmi e precisamente gli errori di calcolo commessi nella sequenza di istruzioni dellalgoritmo stesso. Quando lavoriamo su un calcolatore usiamo un insieme di numeri macchina e le operazioni macchina si introducono degli errori di calcolo dovuti agli errori di arrotondamento

Per giudicare la bont di un algoritmo per il calcolo di f(x), dobbiamo confrontare loutput dellalgoritmo f2(x1) con f(x1), dove x1=fl(x) (i.e. x1=rappresentazione di x come numero macchina) Un algoritmo si dice numericamente stabile se |f(x1)- f2(x1)|/|f(x1)| dellordine della precisione di macchina, ossia se non amplifica gli errori di arrotondamento dovuti ai calcoli. La stabilit di un algoritmo valuta quindi la reazione fornita dallalgoritmo allintroduzione di perturbazioni nei dati iniziali. Tiene conto della sola propagazione degli errori di arrotondamento provocati dallaritmetica di macchina.

Condizionamento di un problema, algoritmo e stabilit


La stabilit dellalgoritmo non garantisce che il risultato calcolato sia accurato. Per un problema mal condizionato la distinzione tra algoritmo stabile e instabile non molto significativa in quanto lerrore totale risulta dominato dallerrore inerente. Quindi per un problema mal condizionato opportuna, in generale, una sua riformulazione.

La bassa accuratezza dei risultati prodotti da un processo numerico pu essere imputabile allelevato condizionamento intrinseco del problema oppure allinstabilit dellalgoritmo utilizzato per produrlo.

Amplificazione errori di calcolo (instabilit numerica)


Cancellazione numerica: perdita di cifre significative nella sottrazione quando i due operandi sono vicini tra loro. Infatti, sappiamo che se nella somma i dati sono affetti da errore (a+a) (b+b) lerrore relativo sul risultato (ab)/(ab)

La differenza macchina non introduce alcuna perdita di precisione ma pu amplificare gli errori di arrotondamento presenti negli operandi a b a-b fl(a), fl(b) fl(fl(a)-fl(b))

(Operazioni macchina: Esercizi 1,2)

Esempio: a=0.147554326 b=0.147251742 Calcolare a-b nellaritmetica a s=6 cifre >> a=0.147554326; b=0.147251742 >> digits(6) [sintassi generale: digits(s)] >> a1=sym(a,'d') a1 =.147554 >> b1=sym(b,'d') b1 =.147252 >> a1-b1 ans =.302 E-3 La vera differenza a-b=.3202584 E-3 Le ultime cifre della mantissa sono alterate in quanto abbiamo fatto fl(a)-fl(b)

Adesso prendiamo due numeri pi vicini: a=0.147554326 b=0.147551742 Calcoliamo a-b nella stessa aritmetica di prima a1-b1=fl(a)-fl(b)=.2000E-5 mentre a-b=.2584E-5 (Cancellazione numerica: Esercizi 4,5)

Sommare tanti addendi a1+ a2+ a3 + an


Algoritmo pi stabile: ordinare gli addendi in modo che: |a1 ||a2|| a3 | |an | e poi sommare (Esercizio 8)

Valutazione di un polinomio p(x)= a1xn+ a2 xn-1 ++ an x + an+1, a10


a: vettore dei coefficienti x: vettore di punti in cui effettuare la valutazione >>y=polyval(a,x) Il comando polyval usa lalgoritmo di Horner Costo computazionale: n moltiplicazioni e n addizioni

Algoritmo standard
p=1; s=an+1; for i=n:-1:1 p=p*x; s=p*ai+s; end disp(s); Costo computazionale: 2n moltiplicazioni e n addizioni

Algoritmo di Horner
Si basa sulla seguente riscrittura di p(x): p(x)= (((a1x+a2)x+a3)x++an)x+an+1 s=a1; for i=2:n+1 s=s*x+ai; end disp(s); Costo computazionale: n moltiplicazioni e n addizioni

Esercizio: Scrivere un file di comandi che valuti e disegni il polnomio p(x)= x6- 6 x5 + 15x4 - 20x3 +15 x2 - 6x+1 nellintervallo [0.998, 1.002] con diversi algoritmi: 1. valutazione brutale 2. schema di Horner (polyval) 3. p(x)=(x-1)6

Altri esempi di instabilit numerica (Esercizi 6,7)