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 (+,-,*,/)
I calcolatori utilizzano 32 o 64 bit per rappresentare i numeri macchina (nella base B=2): Singola precisione
1 23 8
segno
mantissa
esponente
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
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)=
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.
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||
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
con x>0
K=1/2 Calcolo
= x + x y
1 x = x 1+ y x 1 + x 2 x
1 x y y y 2 x
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.
La bassa accuratezza dei risultati prodotti da un processo numerico pu essere imputabile allelevato condizionamento intrinseco del problema oppure allinstabilit dellalgoritmo utilizzato per produrlo.
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))
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)
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