Derivazione ed integrazione numerica

30 giugno 2007

1 Derivazione numerica

Il teorema di Taylor [4, p.106] stabilisce che se : [ ] � è una funzione tale che

1. ^{(1)}sia continua in [ ];

2. ^{(2)}esista per ogni ( )

allora qualsiasi siano due punti distinti [ ], _{0} [ ] esiste tra e _{0} tale che

( ) ( _{0}) ^{(1)}( _{0}) ( _{0}) \frac{^{(2)}( )( _{0})^{2}}{2}  (1)

Essendo per ipotesi _{0}, si ha

(1)( _{0}) \frac{( ) ( _{0})}{( _{0})} \frac{^{(2)}( )( _{0})}{2}  (2)

Definito il rapporto incrementale

˜ (1)( _{0}) : \frac{( ) ( _{0})}{( _{0})}

si ha quindi

(1)( _{0}) ^{ ˜ (1)}( _{0}) \frac{^{(2)}( ( _{0})) ( _{0})}{2}  (3)

Se in particolare la quantità

\frac{^{(2)}( )( _{0})}{2}

è trascurabile allora

(1)( _{0}) ^{ ˜ (1)}( _{0})  (4)

D’altro canto questo non è l’unico metodo per calcolare la derivata. Posto _{}_{0} (con non necessariamente positivo), da (3)

(1)( _{0})  ^{  ˜ (1)}( _{}_{0}) \frac{^{(2)}( ( _{}_{0})) ( _{}_{0})}{2}  (5)
˜ (1)( _{}_{0}) \frac{^{(2)}( ( _{}_{0}))}{2}  (6)

Similmente per _{}_{0} abbiamo

(1)( _{0})  ^{  ˜ (1)}( _{}_{0}) \frac{^{(2)}( ( _{}_{0})) ( _{}_{0})}{2}  (7)
˜ (1)( _{}_{0}) \frac{^{(2)}( ( _{}_{0}))}{2}  (8)

Da (5) e (9), sommando ambo i membri

2 ^{(1)}( _{0})  ^{  ˜ (1)}( _{}_{0}) ^{ ˜ (1)}( _{}_{0})  (9)
\frac{^{(2)}( ( _{}_{0}))}{2} \frac{^{(2)}( ( _{}_{0}))}{2}  (10)

e quindi se è trascurabile

\frac{^{(2)}( ( _{}_{0}))}{2} \frac{^{(2)}( ( _{}_{0}))}{2}

abbiamo

2 ^{(1)}( _{0})  ^{  ˜ (1)}( _{}_{0}) ^{ ˜ (1)}( _{}_{0})  (11)
\frac{( _{}) ( _{0})}{( _{1} _{0})} \frac{( _{}) ( _{0})}{( _{}_{0})}  (12)
\frac{( _{}) ( _{0})}{}\frac{( _{}) ( _{0})}{( )}  (13)

Quindi, dopo facili operazioni otteniamo la formula alle differenze centrate

(1)( _{0}) \frac{( _{0} ) ( _{0} )}{2}  (14)

Vediamo come si comportano i due metodi illustrati in (4) e (14) mediante alcuni esempi in Matlab. Consideriamo il problema di calcolare la derivata della funzione ( ) exp( ) nel punto 1. Ricordiamo che ^{(1)}( ) exp( ) e quindi il valore da approssimare è exp(1). In particolare confrontiamo i due metodi sopracitati per valori di 2^{}con 1 50 e calcoliamo l’errore relativo compiuto. Salviamo in un file mydiff.m il seguente codice

% DERIVATA DELL'ESPONENZIALE.
x0=1;               % PTO IN CUI VALUTARE LA DERIVATA.
f1xesatta=exp(x0);  % VALORE ESATTO DERIVATA.
% METODO 1: RAPPORTO INCREMENTALE.
for index=1:50
    h=2^(-index);  % PASSO.
    x=x0+h;        % PUNTO "x"
    f1x(index)=(exp(x)-exp(x0))/h; % RAPP. INCREMENTALE.
    relerr1(index)=abs(f1xesatta-f1x(index))/abs(f1xesatta);
    fprintf('\n \t [x]: %5.5f [h]: %2.2e',x,h);
    fprintf('[rel.err.]: %2.2e',relerr1(index));

Figure 1: Grafico che illustra l’errore relativo compiuto dai metodi 1 (in rosso, col ) e dal metodo 2 (in nero, a tondini) nell’approssimare ^{(1)}(1) per ( ) exp( ).

end

% METODO 2.
for index=1:50
    h=2^(-index); % PASSO.
    xplus=x+h; xminus=x-h; % PUNTI VALUTAZIONE.
    f1x(index)=(exp(xplus)-exp(xminus))/(2*h); % APPROX. DER.
    relerr2(index)=abs(f1xesatta-f1x(index))/abs(f1xesatta);
    fprintf('\n \t [x]: %5.5f [h]: %2.2e',x,h);
    fprintf('[rel.err.]: %2.2e',relerr2(index));
end
% PLOT ERRORI
semilogy(1:50,relerr1,'r-+'); hold on
semilogy(1:50,relerr2,'k-o');

I grafici mostrano come entrambi i metodi siano instabili. Quando il passo è troppo piccolo, l’approssimazione di entrambe peggiora invece di migliorare. Nel grafico in scala semi-logaritmica, la curva in rosso coi rappresenta il primo metodo, quella in nero con i il secondo. Osserviamo che tra i due metodi il secondo sembra avere comunque performance migliori. Vediamo di giustificare questo fatto. Si può dimostrare che il primo metodo ha un errore assoluto del tipo

1 \frac{^{(2)}( )}{2} ( _{0})

mentre per il secondo si ha

2 \frac{^{2} ^{(3)}( _{1}) ^{(3)}( _{2})}{12} _{1} _{2} ( _{0} _{0} )

dove ( ) è il più piccolo intervallo aperto contenente e . Nel nostro caso essendo ^{( )}( ) exp( ) per ogni 0 1 2 3 , e poichè per 1 si ha exp( ) exp(1) deduciamo

1 \frac{exp(1)}{2}  (15)

2 \frac{^{2}exp(1)}{6}  (16)

Esercizio. Verificare se sono buone le stime dell’errore (15) e (16).

References

[1] V. Comincioli, Analisi Numerica, metodi modelli applicazioni, Mc Graw-Hill, 1990.

[2] J.H. Mathews e K.D. Fink, Numerical Methods using Matlab, Prentice Hall, 1999.

[3] A. Quarteroni e F. Saleri, Introduzione al calcolo scientifico, Springer Verlag, 2006.

[4] W. Rudin, Principi di analisi matematica, Mc Graw Hill, 1997.

[5] The MathWorks Inc., Numerical Computing with Matlab.