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.

354 Array Processing<br />

6.6.7 Procedure algebriche<br />

DOT_PRODUCT(VECTOR_A,VECTOR_B)<br />

Esegue il prodotto scalare di due vettori numerici (interi, reali o complessi) o logici aventi stessa<br />

dimensione.<br />

<strong>Il</strong> risultato è uno scalare il cui tipo dipende dai vettori operandi VECTOR_A e VECTOR_B. In<br />

particolare:<br />

• Se l’argomento VECTOR_A è di tipo INTEGER o REAL allora il risultato avrà valore pari a<br />

SUM(VECTOR_A*VECTOR_B).<br />

• Se l’argomento VECTOR_A è di tipo COMPLEX, allora il risultato avrà valore pari a<br />

SUM(CONJG(VECTOR_A)*VECTOR_B).<br />

• Se l’argomento VECTOR_A è di tipo LOGICAL, allora il risultato avrà valore pari a<br />

ANY(VECTOR_A.AND.VECTOR_B).<br />

Se gli array operandi hanno dimensione nulla, il risultato vale zero se essi sono di tipo numerico<br />

oppure .FALSE. se gli operandi sono di tipo logico.<br />

Esempi:<br />

L’istruzione:<br />

DOT_PRODUCT((/1,2,3/),(/3,4,5/))<br />

restituisce il valore 26 (infatti: (1×3)+(2×4)+(3×5)=26), l’istruzione:<br />

DOT_PRODUCT((/(1.0,2.0),(2.0,3.0)/),(/(1.0,1.0),(1.0,4.0)/))<br />

fornisce l’array (/17.0,4.0/), mentre l’istruzione:<br />

DOT_PRODUCT((/.TRUE.,.FALSE./),(/.FALSE.,.TRUE./))<br />

fornisce il valore .FALSE.<br />

La subroutine che segue rappresenta un interessante esempio di utilizzo della procedura<br />

intrinseca DOT_PRODUCT. <strong>Il</strong> suo scopo è quello di valutare i coefficienti della retta che interpola<br />

una dispersione di dati (x, y) forniti in forma di array, mediante la tecnica dei minimi quadrati.<br />

A tal proposito si ricorda che, detta y = mx + c la retta interpolante, i coefficienti m e c che<br />

garantiscono il miglior fitting dei dati sono valutabili tramite le relazioni:<br />

m = n n i=1 xiyi − ( n i=1 xi)( n i=1 yi)<br />

n n i=1 x2i − ( n 2<br />

i=1 xi)<br />

n i=1 c =<br />

yi − m n i=1 xi<br />

n<br />

In sintesi, ecco quale è l’effetto della subroutine least_sq:

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

Saved successfully!

Ooh no, something went wrong!