METODI NUMERICI - II canale (A.A. 2007-2008) Cosa èilcalcolo NUMERICO? Prof. F. Pitolli Appunti della prima lezione È quella branca della matematica che fornisce mezzi e metodi per risolvere numericamente, con l aiuto del calcolatore, problemi matematici che nascono in varie discipline: ingegneria, economia, biologia Problema da risolvere Schematizzazione sulla base di ipotesi esemplificative errori inerenti Modello matematico Esempi: Sistemi lineari di grandi dimensioni Integrali complicati Sistemi di equazioni differenziali 2 Metodo numerico errori di troncamento (la scelta èunarte) Algoritmo stabilità Soluzione numerica errori di arrotondamento La soluzione numerica è accettabile solo se si sanno stimare gli errori da cui è affetta.
Errori di arrotondamento - Il sistema di numeri disponibile su un calcolatore è piuttosto primitivo: èunsistema finito di numeri di lunghezza finita, mentrel analisi matematica o la geometria hanno a che fare con numeri infiniti di lunghezza infinita. Analisi Matematica Geometria, Algebra IR: Numeri reali Errori di arrotondamento Analisi Numerica Numeri macchina 4 Errori di arrotondamento - 2 Analisi Matematica π =.4592655897 2=.4425627 Analisi Numerica.4592654.442562 L arrotondamento è la prima fonte di errore: i dati di input, che hanno in generale un numero infinito di cifre, vengono trasformati dal calcolatore, tramite arrotondamento, innumeri macchina, cioè numeri con un numero finito di cifre. 5 Errori di arrotondamento: esempi Numeri reali.75294965.75294966.75294967.75294968.75294969.75294970.7529497.75294972.7529497.75294974 }{{} Arrotondamento Numeri macchina.7529497 6 Errori di arrotondamento - Errore di arrotondamento = Numero reale - Numero macchina Numeri reali Errori di arrotondamento.75294965 +0.5 0 9.75294966 +0.4 0 9.75294967 +0. 0 9.75294968 +0.2 0 9.75294969 +0. 0 9.75294970 +0.0 0 9.7529497 0. 0 9.75294972 0.2 0 9.7529497 0. 0 9.75294974 0.4 0 9 Errore di arrotondamento 0.5 0 9 Se i numeri macchina sono arrotondati alla D esima cifra decimale l errore di arrotondamento è compreso nell intervallo [ 0.5 0 D, +0.5 0 D] 7
Errori di arrotondamento: esempi q (x) =(x ) 7 q 2(x) =x 7 7x 6 +2x 5 5x 4 +5x 2x 2 +7x Dal punto di vista dell algebra le quantità q (x) e q 2 (x) sono identiche. Calcoliamo q (x) e q 2 (x) numericamente nell intervallo [0.9998,.0002] utilizzando una calcolatrice che lavora con 0 cifre significative. 0.5 0.5 Esercizio Calcolare q (x) e q 2 (x) numericamente nell intervallo [0.9998,.0002] utilizzando il calcolatore. Suggerimento: scrivere un semplice programma con un qualsiasi linguaggio di programmazione (BASIC, FORTRAN, C++,.) o in un ambiente software integrato (Derive, Matlab, )..5 x 0 26 0.5 x 0 4 0.5 0 0.5 x q (x) q 2 (x) Valore esatto Errore di arrotondamento 0 0 0 0.000 0 28 0 0 0 28 0 0 8.5 0.9998 0.9999.000.0002.5 0.9998 0.9999.000.0002 Nota: Il calcolatore lavora in genere con 5 cifre significative. 9 Script MATLAB Costruzione dei vettori x, q, q2 x = linspace(0.9998,.0002); q = (x - ).^7; q2 = x.^7-7*x.^6+2*x.^5-5*x.^4+5*x.^-2*x.^2+7*x-; Stampa della tabella format long [x q q2 abs(q -q2 )] Grafici figure() plot(x,q, b ) figure(2) plot(x,q2, r ) Cancellazione numerica Consideriamo l equazione di secondo grado ax 2 + bx + c =0 Dall algebra sappiamo che se Δ=b 2 4ac > 0, l equazione ha 2 soluzioni reali distinte: x = b Δ 2a x 2 = b+ Δ 2a 0
Calcoliamo x e x 2 numericamente con la calcolatrice. a, b, c x x 2 ax 2 + bx + c ax 2 2 + bx 2 + c - - 0 0 4 4.945 0 5 206.4999506.42 0 6 8.9 0 6 206.5 0.002 Calcoliamo ora le soluzioni con le formule x = 2c b+ Δ, x 2 = ax c. a, b, c x x 2 ax 2 + bx + c ax 2 2 + bx 2 + c - - 0 0 4 4.944 0 5 206.49995 0 9.66 0 5 206.5 (macchina) 0.002 Esercizio. Ripetere il calcolo delle radici con la propria calcolatrice e con il calcolatore. Confrontare i risultati ottenuti con quelli dati nelle tabelle. 2 Cosa è successo? Per calcolare x 2 bisogna calcolare la quantità b Δ. Primo caso: a =, b =4,c= ggggggg Δ=2 Secondo caso: a =, b = 206.5,c=0.002 ggggggg Δ = 206.49990 In questa caso b è negativo, quindi bisogna calcolare la differenza tra due numeri molto vicini cancellazione numerica. Script MATLAB Calcolo delle radici di un equazione di II grado Dati di input a = input( a: ); b = input( b: ); c = input( c: ); Calcolo del discriminante Delta = b^2-4*a*c; fprintf( Delta = -0.6g\n,Delta) Calcolo e stampa delle radici (formule standard) x = -(b+sqrt(delta))/(2*a); x2 = -(b-sqrt(delta))/(2*a); fprintf( Radici (formule standard)\n ) fprintf( x = -9.7g\t\t\t x2 = -9.7g\n,x,x2) Calcolo e stampa di a*x^2+b*x+c (formule standard) p = a*x^2+b*x+c; p2 = a*x2^2+b*x2+c; fprintf( a*x^2+b*x+c = -5.0g\t a*x2^2+b*x2+c = -5.0g\n,p,p2) 4 Calcolo e stampa delle radici (formule modificate) x = 2*c/(-b+sqrt(Delta)); x2 = c/(a*x); fprintf( Radici (formule modificate)\n ) fprintf( x = -9.7g\t\t x2 = -9.7g\n,x,x2) Calcolo e stampa di a*x^2+b*x+c (formule standard) p = a*x^2+b*x+c; p2 = a*x2^2+b*x2+c; fprintf( a*x^2+b*x+c = -5.0g\t a*x2^2+b*x2+c = -5.0g\n,p,p2) 5
Algoritmo Stabilità di un algoritmo L algoritmo è una successione di istruzioni, finita e non ambigua, che consente di ottenere risultati numerici a partire dai dati di input. L algoritmo viene implementato su calcolatore tramite un linguaggio di programmazione. Le istruzioni sono operazioni logiche o operazioni aritmetiche date seguendo la sintassi del linguaggio di programmazione scelto. 6 Anche se l errore di arrotondamento è piccolo, la sua propagazione attraverso i calcoli può avere effetti disastrosi. Gli errori di arrotondamento possono venire amplificati durante i calcoli così da rendere la soluzione numerica del tutto inaffidabile. In questo caso si dice che l algoritmo è instabile. Se gli errori di arrotondamento non vengono amplificati durante i calcoli si dice che l algoritmo è stabile. 7 Stabilità di un algoritmo: esempi Modello matematico: I n = e 0 xn e x dx Tramite ( integrazione per parti si ottiene I n = ) e e 0 nxn e x dx = ni n I 0 =0.622055882856 Numero macchina (4 cifre significative) I = I 0 =0.6787944744 I 2 = 2+2!I 0 = 2+2I 0 =0.2642476572 I = + 2!I 0 =4 6I 0 =0.20727664702865 e continuando I n = ni n = n( (n )I n 2 ) = = n + n(n )( (n 2)I n ) = = =+ n ( ) k n(n ) (n k +)+( ) n n!i 0 k= Algoritmo 2.5 2.5 0.5 e x xe x x 2 e x x e x dove I 0 = e 0 ex dx = e 0 0 0. 0.2 0. 0.4 0.5 0.6 0.7 0.8 0.9 x 8 9
I 25 =0 I 26 =.459786800000e + 00 Non è possibile!! 2.5 2.5 0.5 e x xe x 0 0 0. 0.2 0. 0.4 0.5 0.6 0.7 0.8 0.9 x x 2 e x x e x x 25 e x 20 Script MATLAB Calcolo dell integrale In Input n = input( n: ); Dati I0 = -/exp() Calcolo e stampa dell integrale somma = 0; for k=:n- somma = somma + (-)^k*factorial(n)/factorial(n-k); end In = + somma + (-)^n*factorial(n)*i0; fprintf( In = -9.7g\n,In) Nota. In alternativa, la sommatoria può essere calcolata utilizzando le istruzioni vettoriali di Matlab che sono più efficienti dell istruzione for k = :n-; somma=(-).^k.*factorial(n)./factorial(n-k); In = + sum(somma) + (-)^n*factorial(n)*i0; 2 n Algoritmo: I n =+ ( ) k n(n ) (n k +)+( ) n n!i 0 = f(i 0 ) k= Nei calcoli non abbiamo usato il valore esatto I0 =0.622055882856 ma il valore arrotondato I 0 =0.622055882856. Come si propaga nel calcolo di I n l errore di arrotondamento sul dato di input ɛ 0 = I0 I 0? Errore: ɛ n = In I n = f(i0 ) f(i 0)=( ) n n! ɛ }{{} 0 L algoritmo non è stabile Coeff. di amplificazione 22 Un nuovo algoritmo Modifichiamo l algoritmo nel modo seguente: I n = ni n I n = I n n I n 0 per n (comportamento corretto) Algoritmo: I N =0, I k = I k, k = N, N, k Come si propaga l errore di arrotondamento sul dato di input ɛ N = IN I N = IN? ɛ N = I N N ɛ N 2 = I N N I N N = ɛ N N I N N = ɛ N N(N ) A ogni passo l errore iniziale viene ridotto l algoritmo è stabile 2
I 0 =0 I (0) 25 =0.070862625288 I 5 =0 I (5) 25 =0.07086244274 I 0 =0 I (0) 26 =0.057587742504 I 5 =0 I (5) 26 =0.0575842498278 Nota: Si può stimare l errore di arrotondamento sul dato di output tramite la differenza tra due approssimazioni successive: ɛ 25 I 25 (5) I 25 (0) =.8e 009 ɛ 26 I (5) 26 I (0) 26 =4.76e 008 24 Condizionamento di un problema Consideriamo il problema del calcolo di una funzione di una variabile reale f in un generico punto x IR: y = f(x). x f y Vogliamo misurare quale effetto produce nel calcolo di y una perturbazione Δx = x x del dato di input. 25 Sviluppo in serie di Taylor: Δy = y y = f(x ) f(x) =f (x)δx + Errore relativo: Δy y f (x) f(x) Numero di condizionamento del problema: }{{} Δx = f (x)x f(x) C P := Δx x f (x)x f(x) Se C P è grande il problema è malcondizionato, cioè a piccole perturbazioni dei dati di input corrispondono grandi variazioni dei risultati. Se C P è piccolo il problema è ben condizionato. 26 Osservazioni sul condizionamento Il condizionamento non dipende dall algoritmo né dagli errori di arrotondamento. Il condizionamento dipende dal problema edaidati di input: uno stesso problema può essere ben condizionato per alcuni valori dei dati, ma mal condizionato per altri valori.
Condizionamento: esempi La soluzione del sistema lineare èdataday = α 2 = f(α), z = C y = C z = f (α)α y g (α)α z = = 2α 2 α 2 +α 2 α 2 (α 2 ) 000 900 800 700 600 500 400 00 200 y + αz = αy + z = 0 α α 2 = g(α). C y C z α =0.5555 α =0.5554 α =0.9998 α =0.9999 y =.446299444 C y =0.89 z = 0.80494 y =.44606705 z = 0.8045670 y = 2500.250025 z = 2499.749975 y = 5000.2500 C y = 5000 z = 4999.749987 00 0.995 0.9955 0.996 0.9965 0.997 0.9975 0.998 0.9985 0.999 0.9995 α 27 28 Suggerimento. Scrivere un programma per calcolare e graficare C y e C z in funzione di α in un intervallo dato. Utilizzare il programma per calcolare i coefficienti di amplificazioni in diversi intervalli. Cosa succede se l intervallo contiene il valore α =? Riferimenti bibliografici L. Gori, Calcolo Numerico: Cap., Par..,. (fino errore relativo), Esempio.4.2,.5 (escluso caso bidimensionale e condizionamento del calcolo di una radice),.6 (concetto di stabilità ed esempio.6.) 29