Note per il corso di Calcolo Scientifico Prof.ssa R. Vermiglio L' Analisi Numerica, disciplina recentemente denominata anche Calcolo Scientifico, si occupa dello sviluppo e dell'analisi di algoritmi per la risoluzione di problemi matematici che sono suggeriti dalle scienze computazionali e dall'ingegneria. L' ANALISI NUMERICA * si occupa di quantita' che sono continue, cioe' i problemi matematici trattati coinvolgono variabili reali e complesse (problemi di matematica del continuo); * ricerca delle tecniche di approssimazione che convergano rapidamente e ne studia l'accuratezza. Gli algoritmi sviluppati sono implementati su un calcolatore -------> l'architettura dello strumento di calcolo gioca un ruolo non trascurabile nella risoluzione del problema e nell'accuratezza della risposta finale. Il codice deve essere affidabile, efficiente e flessibile. Riassumendo l'obiettivo dell'analisi numerica e' quello di sviluppare ed analizzare degli algoritmi efficienti, che forniscano una soluzione ad alcuni problemi della matematica del continuo nel minimo tempo, con la massima accuratezza mediante il calcolatore. 1 Sono diversi gli "ingredienti" che giocano un ruolo importante in tale disciplina, ma il suo fulcro sta negli algoritmi. In molti problemi l'approssimazione e' inevitabile, perche' le quantita' coinvolte non sono calcolabili dal punto di vista analitico. Osservazione: nella valutazione di un algoritmo si dovra' tener presente anche "il tempo" di esecuzione: una stima sara' data dalla complessita' computazionale. Esempio: regola di Cramer per soluzione dei un sistema lineare. 2 Strategia generale. La strategia generale per affrontare il problema da approssimare puo' essere riassunta come segue Sostituire il problema difficile con uno piu' semplice, che ha la stessa soluzione del problema originale o almeno ha una soluzione "vicina" (------> analisi errore) complicato-------->semplice nonlineare-------->lineare infinito-------->finito differenziale-------->algebrico La soluzione ottenuta e', in un'approssimazione di quella originale. generale, solo Il procedimento risolutivo richiede diverse fasi, ognuna delle quali introduce delle semplificazioni e quindi degli errori. Pertanto per valutare la bonta' della risposta finale (attendibilita' del risultato) bisogna analizzare e controllare t u t t e le "sorgenti d'errore" o "fonti d'incertezza". Fonti d'incertezza Prima dell'implementazione: 3 *formulazione del modello matematico (insieme di leggi di natura matematica che descrivono il fenomeno da analizzare) ------> adeguatezza del modello *formulazione del modello numerico (algoritmo per approssimare il modello matematico) ------> errore di analitico o di troncamento *misurazioni sperimentali o computazioni precedenti -----> errore nei dati di input Durante la computazione: * strumento di calcolo ------> errori di arrontondamento (errori di rappresentazione sul calcolatore ed errori nelle operazioni) L ' a c c u r a t e z z a del risultato finale risente della combinazione delle approssimazioni perturbazioni introdotte nei vari passi e che possono essere amplificate dalla natura del problema o dell'algoritmo Esempio: Il calcolo della superficie della Terra mediante la formula A=4pr2 coinvolge diverse approssimazioni: 4 *la Terra viene modellata come una sfera, che idealizza la sua vera forma *il valore del raggio terrestre r si basa su misurazioni empiriche e su altre computazioni * il valore di p richiede il troncamento di un precesso infinito *i valori di input e i risultati delle operazioni aritmetiche sono arrotondate sul computer. 5 Errore assoluto e relativo Sia ~ x definisce un’aprossimazione del numero reale x. Si ~ Errore Assoluto = Errass(x)= |x -x| e, se x≠0, Errore Relativo= Errrel(x)=Errass(x)/|x|. Una definizione equivalente di errore realtivo e' ~ x = x (1+e), Errrel(x)=|e|. Nelle approssimazioni scientifiche, dove le quantita' in gioco possono variare molto in grandezza, e' piu' opportuno considerare l'errore relativo perche' non ~ dipende dallo "scaling", infatti x-->mx, ~ x --->mx lascia invarato Errrel(x). Quando x e ~ x sono vettori, gli errori assoluti e relativi si misurano con le norme vettoriali ||.||. In alcuni contesti puo' far comodo considerare l'errore relativo "componentwise" max i=1,...,n Errrel(xi). Solitamente il valore esatto x e' sconosciuto, allora si cerca una stima o una limitazione superiore dell'errore relativo. Per la stessa ragione, l'errore relativo e' spesso valutato rispetto al valore approssimato invece di quello esatto. 6 Le cifre significative di un numero sono le prime cifre diverse da zero e tutte le successive (es 0.0123,1.00567). La nozione di cifre significative esatte e' legata all'errore relativo e pare abbastanza intuitiva ma una sua definizione rigorosa e' problematica. Esempio: I seguenti numeri reali concordano fino a tre cifre significative secondo qualsiasi ragionevole definizione ma l’errore relativo e’ diverso: x=1.00000, ~ x =1.00345,Errrel(x)=3.45*10-3 x=9.0000, ~ x =8.99899, Errrel(x)=1.12*10-4 L'errore relativo fornisce una stima piu' accurata rispetto all'informazione sul numero delle cifre significative esatte. 7 Calcolo del numero pigreco con l'algoritmo di Archimede instabile l1=sqrt(2), li+1=sqrt(2-sqrt(4-li2)), i=1,2,... pi=li * 2i pigreco= 3.141592653589793 p(i) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 err_ass 2.828427124746190 3.13e-01 9.97e-02 3.061467458920719 8.01e-02 2.55e-02 3.121445152258053 2.01e-02 6.41e-03 3.136548490545941 5.04e-03 1.60e-03 3.140331156954739 1.26e-03 4.01e-04 3.141277250932757 3.15e-04 1.00e-04 3.141513801144145 7.88e-05 2.51e-05 3.141572940367883 1.97e-05 6.27e-06 3.141587725279961 4.92e-06 1.57e-06 3.141591421504635 1.23e-06 3.92e-07 3.141592345611077 3.07e-07 9.80e-08 3.141592576545004 7.70e-08 2.45e-08 3.141592633463248 2.01e-08 6.40e-09 3.141592654807589 1.22e-09 3.88e-10 3.141592645321215 8.27e-09 2.63e-09 3.141592607375720 4.62e-08 1.47e-08 3.141592910939673 2.57e-07 8.19e-08 3.141594125195191 1.47e-06 4.68e-07 3.141596553704820 3.90e-06 1.24e-06 3.141596553704820 3.90e-06 1.24e-06 3.141674265021758 8.16e-05 2.60e-05 3.141829681889202 2.37e-04 7.54e-05 3.142451272494134 8.59e-04 2.73e-04 3.142451272494134 8.59e-04 2.73e-04 3.162277660168380 2.07e-02 6.58e-03 3.162277660168380 2.07e-02 6.58e-03 3.464101615137754 3.23e-01 1.02e-01 4.000000000000000 8.58e-01 2.73e-01 Matlab 4.2c eps = 2.220446049250313e-16 8 err_rel Calcolo del numero pigreco con algoritmo di Archimede stabile l1=sqrt(2), li+1= li (sqrt(2+sqrt(4-li2))) , i=1,2,... pi=li * 2i , i=1,2,... pigreco= 3.141592653589793 i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 p(i) err_ass 2.828427124746190 3.13e-01 9.97e-02 3.061467458920718 8.01e-02 2.55e-02 3.121445152258052 2.01e-02 6.41e-03 3.136548490545939 5.04e-03 1.60e-03 3.140331156954753 1.26e-03 4.02e-04 3.141277250932773 3.15e-04 1.01e-04 3.141513801144301 7.89e-05 2.51e-05 3.141572940367092 1.97e-05 6.27e-06 3.141587725277160 4.93e-06 1.57e-06 3.141591421511200 1.23e-06 3.92e-07 3.141592345570118 3.08e-07 9.80e-08 3.141592576584873 7.70e-08 2.45e-08 3.141592634338564 1.92e-08 6.13e-09 3.141592648776986 4.81e-09 1.53e-09 3.141592652386592 1.20e-09 3.83e-10 3.141592653288993 3.01e-10 9.57e-11 3.141592653514594 7.52e-11 2.39e-11 3.141592653570994 1.88e-11 5.98e-12 3.141592653585094 4.70e-12 1.49e-12 3.141592653588619 1.17e-12 3.73e-13 3.141592653589501 2.92e-13 9.30e-14 3.141592653589721 7.19e-14 2.29e-14 3.141592653589776 1.69e-14 5.37e-15 3.141592653589790 3.11e-15 9.89e-16 3.141592653589794 4.44e-16 1.41e-16 3.141592653589794 1.33e-15 4.24e-16 3.141592653589795 1.78e-15 5.65e-16 Matlab 4.2c eps = 2.220446049250313e-16 9 err_rel inf 1 Approssimazione dell' esponenziale exp(x)=  i! i=1 con il troncamento della serie N 1 gN(x)=  i! i=1 gN(x) xi x N err_rel 0.5 1 20 40 100 16 19 68 103 192 1.648721270700128 2.693537214216206e-12 2.718281828459046 1.633712903499084e-16 4.851651954097902e+08 1.228543294929598e-16 2.353852668370200e+17 1.359473361693308e-16 2.688117141816133e+43 9.210461999799666e-16 -0.5 -1 -20 -4 -100 16 20 96 138 246 6.065306597126333e-01 1.830448315920528e-16 3.678794411714424e-01 3.017899073375402e-16 5.621884472130418e-09 1.727542678492420e+00 -3.165731894063124e+007.451666466185133e+17 -2.913755646891533e+257.832516501472691e+68 --------> instabile per x<0 -0.5 -1 -20 -4 -100 16 20 68 103 192 6.065306597126335e-01 3.678794411714423e-01 2.061153622438558e-09 -4.248354255291590e-18 3.720075976020839e-44 1.830448315920528e-16 1.508949536687701e-16 2.006596217642398e-16 1.813342135475986e-16 8.029533140257073e-16 --------> stabile per x<0 Matlab 4.2c eps = 2.220446049250313e-16 Approssimazione della derivata con il rapporto incrementale 10 xi f(x)=exp(x), x=1--------->e= 2.71828182845905 h= 1.e-01 1.e-02 1.e-03 1.e-04 1.e-05 1.e-06 1.e-07 1.e-08 errore relativo= 5.1709e-02 5.0167e-03 5.0017e-04 5.0002e-05 5.0000e-06 4.9994e-07 5.1484e-08 2.4290e-09 1.e-09 1.e-10 1.e-11 1.e-12 1.e-13 1.e-14 1.e-15 1.e-16 7.9257e-08 5.6937e-07 1.2005e-05 1.5904e-04 1.6770e-04 3.4351e-03 1.4360e-01 1.0000e+00 Matlab 4.2c eps = 2.220446049250313e-16 11 Numeri "Floating Point" o di Macchina. L’insieme dei numeri di macchina F (i.e. l’insieme dei numeri reali rappresentati esattamente sul calcolatore) e’ caratterizzato dagli interi B = base di rappresentazione t = numero cifre della mantissa L, U = limitazioni per l’esponente e contiene, oltre x=0, tutti i numeri reali x rappresentabili come d1 x=± ( B d2 + 2 B dt +....+ t B )Bp dove 0≤ di ≤ B-1, i=1,...,t, d1≠ 0 -L≤p≤U. (d1d2...dt) e' la mantissa p e' l'esponente c=p+L e' la caratteristica Tale rappresentazione si dice normalizzata, perche' la cifra piu' significativa d1≠0, per x≠0 (nei sistemi binari, i.e. B=2, non e' necessario memorizzare d1). Tale rappresentazione e' unica. Proprieta' dell'insieme dei numeri di macchina F L'insieme F e' finito: la sua cardinalita' e' 1+2(B-1)Bt-1(U+L+1) 12 Il piu' piccolo numero positivo normalizzato di F e' realmin = B-L-1 Il piu' grande numero positivo normalizzato di e' realmax=BU (1-B1-t) I numeri di macchina non sono uniformemente distribuiti, sono equispaziati solo tra due potenze successive di B. Esercizio: Descrivere l'insieme dei numeri di macchina F con B=2, t=3, L=2, U=1. 13 Numeri denormalizzati L'insieme dei numeri di macchina F puo' essere esteso includendo i numeri denormalizzati, che sono i numeri reali con la significativa principale d1= 0 e con l' esponente p=-L. Tali numeri sono distribuiti tra B-L-1 e lo zero e sono equispaziati (spaziatura pari a B-L-t) Tali numeri permettono un underflow graduale ma la precisione nell'approssimazione e' inferiore. E s e r c i z i o : Descrivere l'insieme dei numeri di denormalizzati con B=2, t=3, L=2, U=1. 14 Approssimazione dei numeri reali Solitamente i calcolatori lavorano in una base B≠10 e pertanto anche un numero che e’ rappresentabile con un numero finito di cifre decimali, puo' richiedere un numero infinito di cifre in base B. Esempio x=(0.1)10=(0.0001100110011...)2 Esercizio: implementare in Matlab un algoritmo che converta un numero decimale in base B. Se un numero reale x non e' un numero di macchina, sara' approssimato da un numero “floating point” fl(x) di F secondo una delle seguenti strategie Troncamento: la rappresentazione della mantissa viene troncata dopo la t-esima cifra. E s e m p i o : B=10, t=3: fl(0.1234567)=0.123; fl(0.9876543)=0.987, fl(0.1235)=0.123. Arrotondamento ("rounding"): il numero fl(x) e' il numero di macchina piu' vicino a x. Quando x e' equidistante da due numeri di macchina, fl(x) puo' essere scelto con diverse ci possono essere diverse tecniche tra cui "round away from zero": fl(x) e' il numero piu' grande "round to even" fl(x) e' il numero con la cifra dt pari. Esempio: B=10, t=3: fl(0.1234567)=0.123 e fl(0.9876543)=0.988; fl(0.1245)=0.125 (away from zero); fl(0.1245)=0.124 (to even) Precisione di macchina u 15 L' applicazione x ------>fl(x) dara' errore overflow se |fl(x)|>max{|y|, y in F}, errore di underflow se 0< |fl(x)| <min{ |y|, y in F\{0}}. Ogni numero releale x nel range di F sara' approssimato da fl(x) con un errore relativo (errore di arrotandamento) maggiorato dalla precisione di macchina u ex= |fl(x)-x| |x| ≤u dove u= B1-t con il troncamento 1 u= 2 B1-t con l' arrotondamemto Esempio: standard IEEE doppia precisione. 16 Esempio: Matlab esegue tutti i suoi calcoli in doppia precisione secondo lo standard IEEE. La funzione logica ‘isieee’ ritorna il valore 1 (‘vero’) se sta usando l’aritmetica IEEE e ) (‘falso”) in caso contrario. La funzione ‘computer’ ci segnala su quale tipo di macchima Matlab sta lavorando. »isieee ans = 1 »computer ans = MAC2 La funzione ‘eps’ ci fornisce la distanza da 1.0 al successivo numero floating point ed e’ uguale al doppio della precisione di macchina. »eps eps = 2.2204e-16 Le funzioni ‘realmax’ e ‘realmin’ forniscono rispettivamente i numeri realmax e realmin »realmax ans = 1.7977e+308 »realmin ans=2.2251e-308 Se il risultato di una computazione e’ piu’ grande di realmax si ha un overflow e si ottiene infinito »realmax*2 ans = ∞ Se il risultato di una computazione e’ piu’ piccolo di realmin si ha un numero denormalizzato o underflow a zero se e’ piu’ piccolo di eps*realmin (piu’ piccolo numero denormalizzato) »realmin*eps ans =4.9407e-324 17 »realmin*eps/2 ans = 0 I risultati di operazioni non matematicamente definite producono un NaN »0/0 Warning: Divide by zero ans = NaN »Inf/Inf ans = NaN »Inf-Inf ans = NaN »0*NaN ans = NaN Con il comando ‘format hex’, i numeri binari floating point sono rappresentati nel formato esadecimale »format hex »eps eps = 3cb0000000000000 »realmax ans =7fefffffffffffff »realmin ans = 0010000000000000 »2*realmax ans =7ff0000000000000 18 Aritmetica di macchina Le operazioni elementari (op= +,/,*,-) che operano su numeri di macchina non e' detto diano come risultato esatto un numero di macchina. Di qui la necessita' di definire delle operazioni di macchina (che indicheremo con flop). E s e m p i o : B=10, t=3 x=0.123*101, y=0.123*101=0.00123*101. Allora x+y=0.12423*101 non e' un numero di macchina e deve essere arrotondato x fl(+) y=0.124*101. Osserva che le ultime due cifre di y non hanno effetto sul risultato. Prendiamo come modello di aritmetica di macchina il seguente: Supponiamo che tutte le operazioni aritmetiche elementari (op= +,/,*,-) siano calcolate con infinite cifre e che poi il risultato sia arrotondato, in modo tale che sia soddisfatta | (x flop y)-(x op y)| errop = |x opy| ≤ u ,op= +,/,*,- Esempio: per l'addizione e la sottrazione, bisognera' shiftare la matissa del numero con esponente piu' piccolo per rendere gli esponenti dei due addendi uguali. Poi dovro' sommare le mantisse ed arrontondare e normalizzare se necessario il risultato. Questo piu' essere molto costoso se gli operandi sono molto diversi in dimensione, perche' richiederebbe l'uso di registri lunghi. In pratica viene usato un registro di lunghezza t+2 cifre. L'aritmetica di macchina non soddisfa tutte le proprieta' dell'aritmentica esatta: 19 E s e m p i o : B=10, t=3 x=0.123*102, y=0.123*101=0.000123*102. Allora x+y=0.123123*102 e x fl(+) y=0.123*102. Osserva che y >0 non ha effetto sul risultato. NON sono valide le proprieta' associativa della somma e del prodotto, la proprieta' distributiva della somma rispetto al prodotto, la legge di cancellazione. Esempio: B=10, t=3, x=0.559, y=0.555, z=0.4*10-2 -----> (x fl(+) y)fl(+) z= 0.111*101fl(+) 0.0004*101= 0.111*101; x fl(+) (y fl(+) z)=0.559 fl(+) 0.559= 0.112*101 che e' il risultato esatto arrotondato. Algoritmi matematicamente equivalenti non lo sono numericamente. Esempio :(1+e)+e=1 ma 1 +(e+e) >1 dove e e' un numero di macchina positivo leggermente piu' piccolo di u. Esercizio: Verificare che non vale la proprieta' associativa del prodotto nel seguente caso: B=10, t=5, x=0.80001*101, y=0.12508*101, z=.80008*101. Esercizio: Verificare che non vale la proprieta' distributiva del prodotto rispetto alla somma nel seguente caso: B=10, t=5, x=-0.6*101, y=0.60003*101, z=0.2*102. 20 Analisi dell'errore Supponiamo di calcolare il valore di una funzione reale f in un dato punto x. x input -------->y=f(x) output Sia g la funzione che rappresenta l'algoritmo scelto per approssimare la funzione f in aritmetica esatta e sia infine ~ g la funzione effettivamente calcolata in aritmetica di macchina. A causa degli errori di misurazione o di rappresentazione del numero reale x sul calcolatore, sara' usato in input un valore approssimato ~ x . In prima approssimazione risulta ~) f(x) - ~ g (x errore totale= f(x) ~) f(x) - f(x ~) f(x ~) - g(x ~) f(x + ~) g(x = + ~) - ~ ~) g(x g (x ~ ~) g (x L' accuratezza del risultato e' misurata rispetto all'errore totale e dipende da tutte le componenti d'errore. 21 Errore inerente La scelta dell'algoritmo non ha effetto sull'errore dovuto a dati inesatti, che e' quindi legato al problema assegnato e si definisce errore inerente. Il problema si dice ben-condizionato se non e' sensibile alle perturbazioni introdotte sui dati, cioe' se un errore dato nel valore di ingresso causa un errore "misurato" nella risposta. Il problema si dice mal-condizionato se un cambiamento anche piccolo nei dati di ingresso puo' dare un grande cambiamento nella risposta. Come "misurare" il condizionamento del problema? cond= |errore relativo nella risposta| |errore relativo nel dato| ~)|/|f(x)| |f(x) - f(x = |x - ~ x |/|x| Se cond >> 1 il problema sara' malcondizionato. 22 Se la funzione f e' sviluppabile con Taylor ~ f(x ~ )=f(x) + f'(x)(x ~ -x) + O((x -x)2), si ottiene, in prima approssimazione, x f'(x) cond =| f(x) |. Esempio: Per la funzione f(x)=cos(x) si ottiene cond =| x tang(x) | ed il problema e' mal condizionato per x vicino a Infatti cos (1.57079)= 6.32679489e-06 cos (1.57078)= 1.632679489e-05 p 2 . err(x)=6.36e-06 --------> err(f(x))=1.58 Osserviamo che il mal-condizionamento dipende dal dato di ingresso x. Esercizio: calcolare il condizionamento delle funzioni sqrt(x), exp(x), tang(x). 23 Consideriamo ora il problema del condizionamento del calcolo di una funzione F vettoriale a valori reali. Usando Taylor si trova in prima approssimazione ~ F(x n ~ -x ) xi ∂ (x i i )=F(x) +  ( F(x) ∂x F(x)) x i i i=1 Esempio: Somma di n numeri n F(x1, x2,....,xn)=  i=1 xi cond_i = x1+...+xn xi , i=1,2,...,n (commenti caso n=2) Esempio: Prodotto di n numeri n F(x1, x2,....,xn)= ’ i=1 xi cond_i = 1 , i=1,2,...,n Esercizio: Calcolare il condizionamento del quoziente di due numeri. 24 Esempio : Sistema lineare Ax=b Consideriamo il sistema lineare definito dai dati A= 0.7800 0.4570 b= 0.5630 0.3300 0.2170 0.1270 La soluzione esatta e' x= 1.0000 -1.0000 Perturbiamo l'elemento a(1,1) della matrice introducendo un errore relativo Err=(0.7810-0.7800)/0.7800=1.2821e-03. A1 = 0.7810 0.4570 0.5630 0.3300 La soluzione del sistema perturbato e' x1 = 0.2483 0.0410 con un errore pari a norm(x-x1,inf)= >>ans = 1.0410. Esempio: Zeri di polinomio Vogliamo studiare come variano gli zeri del polinomio 25 p(x)=(x-1)(x-2).....(x-20)= x20- 210 x19+..... perturbando il coefficiente a=210 del monomio x19 come segue 210+2-23 con un errrore relativo pari Err(a)=5.686e-10. Zeri del polinomio perturbato: 1.00000 0000 2.00000 0000 3.00000 0000 4.00000 0000 4.99999 9999 10.09526 6145 ± i 0.64350 0904 11.79363 3881 ± i 1.65323 9728 13.99235 8137 ± i 2.51883 0070 16.73073 7466 ± i 2.81262 4894 19.502439400 ± i 1.94033 0347 6.00000 6944 6.99969 7234 8.00726 7603 8.91725 0249. 20. 84690 8101 Siano Fi(a)=xi(a) le funzioni che forniscono la i-esima radice del polinomio in corrispondenza del valore a del coefficiente, cioe' p(xi(a),a)=0, i=1,2,...,20. Il condizionamento della i-esima radice e' misurato da Fi'(a) a F (a) i dove ∂p -∂ a Fi'(a)= ∂ p ∂x |x=i= x19 20 20  ’ |x=i (x-k) j=1 k=1;k≠j pertanto il condizionamento varia con gli zeri come risulta dalla tabella: 26 Radice 1 2 3 4 5 6 7 8 9 10 F i'(a) -8.2 (-18)ß 8,2 (-11) -1.6 (-6) 2.2 (-3) -6.1 (-1) 5.8 (+1) -2,5(+3) 6.0 (+4) -8.3 (+5) 7.6 (+6) Radice 11 12 13 14 15 16 17 18 19 20 27 F i'(a) -4.6(+7) 2.9 (+8) -6.1(+8) 1.3 (+9) -2.1(+9) 2.4(+9) -1.9(+9) 1.0(+9) -3.1(+8) 4.3 (+7) Errore analitico o di troncamento E' l'errore che misura la differenza tra il risultato esatto e quello fornito dall'algoritmo che usa gli stessi dati di input e opera in aritmetica esatta. *E' l'errore dovuto all'approssimazione di una serie infinita con una serie troncata Esempio: Approssimazione di inf 1 f(x)= exp(x)=  i! i=1 xi con troncamento serie N 1 gN(x)=exp(x)=  i! i=1 xi . Per x=1 si ottiene una stima del numero e=exp(1) con gN(1) con un errore exp(a) |e-gN(1)| = (N+1)! e < (N+1)! dove 0<a<1. *E' errore dovuto all'interruzione di un processo iterativo prima della convergenza 28 Esempio: L' approssimazione della derivata f'(x) con il rapporto incrementale rh(x) = f(x+h)-f(x) h porta all'errore |f'(x)-rh(x)| < |f''(a) h| 2 dove x<a<x+h. Per f(x)=exp(x) si ottiene in x=1 |e-rh(1)| < exp(a) h 2 dove 1<a<1+h, h>0. 29 Errore algoritmico L'errore algoritmico nasce dalla differenza tra il risultato fornito da un algoritmo che usa l'aritmetica esatta e il risultato prodotto dallo stesso algortimo usando aritmetica di macchina. Legato a questo errore c'e' il concetto di stabilita' di un algoritmo. Un algoritmo e' stabile se e' insensibile alle perturbazioni dovute alle approssimazioni introdotte dalle operazioni di macchina durante le computazioni. La stabilita' dell'algoritmo non garantisce l'accuratezza del risultato. L'accuratezza dipende sia dal condizionamento del problema sia dalla stabilita' dell'algoritmo. Un risultato non accurato puo' risultare sia dall'applicazione di un algoritmo instabile ad un problema ben-condizionato sia dall'applicazione di in algoritmo stabile ad un problema malcondizionato. Le ricette per migliorare sono diverse: scegliere un algoritmo piu' stabile nel primo caso, riformulare matematicamente il problema nel secondo caso sqrt(2)-1 Esercizio: Per calcolare y=(sqrt(2)+1 )3 si possono considerare diverse espressioni matematicamnte equivalenti y = (sqrt(2)-1)6 = (3-2sqrt(2))3 = 1 (5sqrt(2)-7)2 = (sqrt(2)+1)6 = 99-70sqrt(2) 30 Indicare quale delle formulazioni risulta essere quella con il migliore e peggiore numero di condizionamento. Analisi dell'errore all'indietro. Per analizzare l'errore algoritmico abbiamo a disposizione i grafi computazionali nei casi semplici o l' analisi all' indietro di J.H. Wilkinson (1919-1986). L'idea e' di interpretare la soluzione approssimata fornita dall'algoritmo con dati di macchina come soluzione esatta di un problema perturbato. La soluzione approssimata sara' "buona" se e' la soluzione esatta di un problema "vicino" all'originale. x------->f(x) errore errore all'indietro in avanti ~ ~(x) =f(x ~ ) x ------>g Esempio: La somma di due numeri di macchina x, y con l'operazione di macchina puo' essere riscritta come segue xo+ ~ y= (x+y) (1+e) = x(1+e)+y(1+e)=x ~ +y con |e|<u. Esempio: Approssimiamo exp(x) con g4(x) con x numero di macchina. Per analizzare l'errore all'indietro dobbiamo ~ calcolare ~ x tale che exp(x )=g (x) ovvero ~ x 4 =log(g4(x)). Per x=1 si ottengono i valori exp(1)=2.71828182845905, g4(1)=2.66666666666667 e ~ x =log(g (1))=0.98082925301173, 4 31 errore in avanti=0.05161516179238/exp(1)= 1.8988e-02 errore all'indietro=1.9171e-02 Cancellazione La sottrazione di due numeri approssimati (a causa di errori di arrotondamento o di altri errori precedenti) aventi lo stesso segno e modulo quasi uguale e' causa di risposta non accurata. Esempio: I risultati non accurati dell'algoritmo di Archimede, del rapporto incrementale, e dell' approssimazione dell'esponenziale per x<0 sono dovuti alla cancellazione. Esempio (radici di equazioni di secondo grado): Le soluzioni dell'equazione di secondo grado ax2+bx+c=0 sono date da -b±sqrt(b2-4ac) x1,2= 2a L'uso di questa formula puo' essere causa di cancellazione quando sqrt(b2-4ac) e' circa uguale a |b|. Puo' essere evitata calcolando la radice x1 che non da' problemi di cancellazione e calcolando x2 con la formula c x2=ax 1 . La cancellazione sotto la radice non puo' essere evitata senza l'uso di una precisione piu' alta. 32 Esempio (deviazione standard): La media m di n numeri x1,...,xn, e' data da 1 m=n n  xi i=1 e la deviazione standard s e' data da 1 s=(n-1 n 2))1/2  (xi-m) i=1 Spesso viene usata la seguente formula matematicamente equivalente per evitare due passaggi ai dati 1 n s=n-1(  (xi2-m2n)) 1/2 i=1 Gli errori di cancellazione in questa seconda formulazione possono essere piu' disastrosi che nella prima, perche' si sottraggono due quantita' positive. Un algoritmo numericamente stabile per calcolare la devizione standard e' il seguente: Per le seguenti quantita' 1 mk=k k  xi, k=1,...,n i=1 k qk=  (xi-mk2k) i=1 valgono le relazioni ricorsive 33 , k=1,...,n xk-mk-1 m1=x1, mk=mk-1+ k (k-1)(xk-mk-1)2 q1=0, qk=qk-1+ k , k=2,...,n, , k=2,...,n, da cui si ricava qn s=(n-1 )1/2. Esempio: La valutazione dell'espressione ex-1 f= x presenta il fenomeno della cancellazione per valori di x prossimi a zero. Nella tabella che segue sono forniti i risultati calcolati con i due algoritmi Algoritmo 1: if x=0 then f=1 else f=(exp(x)-1)/x end Algoritmo 2: y=log(x) if y=1 then g=1 else g=(y-1)/log(y) end 34 x 1.e-05 1.e-06 1.e-07 1.e-08 1.e-09 1.e-10 1.e-11 1.e-12 1.e-13 1.e-14 1.e-15 1.e-16 f 1.000005000006965e+00 1.000000499962183e+00 1.000000049433680e+00 9.999999939225288e-01 1.000000082740371e+00 1.000000082740371e+00 1.000000082740371e+00 1.000088900582341e+00 9.992007221626408e-01 9.992007221626408e-01 1.110223024625157e+00 0 g 1.000005000016667e+00 1.000000500000167e+00 1.000000050000002e+00 1.000000005000000e+00 1.000000000500000e+00 1.000000000050000e+00 1.000000000005000e+00 1.000000000000500e+00 1.000000000000050e+00 1.000000000000005e+00 1.000000000000000e+00 1 Matlab 4.2 Esercizio: il computer sa contare fino a sei? Spiega i seguenti risultati forniti dal Matlab. »2-1 ans = 1 »(1/cos(100*pi+pi/4))^2 ans = 2.00000000000011 »3*cos(acos(10000))/10000 ans = 2.99999997414701 »s=4;for i=1:53 s=sqrt(s); end, for i=1:53 s=s^2; end »s s= 1 »5*((1+exp(-100))-1)/((1+exp(-100))-1) ans = NaN »log(exp(6000))/1000 ans = ∞ 35 BIBLIOGRAFIA 1. R. BEVILACQUA, D. BINI, M. CAPOVANI, O. M ENCHI; Introduzione alla matematica computazionale, Zanichelli, 1987. 2. V. COMINCIOLI: Analisi Numerica. McGraw-Hill Libri Italia, 1990. 3. N. J. HIGHAM, The accuracy of floating point summation, SIAM J. Sci. Comput. 14 ('93), 783-799. 4. G. MONEGATO, Fondamenti di calcolo numerico, Levrotto e Bella, 1990. 5. G. W. STEWART, Afternotes on Numerical Analysis, Siam, 1993. 36 OSSERVAZIONI CONCLUSIVE L'analisi degli errori di arrotondamento e della aritmetica di macchina e' stato un importante argomento dell'analisi numerica agli inizi, perche' ha posto l'attenzione e definito importanti concetti quali la stabilita' di algoritmi e il condizionamento del problema. Tuttuvia questo argomento, pur rimanendo fondamentale, riguarda solo una piccola parte dell'analisi numerica perche' la sua anima sta nello sviluppo ed analisi di algoritmi veloci. La velocita' degli strumenti di calcolo attuali ha reso evidente il fatto che anche se esiste un algoritmo finito, uno infinito puo' essere una scelta migliore (per esempio nella risoluzione di sistemi linearidi grande dimensione con matrice poco sparsa, si usano principalmente le tecniche iterative con precondizionamento). Il principio che attualmente guida la ricrca in diversi settori dell’analisi numerica puo’ essere riassunto brevemente come segue: ”e' meglio risolvere un problema approssimativamente e poi iterare raffinando le soluzione”. 37