Libri di Testo: • L. Gori: Calcolo Numerico, (IV Ed.) Ed. Kappa, 1999 • L. Gori, M.L. Lo Cascio: Esercizi di Calcolo Numerico, (II Ed.) Ed. Kappa, 1999 • A. Quarteroni, F. Saleri: Introduzione al Calcolo Scientifico, IIIa edizione Springer, 2006 • M.L. Lo Cascio: Fondamenti di Analisi Numerica, McGraw-Hill, 2008 Sito internet: • http://www.dis.uniroma1.it/~pmn/ Contatti: Riccardo Broglia Tel: 06.50299297 [email protected] Calcolo numerico: generalità Cosa si intende per calcolo numerico? Per calcolo numerico si intende quella branca della matematica che studia e sviluppa modelli e metodi al fine di risolvere problemi matematici tramite algoritmi numerici implementati in un calcolatore. Calcolo numerico: modellizzazione ed errori Problema Fisico ⇓ Astrazione ed ipotesi semplificative ( (errori i inerenti) i ti) Modello Matematico ⇓ Know How, fantasia e arte (errori di troncamento) Modello Numerico ⇓ Soluzione Numerica (errore computazionale) Algoritmo (stabilità) e computer (errori di arrotondamento) La soluzione numerica può essere accettata se e solo se si ha una stima degli errori di cui è certamente affetta Errore computazionale: definizioni • Errore troncamento: è dovuto alla discretizzazione di un di un problema matematico (passaggio dal continuo al discreto). • Errore arrotondamento: è dovuto alla precisione finita dei calcolatori, l l i cosìì come la l sua propagazione. i • Errore computazionale: è la somma degli errori di troncamento e di arrotondamento, arrotondamento argomenti di interesse fondamentale dell’analisi numerica. Detta x la soluzione approssimata e x* quella esatta: ε = x − x* ε r = ε / x = (x − x ) / x ⎫ ⎬ ε r ⋅100 = ε r % ⎭ * * Errore assoluto * Errore relativo Errore di arrotondamento: propagazione Calcolo di una funzione: Y = f ( x1 , x2 , ... , xn ) Nel caso di funzione di una variabile: Y − Y = f ( x) − f ( x ) * * S il Sviluppando d in i serie i la l f(x f( *) nell’intorno ll’i t di x: ( ) f ( x* ) ≈ f ( x ) + f x ( x ) x* − x + O(Δx 2 ) ε = x − x* 123 Δx = − ε Sostituendo: Y − Y * = Δxf x ( x) + O(Δx 2 ) ≤ εf x ( x) = ε f x ( x) Errore di arrotondamento: propagazione Formula generale di propagazione degli errori: ΔY ≤ ε f x (x) Nel caso di funzione di più variabili: ΔY ≤ ε1 f x1 ( x1 , ... , xn ) + L + ε n f xn ( x1 , ... , xn ) ε i = xi − xi* Errore sul dato i-esimo Esercizio: esprimere l’errore commesso per le operazioni di somma algebrica (cancellazione numerica), prodotto e rapporto tra due valori. valori Propagazione: esempio Esempio 1.4.1: x1 = 0.1234 ε1 ≤ 0.5 ⋅10 −4 x2 = 0.1233 ε 2 ≤ 0.5 ⋅10 − 4 f ( x1 , x2 ) = x1 − x2 = .0001 ε1 + ε 2 −4 10 ΔY ≤ = − 4 = 1 ⇒ ε r = 100% Y x1 − x2 10 Propagazione: esempio Esempio 1.4.2: determinare le radici di x2-2ax+b=0 con a>0 Se a>>b allora: x2 = a − a 2 − b ≈ a − a = 0 Esempio: a=103.25 e b=1.021 eseguendo i calcoli con sette cifre if significative: i ifi i x2 = 103.25 − 10660.56(25) − 1.021 = 0.005 Verifica: x22 − 2ax2 + b ≈ −0.115 10 −1 Come ovviare? x1 x2 = b ⇒ x2 = b a + a2 − b = 1.021 ≈ 0.00494443 103.25 + 103.245 Verifica: x22 − 2ax2 + b ≈ −0.27 10 −4 Propagazione: esempio Esempio: f1 ( x) = ( x − 1) 7 f 2 ( x) = x 7 − 7 x 6 + 21x 5 − 35 x 4 + 35 x 3 − 21x 2 + 7 x − 1 Le due funzioni sono identiche in senso algebrico; calcolo di f1(x) e di f2(x) per x∈[0.9998,1.0002]: >>x=linspace(0.9998,1.0002,100) >> f1=(x-1).^7; >> f2=x.^7-7*x.^6+21*x.^5-35*x.^4+35*x.^3-21*x.^2+7*x-1; >> plot(x,f1) >> plot(x,f2) l t( f2) Propagazione: esempio 1.5 x 10 -26 1.5 f1(x) 1 0.5 0 0 -0.5 -0.5 -1 -1 0.9999 1 -14 f2((x)) 1 0.5 -1.5 0.9998 x 10 1.0001 1.0002 -1.5 0.9998 0.9999 f1 ( x) = ( x − 1) 7 1 1.0001 1.0002 Propagazione: condizionamento Consideriamo il calcolo di una funzione y=f(x); e valutiamo l i quale l è l’effetto l ff sull risultato i l finale fi l di una perturbazione Δx=x-x* del dato di input: ΔY ≤ Δx f x ( x) ⇒ ΔY Y ≤ Δx f x ( x) f (x ( x) ΔY Δx xff x ( x) Δx ≤ = Cp Y x f ( x) x Cp: numero di condizionamento del pproblema Propagazione: condizionamento ΔY Δx ≤ Cp Y x xff x ( x) Cp = f ( x) Se Cp è “grande” il problema è mal condizionato, ossia a ppiccole pperturbazione dei dati iniziali si hanno ggrandi variazioni dei risultati. Viceversa se Cp è “piccolo”, il problema è ben condizionato. Il condizionamento non dipende dall’algoritmo usato, dipende dal problema (f(x)) e dai dati di ingresso (x). Un problema può essere ben condizionato per certi valori di input e mal condizionato per altri. Condizionamento: esempio Esempio 1.5.1: ⎧ y + αz = 1 ⎨ ⎩αy + z = 0 ⇒ 2 (α ≠1) αf ′(α ) 2α 2 Cy = = f (α ) 1−α 2 ⎧ y = f (α ) = 1 /(1 − α 2 ) ⎨ 2 z = g ( α ) = − α /( 1 − α ) ⎩ αg ′(α ) 1 + α 2 Cz = = g (α ) 1−α 2 Il problema del calcolo di y e z è mal condizionato per valori di α prossimi ad 1. Condizionamento: esempio α y z 0.5555 1.446299444 -0.803419341 0.803419341 0.5554 1.446067105 -0.803145670 0.9998 2500.25 -2499.75 0.9999 5000.25 -4999.75 |Δα/α| |Δy/y| |Δz/z| 1.8 10-4 1.6 10-4 3.4 10-4 1.0 10-44 1.0 1.0 Esercizio: stimare il condizionamento del problema del calcolo della y e della z nei due casi. Algoritmo: definizione Il problema numerico è risolto tramite un algoritmo: ossia una successione di operazioni logiche e aritmetiche finita e non ambigua, che consente di ottenere il risultato numerico a partire dai dati di input. Oltre alla tendenza del problema a propagare gli errori sui dati bisogna tenere conto che l’uso di un algoritmo di calcolo dati, comporta un errore di approssimazione (troncamento dei dati numerici), fornendo un dato finale approssimato fa(X): l’errore totale è esprimibile come: E f = f a ( X ) − f ( X * ) = f a ( X ) − f ( X ) + f ( X ) − f ( X * ) = Ea + Ed Ea = f a ( X ) − f ( X ) Ed = f ( X ) − f ( X * ) Errore algoritmico Errore di propagazione sui dati Stabilità degli algoritmi: definizione Stabilità numerica: sensibilità di un algoritmo alla perturbazione dei dati di input. Un algoritmo è detto stabile se gli errori assoluti sui dati non sono amplificati durante l’elaborazione. Viceversa, l’algoritmo è detto instabile. Stabilità di un algoritmo: esempio 1 1 n x In = 0 Esempio 1.6.1: I n = ∫0 x e dx I n > 0, lim n →∞ e Integrando per parti: 1 1⎛ I n = 1 − nI n −1 I n = ⎜ e − n ∫ x n −1e x dx ⎞⎟ = 1 − nI n −1 = 0 ⎠ e⎝ = 1 − n(1 − (n − 1) I n − 2 ) = 1 − n + n(n − 1)(1 − (n − 2) I n −3 ) = L n −1 = 1 + ∑ (−1) k n(n − 1) L (n − k + 1) + (−1) n n! I 0 Algoritmo Al it k =1 1 1 x 1 Con: I o = ∫0 e dx = (e − 1) = 0.63212055882856..... e e Stabilità di un algoritmo: esempio I 0 = 0.63212055882856 14 cifre significative I1 = 1 − I 0 = 0.36787944117144 I 2 = 1 − 2 + 2! I 0 = 0.26424111765712 I 3 = 1 − 3 + 3 ⋅ 2 − 3! I 0 = 0.20727664702865 M M I 25 = 0 I 26 = −3.436 ⋅1010 (!!!!) 1 0.8 yn ( x) = 1 n x x e e 06 0.6 n=0 0.4 0.2 0 0 n=1 n=2 n=4 n=26 0 25 0.25 05 0.5 0 75 0.75 1 Stabilità di un algoritmo: esempio Propagazione dell’errore iniziale ε0=I0-I0* nel calcolo di In? L’algoritmo l i è lineare, li quindi: i di ε n = I n − I n* = f ( I 0 ) − f ( I 0* ) = (−1) n n!( I 0 − I 0* ) = (−1) n n!ε 0 [ ] ) = 1 + ∑ [(−1) n(n − 1) L (n − k + 1)]+ (−1) n! I f ( I 0 ) = 1 + ∑k =1 (−1) k n(n − 1) L (n − k + 1) + (−1) n n! I 0 n −1 f (I * 0 n −1 k =1 k n * 0 Il termine (-1)nn!, rapporto tra l’errore al “passo” n e quello al “passo” passo 0, 0 è detto coefficiente di amplificazione dell dell’ererrore iniziale. L’errore cresce con n, l’algoritmo è instabile. Stabilità di un algoritmo: esempio L’algoritmo può essere così modificato: I n = 1 − nI n −1 1− In ⇒ I n −1 = n I n = 0 e posto IN=0 per N fissato: Sapendo che: lim n →∞ 1− Ik I N = 0 I k −1 = k k = N , N − 1, K Stabilità di un algoritmo: esempio Propagazione dell’errore: * * 1 − I 1 − I I − I εN * N N N N ε N −1 = I N −1 − I N −1 = − = =− N N N N I N −1 − I N* −1 ε N −1 εN =− = ε N −2 = N −1 N − 1 N ( N − 1) L’errore si riduce l’algoritmo è stabile. Esercizio: valutare il valore approssimato di I0 con N=10 e N=15, stimare l’errore commesso; usare tale algoritmo per valutare I7. calcolare I7 a partire da un valore di I0 accurato alla quarta cifra decimale con il metodo instabile.