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.

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!