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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
If variable1>critère1 && variable2<critère2
ratio=variable1./variable2
end
par un calcul plus efficace en temps machine, du type:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
ratio=(variable1>critère1).*(variable2<critère2).*variable1./(variable2+eps)
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.

J'ai envisagé dans un premier temps de faire un test de type avec quelque chose similaire à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ratio(isnan(ratio),1)=0;
mais je me suis souvenu que la variable epsilon était aussi employable.

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.