Derivazione numerica 1 A Sommariva Keywords: Derivazione numerica Differenza in avanti Rapporto incrementale simmetrico Estrapolazione Revisione: 5 giugno 019 1 Il problema della derivazione numerica Problema 11 (Derivazione numerica) Il problema della derivazione numerica consiste nell approssimare la derivata di una funzione f in un certo punto x 0, ovvero (qualora esista) f (x 0 ) = Df(x 0 ) = lim x x 0 f(x) f(x 0 ) x x 0 (1) Si potrebbe approssimare f con una successione di funzioni f n facili da derivare e poi differenziare f n, valutandola nel punto x 0 Purtroppo, dist(f n, f) 0 dist(df n, Df) 0, n + ce si può pure leggere come esistono f e f n arbitrariamente vicine, ma con derivate f e f n arbitrariamente distanti, fenomeno noto come instabilità dell operatore di derivazione (nel continuo) Quale esempio, consideriamo la successione f n (x) = 1 sin(nx), x [0, 1] () n Osserviamo ce essendo sin(x) [ 1, 1] qualora x [0, 1] abbiamo 1 n f n(x) = 1 n sin(nx) 1 n e sicuramente, detta f la funzione costantemente nulla abbiamo f n puntualmente ma ance uniformemente visto ce max 1 x [0,1] n sin(nx) 0 1 n 0 Osserviamo ce f non solo 1
la derivata di f è la funzione costantemente nulla, la derivata di f n è f n(x) = cos(nx) Questo implica ce ma non è vero ce in quanto non è infinitesima f n f, f n f, uniformemente uniformemente max cos(nx) 0 = max cos(nx) x [a,b] x [a,b] Commento 1 Questo non vuol dire ce se f e f n arbitrariamente vicine allora le derivate f e f n sono arbitrariamente distanti, e quindi possiamo sperare ce sotto certe ipotesi su f, se f n sono scelte bene e sono vicine a f, allora pure f n e f sono vicine Ad esempio, se (a, b) è un intervallo limitato e s 3, n è un interpolante spline cubica di f C 4 (a, b), nei nodi determinati dalla suddivisione n = {x k } con x k = a + k(b a)/n, k = 0,, n, ovvero punti equispaziati con passo n = (b a)/n, la successione di splines cubice {s 3, n } n converge a f uniformemente, {s 3, n } n converge a f uniformemente In effetti, esiste una costante c 1 tale ce 0 max f (x) s 3, x [a,b] n (x) c 1 3 n max f (4) (b a) 3 (x) = c 1 x [a,b] n 3 max f (4) (x) x [a,b] e quindi per quanto visto precedentemente e per il teorema del confronto, deduciamo la convergenza uniforme Sia f una funzione derivabile nell intervallo [a, b] e consideriamo il rapporto incrementale δ + (f, ), detto tecnicamente differenza in avanti, di una funzione f almeno derivabile, ovvero per un fissato > 0, e supposto x, x + [a, b], δ + (f, x, ) := f(x + ) f(x) (3) (cf []) In particolare, se f C ([a, b]) e x [a, b] allora, dalla formula di Taylor, f(x + ) = f(x) + f (x) + f (ξ x )/, ξ x (x, x + ) per cui riarrangiando i termini
δ + (f, x, ) = f (x) + f (ξ x )/, ξ x (x, x + ) Per il teorema di Weierstrass, essendo f C([a, b]) e C([a, b]), esiste finito e quindi, essendo ricaviamo ce se x + [a, b] allora M = max x [a,b] f (x) / 0 δ + (f, x, ) f (x) = f (ξ x ) 0 δ + (f, x, ) f (x) f (ξ x ) M (4) per cui, per il teorema del confronto, se 0 allora δ + (f, x, ) f (x) 0 In altri termini, ci verrebbe da credere ce utilizzando passi sempre più piccoli abbiamo approssimazioni sempre migliori della derivata prima, in un punto arbitrario dell intervallo [a, b] Numericamente, le cose vanno in modo diverso La funzione f non viene sempre valutata esattamente, ed ogni volta calcoliamo invece di δ + (f, x, ) = un rapporto incrementale perturbato f(x + ) f(x), δ + (f, x, ) = f(x + ) f(x) e abbiamo, sottraendo e aggiungendo δ + (f, x, ), f (x) δ + (f, x, ) = (f (x) δ + (f, x, )) + (δ + (f, x, ) δ + (f, x, )) f (x) δ + (f, x, ) + δ + (f, x, ) δ + (f, x, ) Osserviamo ce se ɛ è il massimo errore compiuto nel valutare la funzione δ + (f, x, ) δ f(x + ) f(x) + (f, x, ) = f(x + ) f(x) f(x + ) = f(x + ) f(x) f(x) f(x + ) f(x + ) + f(x) f(x) ɛ Ricordiamo ce f (x) δ + (f, x, ) f (x) δ + (f, x, ) + δ + (f, x, ) δ + (f, x, ) 3
Se M = max x [a,b] f (x), x+ [a, b], allora δ + (f, x, ) f (x) M Di conseguenza f (x) δ + (f, x, ) f (x) δ + (f, x, ) + δ + (f, x, ) δ + (f, x, ) M + ɛ (5) Commento 13 Il fatto ce f (x) δ + (f, x, ) M + ɛ dice ce numericamente, se 0 può accadere ce fino ad un certo 0 otteniamo approssimazioni della derivata in x sempre migliori, ma poi diventando per piccolo rilevante la quantità ɛ, i risultati cominciano a peggiorare Siccome l analisi viene fatta per 0, e l unica riciesta è ce sia x +, x [a, b], generalmente [a, b] è un intervallo con una piccola ampiezza, contenente x e possiamo pensare quindi ce se la derivata seconda non varia troppo vicino a x, ovvero sia M f (x) Inoltre, visto ce la funzione g() := M + ɛ a minimo in = ɛ M, si suggerisce di non scegliere numericamente valori di più piccoli di con = ɛ M (6) Esempio Derivare in x 0 = 0 la funzione f(x) = exp(x) la cui derivata è f (x) = exp(x), calcolando exp() exp(0) δ + (f, x, ) = Il valore desiderato è f (0) = exp(0) = 1 Otteniamo i risultati della tabella e della figura, dove valutiamo E (f, 0) = δ + (f, x, ) 1 per = 10 1,, 10 6 Nel nostro caso, dalla definizione di numero maccina, e dal fatto ce exp() 1, ci possiamo aspettare ce l errore compiuto nel valutare exp() sia pari alla precisione di maccina, ovvero ɛ = 10 16 Visto ce M exp(0) = 1, ci aspettiamo ce il passo critico sia ɛ = 14 10 8 M come confermato dagli esperimenti numerici 4
E (f, 0) E (f, 0) 10e 01 5171e 0 10e 14 7993e 04 10e 0 5017e 03 10e 15 110e 01 10e 03 500e 04 10e 16 1000e + 00 10e 04 5000e 05 10e 17 1000e + 00 10e 05 5000e 06 10e 18 1000e + 00 10e 06 5000e 07 10e 19 1000e + 00 10e 07 4943e 08 10e 0 1000e + 00 10e 08 6077e 09 10e 1 1000e + 00 10e 09 874e 08 10e 1000e + 00 10e 10 874e 08 10e 3 1000e + 00 10e 11 874e 08 10e 4 1000e + 00 10e 1 8890e 05 10e 5 1000e + 00 10e 13 7993e 04 10e 6 1000e + 00 Tabella 1: Valutazione dell errore E (f, 0), f(x) = exp(x), per alcuni passi L errore degrada a partire da circa = 10e 08 10 0 10-6 10-10 -7 10-4 10-8 10-6 10-9 10-8 10-1 10-30 10-5 10-0 10-15 10-5 10 0 10-11 10-9 10-8 10-7 10-6 Figura 1: A sinistra, grafico in scala semilogaritmica dell errore E (f, 0), f(x) = exp(x), per alcuni passi A destra lo studio in scala loglog, attorno al valore = 10 8, in cui si vede come già vicino a = 10 7 incomincino a esserci problemi di convergenza Esempio Derivare in x 0 = 5 la funzione funzione di Runge f(x) = 1 1+x, x R la cui derivata è f (x) = x (1+x ), calcolando δ + (f, x, ) = f(x + ) f(x) Il valore desiderato è f (5) = 10 6 = 001479899408840 Approssimiamo f (x 0 ), calcolando δ + (f, 5, ) = f(5 + ) f(5) Otteniamo i risultati della tabella, dove valutiamo E (f, 5) = δ + (f, 5, ) f (5) 5
per = 1, 10 1,, 10 15 Come nel caso precedente, per < 10 8 i valori della derivata cominciano a degradare E (f, 0) E (f, 0) 10e + 00 3358e 03 10e 08 58e 10 10e 01 4108e 04 10e 09 381e 09 10e 0 400e 05 10e 10 1150e 08 10e 03 409e 06 10e 11 81e 07 10e 04 410e 07 10e 1 497e 07 10e 05 410e 08 10e 13 7159e 05 10e 06 410e 09 10e 14 831e 04 10e 07 3913e 10 10e 15 8645e 03 Tabella : A sinistra, grafico in scala semilogaritmica dell errore E (f, 0), f(x) = 1/(1 + x ), per alcuni passi A destra lo studio in scala loglog, attorno al valore = 10 8, in cui si vede come già vicino a = 10 7 incomincino a esserci problemi di convergenza 10-10 -8 10-3 10-4 10-9 10-5 10-6 10-7 10-8 10-9 10-11 10-11 10-15 10-5 10 0 10-1 10-9 10-8 10-7 Figura : Errore E (f, 0) per alcuni passi Zoom attorno al valore = 10 8 in cui si vede come tra = 10 7 e = 10 8 incomincino a esserci problemi di convergenza Supponiamo f C 3 ([a, b]) e ce x, x + [a, b] Allora, per ξ + (x, x + ) abbiamo f(x + ) = f(x) + f (1) (x) + f () (x) per ξ (x, x) abbiamo Sottraendo membro a membro, f(x ) = f(x) f (1) (x) + f () (x) + 3 f (3) (ξ + ), 6 3 f (3) (ξ + ) 6 f(x + ) f(x ) = f (1) (x) + 3 f (3) (ξ + ) + f (3) (ξ + ) 6 Dal teorema dei valori intermedi, la funzione assume tutti i valori nell intervallo [min(f (3) (ξ ), f (3) (ξ + )), max(f (3) (ξ ), f (3) (ξ + ))] 6
e quindi in particolare il loro valore medio Quindi possiamo asserire ce esiste ξ (x, x + ) tale ce e di conseguenza f (3) (ξ) = f (3) (ξ + ) + f (3) (ξ ) da cui riarrangiando i termini Da f(x + ) f(x ) = f (1) (x) + 3 f (3) (ξ) 3 δ (f, x, ) = δ (f, x, ) = f(x + ) f(x ) f(x + ) f(x ) se M 3 = max x (a,b) f (3) (x) abbiamo 0 f(x + ) f(x ) = f (1) (x) + 6 f (3) (ξ) = f (1) (x) + f (3) (ξ) f (1) (x) = f (3) (ξ) M 3 (7) da cui, per il teorema del confronto lim f(x + ) f(x ) 0 f (1) (x) = 0 e quindi lim δ (f, x, ) = f (1) (x) 0 Come nel caso precedente, questo risultato teorico non trova sempre riscontro nella pratica numerica La funzione f non viene sempre valutata esattamente, ed ogni volta calcoliamo invece di δ (f, x, ) = f(x+) f(x ) δ (f, x, ) = f(x + ) f(x ) e abbiamo f (x) δ (f, x, ) = f (x) δ (f, x, ) + δ (f, x, ) δ (f, x, ) f (x) δ (f, x, ) + δ (f, x, ) δ (f, x, ) (8) 7
Se ɛ è il massimo errore compiuto nel valutare la funzione δ (f, x, ) δ f(x + ) f(x ) (f, x, ) = f(x + ) f(x ) f(x + ) f(x + ) + f(x ) f(x ) ɛ + ɛ = ɛ (9), essendo f (x) δ (f, x, ) f (x) δ (f, x, ) + δ (f, x, ) δ (f, x, ) se M 3 = max s [a,b] f (3) (s) abbiamo ricaviamo f(x + ) f(x ) f (1) (x) M 3 δ (f, x, ) δ (f, x, ) f (x) δ (f, x, ) + δ (f, x, ) δ (f, x, ) M 3 + ɛ (10) Siccome l analisi viene fatta per 0, e l unica riciesta è ce sia x +, x [a, b], generalmente possiamo pensare ad [a, b] come ad un intervallo di piccola ampiezza e contenente x al suo interno Di conseguenza ce se la derivata terza non varia troppo vicino a x, sia M f (3) (x) In particolare, visto ce la funzione a minimo in g () := M 3 + ɛ = 3 ɛ M 3, si suggerisce di non scegliere numericamente valori di più piccoli di con = 3 ɛ M 3 (11) 8
Esempio Derivare in x 0 = 0 la funzione f(x) = exp(x) la cui derivata è f (x) = exp(x), calcolando δ (f, 0, ) = f(0 + ) f(0 ) Il valore desiderato è f (0) = exp(0) = 1 = exp() exp( ) Otteniamo i risultati della tabella e della figura, dove valutiamo E (f, 0) = δ (f, 0, ) 1 per = 10 0,, 10 5, ce evidenziano un degradamento attorno a = 10 6 Osserviamo come gli errori, per < = (10 16 ) 1/3 6 10 6 siano circa ( /)M 3 = ( /) in quanto M 3 D 3 exp(0) = 1 Ad esempio per = 10 4 ci aspettiamo un errore di 5 10 9 non troppo distante, almeno come ordine, da 1667e 09 E (f, 0) E (f, 0) 10e + 00 175e 01 10e 13 44e 04 10e 01 1668e 03 10e 14 7993e 04 10e 0 1667e 05 10e 15 5471e 0 10e 03 1667e 07 10e 16 4449e 01 10e 04 1667e 09 10e 17 1000e + 00 10e 05 110e 11 10e 18 1000e + 00 10e 06 676e 11 10e 19 1000e + 00 10e 07 564e 10 10e 0 1000e + 00 10e 08 6077e 09 10e 1 1000e + 00 10e 09 73e 08 10e 1000e + 00 10e 10 874e 08 10e 3 1000e + 00 10e 11 874e 08 10e 4 1000e + 00 10e 1 3339e 05 10e 5 1000e + 00 Tabella 3: Valutazione dell errore E (f, 0), f(x) = exp(x), per alcuni passi L errore sembra degradare a partire da circa = 10e 06 Esempio Derivare in x 0 = 5 la funzione funzione di Runge f(x) = 1 1+x, x R la cui derivata è f (x) = x (1+x ), calcolando δ (f, 5, ) = f(5 + ) f(5 ) Il valore desiderato è f (5) = 001479899408840 Dopo qualce conto,f (3) (5) 63030033963963e 03 Nella tabella, valutiamo E (f, 5) = δ (f, 5, ) f (5) per = 1, 10 1,, 10 15 9
10 0 10-5 10-15 10-5 10-0 10-15 10-5 10 0 Figura 3: Errore E (f, 0), con f(x) = exp(x), per alcuni passi Si vede, partendo da destra, come l errore compiuto sia una funzione decrescente al diminuire di fino a 10 5 (e non 10 6 come dice la tabella), dopo di ce l andamento, pur meno prevedibile, è essenzialmente crescente, fornendo errori tendenzialmente maggiori al diminuire di da δ (f, x, ) f (x) = f (3) (ξ) /, ci aspettiamo un errore E (f, 5) 6 10 3 = 3 10 3 Ad esempio, per = 10 4 la stima offre 3 10 11 molto prossima al valore numerico effettivo di 1050e 11 (almeno come ordine!) Come nel caso precedente, per = (10 16 /00063) 1/3 = 10 5, da <= i valori della derivata cominciano a degradare E (f, 0) E (f, 0) 10e + 00 1105e 03 10e 08 111e 10 10e 01 1051e 05 10e 09 1088e 09 10e 0 1050e 07 10e 10 1150e 08 10e 03 1050e 09 10e 11 173e 07 10e 04 1050e 11 10e 1 497e 07 10e 05 193e 13 10e 13 455e 06 10e 06 1458e 1 10e 14 119e 04 10e 07 505e 11 10e 15 831e 04 Tabella 4: Valutazione dell errore E (f, 5), con f(x) = 1/(1 + x ), per alcuni passi L errore degrada a partire da circa = 10e 05 [1] K Atkinson, Introduction to Numerical Analysis, Wiley, 1989 [] Wikipedia, Finite Difference, ttps://enwikipediaorg/wiki/finite difference [3] Wikipedia, Numerical Differentiation, ttps://enwikipediaorg/wiki/numerical differentiation 10
10-10 -4 10-6 10-8 10-1 10-14 10-16 10-16 10-14 10-1 10-8 10-6 10-4 10-10 0 Figura 4: Errore E (f, 5), con f(x) = 1/(1 + x ), per alcuni passi Si vede, partendo da destra, come l errore compiuto sia una funzione decrescente al diminuire di fino a 10 5, dopo di ce l andamento, pur meno prevedibile, è essenzialmente crescente, fornendo errori tendenzialmente maggiori al diminuire di 11