Salut tout le monde!
Depuis quelques temps je cherche à optimiser mon utilisation de Matlab, et j'ai vu qu'en temps de calcul je pouvais remplacer quelque chose du type:
par un calcul plus efficace en temps machine, du type:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4If variable1>critère1 && variable2<critère2 ratio=variable1./variable2 end
Dans les codes précédents, "variable" est typiquement une matrice de grande dimension, et les critères de tests peuvent être nuls. Du coup j'ai eu quelques sorties de type NaN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ratio=(variable1>critère1).*(variable2<critère2).*variable1./(variable2+eps)
J'ai envisagé dans un premier temps de faire un test de typeavec quelque chose similaire à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part isnanmais je me suis souvenu que la variable epsilon était aussi employable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ratio(isnan(ratio),1)=0;
Si mes souvenirs et ma compréhension de l'aide Matlab sont corrects, epsilon est censé être le plus petit quantième discernable par Matlab (du 10^-beaucoup) et donc ne pas influer sur mes résultats, qui sont de l'ordre de grandeur de l'unité.
Mais ma question porte sur deux points:
- Le calcul "en ligne" est-il préférable à la boucle conditionnelle?
- L'utilisation de "eps" peut-il être préjudiciable?
Je n'ai pas trouvé de moment ou l'epsilon semblait me mettre dans les choux, mes données entrantes sont quantifiées, je n'ai pas de divergences, mais les valeurs nulles sont possibles.
J'aimerai donc un retour d'expérience d'utilisateurs plus chevronnés que moi. Merci.
Partager