25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.18 Visibilità 307<br />

! Parametri formali<br />

REAL,INTENT(IN) :: a, b<br />

REAL,OPTIONAL,INTENT(IN) :: tolerance<br />

! Interface block per le funzioni esterne argomento<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 />

OPTIONAL df<br />

! Variabili locali<br />

REAL :: tol<br />

! *** Sezione esecutiva ***<br />

! Inizializzazione di tol<br />

IF (PRESENT(tolerance)) THEN<br />

tol = tolerance<br />

ELSE<br />

tol = default_tolerance<br />

END IF<br />

! Scelta del metodo da impiegare<br />

IF (PRESENT(df)) THEN ! Usa il metodo di Newton<br />

findRoot = newton((a+b)/2.,f,df,tol)<br />

ELSE ! Usa il metodo delle secanti<br />

findRoot = secant(a,b,f,tol)<br />

END IF<br />

END FUNCTION findRoot<br />

RECURSIVE FUNCTION secant(a,b,f,tol) RESULT(root)<br />

! *** Sezione dichiarativa ***<br />

IMPLICIT NONE<br />

! Tipo della funzione<br />

REAL :: root<br />

! Parametri formali<br />

REAL, INTENT(IN) :: a, b, tol<br />

! Interface block per la funzione esterna argomento<br />

INTERFACE

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

Saved successfully!

Ooh no, something went wrong!