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.

6.6 Procedure intrinseche per gli array 355<br />

1. Riceve il numero n delle coppie di dati (x,y) ed i relativi valori dall’unità chiamante.<br />

2. Calcola le sommatorie di x, y, xy x 2 usando allo scopo le funzioni intrinseche SUM e<br />

DOT_PRODUCT.<br />

3. Calcola il valore dei coefficienti m e c.<br />

4. Restituisce in uscita i valori di m e di c all’unità chiamante.<br />

SUBROUTINE least_sq(x,y,n,m,c)<br />

! Scopo: calcolare i coefficienti della retta interpolante<br />

! ai minimi quadrati della dispersione di dati x-y<br />

IMPLICIT NONE<br />

! Variabili dummy<br />

INTEGER, INTENT(IN) :: n<br />

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

REAL, INTENT(OUT) :: m, c<br />

! Variabili locali<br />

REAL :: sum_x, sum_xsq, sum_xy, sum_y<br />

! Calcolo delle sommatorie<br />

sum_x=SUM(x)<br />

sum_y=SUM(y)<br />

sum_xy=DOT_PRODUCT(x,y)<br />

sum_xsq=DOT_PRODUCT(x,x)<br />

! Calcolo dei coefficienti<br />

m=(n*sum_xy-sum_x*sum_y)/(n*sum_xsq-sum_x*sum_x)<br />

c=(sum_y-m*sum_x)/n<br />

END SUBROUTINE least_sq<br />

MATMUL(MATRIX_A,MATRIX_B)<br />

Esegue il prodotto righe×colonne di due matrici numeriche o logiche.<br />

Gli argomenti MATRIX_A che MATRIX_B devono essere array dello stesso tipo e di rango uno o<br />

due (almeno uno dei due, però, deve avere rango due) ed inoltre è necessario che l’ampiezza della<br />

prima (o dell’unica) dimensione di MATRIX_B sia uguale all’ampiezza dell’ultima (o dell’unica)<br />

dimensione di MATRIX_A.<br />

<strong>Il</strong> rango e la forma, invece, dipendono dal rango e dalla forma degli argomenti, alla maniera<br />

seguente:<br />

• Se MATRIX_A ha forma (/n,m/) e MATRIX_B ha forma (/m,k/), allora il risultato sarà un<br />

array di rango due di forma (/n,k/).<br />

• Se MATRIX_A ha forma (/m/) e MATRIX_B ha forma (/m,k/), allora il risultato sarà un<br />

array di rango uno di forma (/k/).

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

Saved successfully!

Ooh no, something went wrong!