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.

242 Unità di Programma<br />

– abbia un parametro formale che sia un array fittizio di forma presunta, un puntatore<br />

oppure un target.<br />

– faccia parte di una lista di argomenti (in questo caso l’interface block è raccomandato<br />

ma non obbligatorio).<br />

<strong>Il</strong> programma che segue, concepito per la risoluzione di una equazione non lineare con il classico<br />

metodo di Newton-Raphson, rappresenta un esempio di utilizzo di funzioni esterne la cui<br />

interfaccia sia resa esplicita attraverso l’uso di un interface block. Si ricorda che il metodo di<br />

Newton-Raphson si basa sull’applicazione della formula iterativa:<br />

xi+1 = xi + f(xi)<br />

f ′ (xi)<br />

la quale, a partire da un valore iniziale x0, produce una successione di valori x1, x2, . . . che,<br />

in molti casi, si caratterizza per una rapida convergenza verso un’approssimazione della radice<br />

x della funzione f(x). L’efficacia e la rapidità del metodo dipendono, comunque, anche dalla<br />

scelta del valore iniziale e dalle caratteristiche della funzione nell’intorno della radice.<br />

PROGRAM main<br />

IMPLICIT NONE<br />

INTEGER, PARAMETER :: dp=KIND(1D0)<br />

REAL(KIND=dp) :: x, eps<br />

INTEGER :: nmax<br />

! LEGENDA:<br />

! eps: approssimazione richiesta<br />

! nmax: numero massimo di iterazioni<br />

! x: (IN) valore di tentativo / (OUT) radice della funzione<br />

INTERFACE<br />

FUNCTION f(x)<br />

IMPLICIT NONE<br />

INTEGER, PARAMETER :: dp=KIND(1D0)<br />

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

REAL(KIND=dp) :: f<br />

END FUNCTION f<br />

!<br />

FUNCTION df(x)<br />

IMPLICIT NONE<br />

INTEGER, PARAMETER :: dp=KIND(1D0)<br />

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

REAL(KIND=dp) :: df<br />

END FUNCTION df<br />

!<br />

SUBROUTINE newton(f,df,x,nmax,eps)

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

Saved successfully!

Ooh no, something went wrong!