Re: Fortran e i numeri casuali
Vi ringrazio tutti per i consigli...
In questi giorni ho comunque ricevuto indicazioni anche dal prof, che non
ero riuscito a contattare in precedenza.
Ecco cosa ho risolto:
pare che FORTRAN abbia una subroutine implicita chiamata SRAND( ), che ha
bisogno di un arogmento (il famoso ISEED, o come altrimenti lo si voglia
chiamare). La subroutine in questione ha l'effetto, quando invocata, di
stabilire da quale serie casuale la funzione RAND( ) estrarr� da quel punto
del programma in poi i numeri casuali. Ovviamente l'argomento di SRAND( )
indica proprio la serie casuale che verr� scelta. Quindi io inserisco
all'inizio del listato le istruzioni:
time = secnds(130.0)
time = 1000*time
iseed = 2*(INT(time)) + 1
CALL SRAND(iseed)
la cui sintassi � un po' ridondante ma rende l'idea. L'argomento
dell'istruzione SECNDS (che mi d� un tempo, preso da non so quale
riferimento temporale) non so se abbia limitazioni, comunque quello che ho
messo funziona. Le istruzioni che portano dal valore di TIME al valore di
ISEED sono dovute al fatto che ISEED dev'essere un numero intero, dispari e
possibilmente molto grande. Quindi ogni volta che eseguo il mio programma
l'istruzione RAND( ) prender� i numeri dalla serie che sar� stata scelta
(casualmente) all'inizio dalla subroutine SRAND(ISEED). L'argomento di
RAND( ) lo lascio vuoto e funziona: se ci metto qualcosa dentro, non mi
compila il programma.
IMPORTANTE: se la subroutine SRAND( ) non viene invocata, o viene invocata
con argomento vuoto, FORTRAN sottintende che sia stata chiamata con
argomento 1. Questo spiega perch� l'istruzione RAND( ) funzionasse comunque
e mi desse sempre gli stressi numeri.
Vi trovate con questa soluzione?
Ancora grazie a tutti.
Antonio
Received on Wed Feb 26 2003 - 23:48:12 CET
This archive was generated by hypermail 2.3.0
: Fri Nov 08 2024 - 05:10:30 CET