Il seguente programma Fortran per il calcolo della derivata della funzione
x2 nel punto x=1 usando tre formule diverse per il
rapporto incrementale è quello utilizzato nella lezione. Dove si vedono risultati
numerici strani o sbagliati, si può provare ad individuare la parte del
calcolo che ne è all' origine. (Una tecnica di base di identificazione
dei problemi consiste nell' inserire varie istruzioni di print nel sorgente
per controllare a che punto dell' esecuzione insorge la condizione di errore).
In particolare cercare di rispondere alle domande: a) quale istruzione del
programma crea le condizioni per le stranezze numeriche? b)
quale formula appare più accurata ? c) cosa cambia se si usa un
incremento di partenza (variabile deltax0) diverso (p.es. 0.2 o 0.25)? d) e se la funzione fosse exp(x)?
Non è richiesto di elaborare teorie o spiegare il perché di quanto si osserva,
solo di identificare la parte del calcolo che dà origine all' inaccuratezza dei
risultati e accumulare evidenza numerica del comportamento.
program der
implicit none
real :: x,xp,xm, f,fp, fm, deriv1,deriv2,deriv3, deltax,deltax0
integer ::i
x = 1.0
deltax0 = 0.1
do i = 1,20
deltax = deltax0**i
xp = x + deltax
xm = x - deltax
f = x**2
fp = xp**2
fm = xm**2
deriv1 = ( fp - f ) / deltax ! f'(x)=lim(deltax->0) (f(x+deltax)-f(x))/deltax
deriv2 = ( fp - f ) / ( xp - x ) ! f'(x)=lim(deltax->0) (f(x+deltax)-f(x))/((x+deltax)-x)
deriv3 = ( fp - fm ) / (2*deltax)! f'(x)=lim(deltax->0) (f(x+deltax)-f(x-deltax))/(2*deltax)
print *, i,deltax, deriv1,deriv2, deriv3
end do
end program der