Je requiers votre aide pour m'aider à optimiser un programme, car je ne vois pas comment faire.
Mon programme lit d'abord dans un fichier des données :
Ici il y a donc 8 lignes.
Ensuite je vais générer des nombres aléatoires, qui vont être stockés dans un vecteur ayant donc 8 coordonnées:
do i=1,8
RB(i)=rand(0)
end do
(ce n'est pas exactement RB(i)=rand(0) qui est effectué, il y a une opération avec les nombres lus dans le fichier, mais c'est juste pour donner une idée)
Le truc est que je ne garde le RB que si les RB(i) vérifie une certaine condition (à savoire si les RB(i) sont inférieurs et supérieurs à certains nombres). Du coup si la condition n'est pas vérifiée, je recommence le tirage de nombres aléatoires, et rebelote jusqu'à ce que la condition soit vérifiée.
Mon problème vient du temps d'execution du programme. Pour 8 lignes de données, le calcul de RB prend entre 0 seconde et 1min30s. Pour 10 lignes, cela met entre 0s et 15min. Pour 100 lignes mon ordi n'arrive pas à me calculer un RB dans un temps raisonnable. Et le but de mon programme est d'avoir 4000 lignes...
http://infohost.nmt.edu/tcc/help/lang/fortran/scaling.html dit : If you want an integer between i and j inclusive, use the expression:
int(rand(0)*(j+1-i))+i
For example, to get integers from 1 to 4, use:
int(rand(0)*4)+1
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
djocin dit : Le truc est que je ne garde le RB que si les RB(i) vérifie une certaine condition (à savoire si les RB(i) sont inférieurs et supérieurs à certains nombres).
tu connais ces nombres! Donc tu dis que a c'est un minimum et b le maximum. Tu fais le tirage aléatoire entre a et b et tu n'auras qu'un tirage à faire pour chaque ligne !
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
tu tires combien de nombres ? peut être peux-tu en tirer aléatoirement uniquement les premiers puis tu calcules les derniers pour que la somme soit 1
c'est des nombres entre 0 et 1 donc ?
Ou alors tu calcules le premier, puis un nombre aléatoire entre 0 et (1-x1), puis un nombre aléatoire entre 0 et (1-x1-x2) etc.
Tu comprends ?
€dit: exemple
Aucun dit : tirage 1: 0.3
tirage 2 (entre 0 et 0.7): 0.1
tirage 3 (entre 0 et 0.6): 0.4
tirage 4 (entre 0 et 0.2): 0.2
FIN
€dit 2: Si tu dois avoir que 4 chiffre et qu'au bout du 3eme tu n'as pas comme somme 1, tu calcules la dernière valeur
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
oui oui je vois, c'est d'abord ce que j'avais fait, j'avais calculé n-1 termes comme ça, pour ensuite calculer à la main de n ième, mais du coup ce n ième terme n'est pas dans le bon intervalle...
en tout cas merci pour vos réponse, et je vais réfléchir au truc du (1-x1) ... mais parès le week end :) ça fait une semaine que je suis sur ce prog, je vais décompresser un peu