Problema numerico • Relazione funzionale chiara e non ambigua tra dati iniziali e la soluzione. • Dati iniziali e soluzione sono due vettori finiti X F(X) F Y Metodo numerico • Descrizione matematica dei calcoli che si devono sviluppare per arrivare alla soluzione • Attenzione: in un metodo numerico non e’ 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 cosruire piu’ algoritmi Aritmetica floating point • Insieme dei numeri macchina F(B,s,L,U) tutti i numeri della forma x=±0. d1 d2 d3..... dsBm dove d1 0 e L<m<U (rappresentazione floating point) • I calcolatori utilizzano 32 o 64 bit per rappresentare i numeri macchina: • Singola precisione 1 23 8 segno mantissa esponente • Doppia precisione 1 segno 52 mantissa 11 esponente Aritmetica di Matlab • Matlab lavora in base 2 ma visualizza i risultati usando la base 10 • Lavora in doppia precisione:16 cifre in base 10 • L=-308, U=+308 (base 2: L=-1022, U=1024) • Realmax=2.2251E+308 (massimo numero rappresentabile in valore assoluto) • Realmin=2.2251E-308 (minimo numero rappresentabile in valore assoluto) • Numeri in modulo maggiori di realmax e inferiori a realmin non possono essere rappresentati • A un numero piu’grande di realmax (overflow) matlab associa il “valore speciale” Inf >>2*realmax ans=Inf >>realmin/2 (underflow) ans=1.1125 E-308 In questo caso una parte di bit destinati alla mantissa viene usata per l’esponente (perdita di cifre significative) >> realmin/10E+16 ans=0 ATTENZIONE: per l’underflow non viene dato un segnale di errore • Eps=2-52=2.2E-16 precisione di macchina. • Per matlab e` il piu’grande numero macchina tale che eps+1=1 • (la definizione e` il piu’ piccolo numero macchina tale che 1+eps>1) Errore propagato • Nel problema numerico i dati iniziali sono generalmente affetti da un errore: • X X+δx, δx errore inerente i dati X+δx F(X+ δx) δY= -F(X), δY e’ l’errore dovuto alla propagazione dell’errore inerente δx (errore propagato) • La propagazione dell’errore dipende solo dal problema numerico considerato. • NON dipende dall’algoritmo 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|=|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 (Esercizio 3) • L’errore sul risultato e’ molto piu’ grande dell’errore iniziale..... il problema considerato e’ malcondizionato Altro esempio: calcolare y=sqrt(x) (x>0) Calcolo =sqrt(x+ δx) = sqrt(x)sqrt(1+ δx/x) sqrt(x)(1+1/2 δx/x) l’errore propagato e` |(y- )|/|y| 1/2 δx/x..... Problema bencondizionato Condizionamento di un problema • • • • x+ δx |f(x+ δx)-f(x)|/|f(x)| K | δx /x| K (costante) indice di condizionamento K grande problema malcondizionato (errore propagato molto piu`grande dell’errore sui dati) K e` piccolo problema bencondizionato (errore propagato dello stesso ordine dell’errore sui dati) Nella soluzione di sistemi lineari K=||A|| ||A-1|| Errori nella risoluzione di un problema (numerico) •Problema y=f(x), x1=x+ δx e1=f(x)-f(x1) errore dovuto al condizionamento f f1 e2=f(x1)- f1(x1) errore di discretizzazione Applichiamo l’algorimo e otteniamo un valore e3= f1(x1)- f2(x1) errore di f2(x1) calcolo Stabilita`numerica • Riguarda gli algoritmi e precisamente gli errori di calcolo commessi nella sequenza di istruzioni dell’algorimo 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 bonta` di un algoritmo per il calcolo di f(x), dobbiamo confrontare l’output dell’algoritmo f2(x1) con f(x1) dove x1=fl(x) • un algoritmo si dice numericamente stabile se |f(x1)- f2(x1) |/|f(x1)| e` dell’ordine della precisione di macchina Amplificazione errori di calcolo (instabilita` 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) l’errore relativo sul risultato e’ ( a± b)/(a±b) • La differenza macchina non introduce alcuna perdita di precisione ma puo` amplificare gli errori di arrotondamento presente negli operandi • a fl(a), b fl(b) • a-b fl(fl(a)-fl(b)) • Esempio: a=0.147554326 b=0.147251742 Calcolare a-b nell’aritmetica a s=6 cifre >> a=0.147554326; b=0.147251742 >> digits(6) >> a1=sym(a,' d' ) a1 =.147554 >> a2=sym(b,' d' ) a2 =.147252 >> a1-a2 ans =.302e-3 • La vera differenza e` a-b=.3202584 E-3 • Le ultime cifre della mantissa sono alterate in quanto abbiamo fatto fl(a)-fl(b) • Adesso prendiamo due numeri piu’ 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 n. 4, 5 ) Sommare tanti addendi a1+ a2+ a3 +…… an • Algoritmo piu’ stabile: ordinare gli addendi in modo che: |a1 | |a2| | a3 | …… |an | e poi sommare (Esercizio n. 8) Valutazione di un polinomio p(x)= a1xn+ a2 xn-1 +…… an+1 • P=vettore dei coefficienti, x vettore di punti in cui effettuare la valutazione • >>y=polyval(P,x) • Polyval usa l’algoritmo di Horner (n moltiplicazioni n somme) • Scrivere un file di comandi che valuti e disegni il polnomio p(x)= x6- 6 x5 + 15x4 - 20x3 +15 x2 - 6x+1 nell’intervallo [0.998, 1.002] con diversi algoritmi: 1. “valutazione brutale” 2. schema di Horner (polyval) 3. p(x)=(x-1)6 • Altri esempi di instabilita` numerica: esercizi 6, 7