Utiliser i et j comme variables dans Matlab


Answers

C'est une bonne pratique d'éviter les variables i et j pour éviter toute confusion à leur sujet étant des variables ou l'unité imaginaire.

Personnellement, cependant, j'utilise i et j comme variables assez souvent comme l'indice des boucles courtes. Pour éviter les problèmes dans mon propre code, je suis une autre bonne pratique concernant i et j : ne les utilisez pas pour désigner des nombres imaginaires. En fait, la documentation de Matlab précise :

Pour la rapidité et la robustesse améliorée, vous pouvez remplacer les complexes i et j par 1i .

Donc plutôt que d'éviter deux noms de variables très couramment utilisés en raison d'un conflit potentiel, je suis explicite sur les nombres imaginaires. Cela rend également mon code plus clair. Chaque fois que je vois 1i , je sais qu'il représente sqrt(-1) car il ne peut pas être une variable.

Question

i et j sont des noms de variables très populaires (voir par exemple, cette question et celle-ci ).

Par exemple, dans les boucles:

for i=1:10,
    % do something...
end

Comme indices dans la matrice:

mat( i, j ) = 4;

Pourquoi ne devraient- ils pas être utilisés comme noms de variables dans Matlab?




Comme décrit dans d'autres réponses, l'utilisation de i dans le code général n'est pas recommandée pour deux raisons:

  • Si vous voulez utiliser le nombre imaginaire, il peut être confondu avec ou écrasé par un index
  • Si vous l'utilisez comme un index, il peut être surchargé ou être confondu avec le nombre imaginaire

Comme suggéré: 1i et ii sont recommandés. Cependant, bien que ces deux écarts soient importants, il n'est pas très agréable d'utiliser ces deux alternatives ensemble.

Voici un exemple pourquoi (personnellement) je ne l'aime pas:

val2 = val + i  % 1
val2 = val + ii % 2
val2 = val + 1i % 3

On ne se trompe pas facilement pour deux ou trois, mais deux et trois se ressemblent.

Par conséquent, ma recommandation personnelle serait: Si vous travaillez parfois avec du code complexe, utilisez toujours 1i combiné avec une variable de boucle différente.

Exemples d'indices à lettre unique pour lesquels si vous n'utilisez pas beaucoup de variables de boucle et de lettres, suffisez: t , u , k et p

Exemple d'index plus longs: i_loop , step , walk et t_now

Bien sûr, c'est aussi une question de goût personnel, mais il ne devrait pas être difficile de trouver des indices qui aient une signification claire sans grandir trop longtemps.




La confusion avec l'unité imaginaire a été bien couverte ici, mais il y a d'autres raisons plus prosaïques pour lesquelles ces noms de variables à une seule lettre sont parfois découragés.

  1. MATLAB en particulier: si vous utilisez un codeur pour générer une source C ++ à partir de votre code MATLAB (ce n'est pas horrible), alors vous êtes explicitement averti de ne pas réutiliser les variables à cause de conflits potentiels de typage.

  2. Généralement, et en fonction de votre IDE, un nom de variable à une lettre peut causer des ravages avec les surligneurs et rechercher / remplacer. MATLAB ne souffre pas de cela et je pense que Visual Studio n'a pas eu de problème depuis un certain temps mais les normes de codage C / C ++ comme MISRA etc. ont tendance à les gêner.

Pour ma part, j'évite toutes les variables à une seule lettre, malgré les avantages évidents de la mise en œuvre directe de sources mathématiques. Cela prend un petit effort supplémentaire les premières centaines de fois que vous le faites, mais après cela vous vous arrêtez de le remarquer, et les avantages quand vous ou une autre âme pauvre venez lire votre code sont légion.




Sauf si vous êtes un utilisateur très confus, je pense qu'il y a très peu de risque à utiliser les noms de variables i et j et je les utilise régulièrement. Je n'ai vu aucune indication officielle que cette pratique devrait être évitée.

Bien qu'il soit vrai que l'observation de l'unité imaginaire puisse causer une certaine confusion dans certains contextes, comme mentionné dans d'autres publications, je ne vois tout simplement pas cela comme un problème majeur. Il y a beaucoup plus de choses déroutantes que vous pouvez faire dans MATLAB, par exemple définir false=true

À mon avis, la seule fois où vous devriez probablement les éviter est si votre code traite spécifiquement des nombres imaginaires.




Related