25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

310 Unità di Programma<br />

x = findRoot(a,b,g,tolerance=1.0E-10)<br />

serve ancora ad invocare la funzione secant, ma con un valore della tolleranza ben preciso.<br />

Si noti che, in quest’ultimo caso, se non si fosse usata la parola chiave tolerance si sarebbe<br />

presentata una condizione ambigua di errore in quanto il valore1.0E-10 sarebbe stato associato<br />

al termine df (che nella lista dei parametri formali di findRoot occupa la quarta posizione)<br />

mentre per la tolleranza si sarebbe erroneamente utilizzato il valore di default.<br />

Di seguito si riporta un programma per testare il modulo RootFinders, una funzione di<br />

prova di cui valutare la radice e la sua derivata:<br />

PROGRAM Test_Root<br />

! Scopo: verificare l’efficacia delle funzioni definite<br />

! nel modulo RootFinders<br />

USE RootFinders<br />

IMPLICIT NONE<br />

REAL a, b<br />

REAL, PARAMETER :: tol = 1.0E-6<br />

INTERFACE<br />

FUNCTION f(x)<br />

IMPLICIT NONE<br />

REAL :: f<br />

REAL,INTENT(IN) :: x<br />

END FUNCTION f<br />

FUNCTION df(x)<br />

IMPLICIT NONE<br />

REAL :: df<br />

REAL, INTENT(IN) :: x<br />

END FUNCTION df<br />

END INTERFACE<br />

!<br />

PRINT*, "Inserisci gli estremi sinistro e destro &<br />

&dell’intervallo di tentativo: "<br />

READ(*,*) a, b<br />

PRINT*, "Metodo di Newton - La radice di f vale: ", findRoot(a,b,f,df)<br />

PRINT*, "Metodo delle secanti - La radice di f vale: ", findRoot(a,b,f)<br />

END PROGRAM Test_Root<br />

FUNCTION f(x)<br />

! Funzione esterna di cui valutare la radice<br />

IMPLICIT NONE<br />

REAL :: f<br />

REAL,INTENT(IN) :: x<br />

f = x+EXP(x)<br />

END FUNCTION f

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!