Archives pour la catégorie MATLAB

5 conseils pour améliorer la lisibilité de vos codes MATLAB

Voici cinq conseils pour rendre vos codes MATLAB plus lisibles, surtout quand vous débutez avec MATLAB.

Ceci aura pour effet d’en simplifier la lecture et la compréhension pour d’autres développeurs, mais aussi pour vous-même si vous êtes amenés à travailler de nouveau sur un de vos codes au bout de plusieurs mois.

Bien entendu, la lisibilité est un critère parmi d’autres et n’est pas une fin en soit. Malgré tout, vous aurez tout intérêt à suivre ces conseils si vous êtes débutant avec MATLAB ou si vous développez de manière occasionnelle.

N’hésitez pas à apporter des compléments à ces conseils ou à discuter certains points en particulier.

1 – Utilisez l’indentation du code

L’indentation du code aligne verticalement le début de chaque ligne de code selon des règles propres à chaque langage.

En plus d’améliorer la lisibilité du code, l’indentation du code permet souvent de distinguer des erreurs à l’œil nu. Par contre, elle ne sert généralement à rien pour le compilateur ou l’interpréteur (sauf pour certains langages comme Python)

Pour effectuer une indentation correcte du code MATLAB, il faut sélectionner l’ensemble du code dans l’éditeur, puis utiliser le menu « Text > Smart Indent ». On peut aussi utiliser les raccourcis clavier suivants :

  • Windows : Ctrl+A (sélection) puis Ctrl+I (indentation)
  • Mac : ⌘+A (sélection) puis ⌘+I (indentation)
  • Linux (Emacs) : Ctrl+X,H (sélection) puis Ctrl+Alt+/ (indentation)

Exemple de code sans indentation :

M = rand(2,3);
for i = 1:2
for j = 1:3
if M(i,j)<=0.5
M(i,j) = 0;
else
M(i,j) = 1;
end
end
end
M

Le même code avec indentation :

M = rand(2,3);
for i = 1:2
    for j = 1:3
        if M(i,j)<=0.5
            M(i,j) = 0;
        else
            M(i,j) = 1;
        end
    end
end

2 – Mettez des espaces dans les lignes de code

a) Avec l’opérateur « = »

Ajouter un espace avant et après l’opérateur d’affection « = » améliore la lisibilité du code.

Par exemple :

M=rand(2,3);

La commande ci-dessus s’écrit plus lisiblement comme ceci :

M = rand(2,3);

Les termes de droite et de gauche sont directement identifiables.

Des espaces peuvent également être ajoutés autour du signe « = » de la première ligne des boucles for-end :

for i = 1:2

Certains préconisent également d’ajouter des espaces avec les autres opérateurs mathématiques.

Par exemple :

x = a/b+c;

L’équation ci-dessus pourrait aussi s’écrire :

x = a / b + c;

b) Avec les arguments d’une fonction

On peut également utiliser des caractères d’espacement après les virgules au niveau des arguments d’une fonction.

Par exemple :

[i,j,v] = find(M>0.5,1,'first');

L’appel à la fonction find devient :

[i, j, v] = find(M>0.5, 1, 'first');

L’identification de chaque argument est ainsi améliorée.

3 – Évitez d’utiliser des virgules pour séparer les éléments d’un tableau

En mathématiques, nous utilisons la virgule comme séparateur de décimales (les anglo-saxons utilisent le point).

Dans MATLAB, la virgule peut servir à séparer des valeurs numériques sur une même ligne d’un tableau.

Par exemple :

M = [1, 2, 3 ; 4, 5, 6 ; 7, 8, 9];

Les virgules sont ici inutiles pour MATLAB et peuvent, à tort, faire penser à une suite de nombres réels.

Leur suppression enlève donc cette possible confusion sans nuire à la lisibilité du code.

L’exemple devient :

M = [1 2 3 ; 4 5 6 ; 7 8 9];

4 – Ne supprimez pas le « 0 » pour les nombres réels dans l’intervalle ]-1,1[

La syntaxe MATLAB permet de ne pas utiliser le caractère « 0 » dans l’écriture des nombres réels contenus dans l’intervalle ]-1,1[.

Par exemple :

if M(i,j)<=0.5

Dans la condition précédente, la valeur 0.5 pourrait s'écrire .5 et la condition deviendrait :

if M(i,j)<=.5

On voit ici que le rapprochement des termes « <=. » diminue la lisibilité du code.

Ceci est encore plus vrai avec les valeurs négatives :

if M(i,j)<=-.5

5 – Supprimez les parenthèses superflues

a) Opérations mathématiques

Les parenthèses ne doivent être utilisées que pour assurer l’ordre de priorité des opérations.

Par exemple, dans le calcul suivant :

result = ((X(1)*35.1)+(X(5)*20.25)+(X(8)*2.5)-(X(9)*105.78));

Les parenthèses ne servent à rien et peuvent être avantageusement remplacées par des espaces :

result = X(1)*35.1 + X(5)*20.25 + X(8)*2.5 - X(9)*105.78;

b) Opérations logiques

Comme précédemment, selon l’ordre de priorité des opérateurs, certaines parenthèses peuvent être supprimées dans les conditions logiques.

Par exemple :

if (x(1)>0.5)&&((x(2)<1)||(x(3)>0.1))

La condition précédente peut se simplifier comme ceci :

if x(1)>0.5 && (x(2)<1 || x(3)>0.1)

Matrice ou tableau dans MATLAB ?

Les termes « matrice » et « tableau » sont souvent employés pour désigner des variables MATLAB, malheureusement avec une certaine confusion.

Je vais donc tenter de convaincre les utilisateurs qui ne sont comme moi, ni mathématicien ni informaticien de formation, d’utiliser à l’avenir le terme adéquat.

Ce billet est inspiré par les remarques faites par Jean-Marc Blanc sur les forums MATLAB depuis plusieurs années. ;)

Tableau

Qu’est-ce qu’un tableau ? Un outil d’informaticien !

En informatique, un tableau est une structure qui permet de stocker des données. On peut se la représenter comme une grille régulière de dimension quelconque. Les dimensions les plus courantes sont 1D, 2D, 3D voire 4D.

Prenons par exemple un tableau 2D contenant des valeurs numériques entières :

>> M = [1 2 3 ; 4 5 6 ; 7 8 9]

M =

     1     2     3
     4     5     6
     7     8     9

>> whos M
  Name      Size            Bytes  Class     Attributes

  M         3x3                72  double

Un tableau peut avoir plus de deux dimensions dans MATLAB. Par exemple, voici un tableau à six dimensions :

>> M = rand(5,2,7,4,5,8);
>> whos M
  Name      Size            Bytes  Class     Attributes

  M         6-D             89600  double

Avec MATLAB, on se sert des tableaux pour stocker par exemple les valeurs des pixels d’une image. Un tableau 2D sera utilisé pour les images en couleurs indexées alors qu’un tableau 3D sera utilisé pour les images en couleurs vraies (RGB). Plus d’informations à ce sujet dans le tutoriel Gestion des couleurs.

Par exemple :

>> I = imread('lena.jpg');
>> whos I
  Name        Size                Bytes  Class    Attributes

  I         512x512x3            786432  uint8

Matrice

Qu’est-ce qu’une matrice ? Un outil de mathématicien !

En mathématiques (calcul numérique), une matrice peut être considérée comme un tableau à deux dimensions (2D) et… rien d’autre. Une matrice possède des propriétés particulières et doit respecter les règles du calcul matriciel.

Le tableau suivant peut donc être considéré comme une matrice :

>> M = [1 2 3 ; 4 5 6 ; 7 8 9]

M =

     1     2     3
     4     5     6
     7     8     9

>> whos M
  Name      Size            Bytes  Class     Attributes

  M         3x3                72  double

Avec MATLAB, on se sert des matrices pour, par exemple, résoudre des systèmes d’équations linéaires. Lire à ce sujet le tutoriel Résolution des systèmes linéaires de Jean-Marc Blanc.

Par exemple, on peut utiliser des matrices pour résoudre le système d’équations suivant :

4x + 2y = 5
x – 5y = 4

Dans MATLAB :

>> A = [4 2 ; 1 -5];
>> B = [5 ; 4];
>> A\B

ans =

    1.5000
   -0.5000

A et B sont donc des matrices dans ce cas.

Conclusion

Tout est tableau dans MATLAB, vous pouvez donc toujours employer ce terme.

Les matrices sont des tableaux 2D, que l’on utilise uniquement dans le cadre des mathématiques (algèbre linéaire).

Voila, j’espère vous avoir éclairé.

Ma première résolution pour l’année 2014 consistera à prêter un maximum d’attention à l’emploi de ces deux termes. :)

Pour résumer

Avec MATLAB :

  • Tableau : tableau de dimension quelconque ;
  • Matrice : tableau à deux dimensions (2D) utilisé pour en mathématiques (calculs numériques).

Note : en anglais, « tableau » se dit « array », et « matrice » se dit « matrix ».

matlab, mathlab, MatLab ou MATLAB ?

Depuis plus de 10 ans, je vois régulièrement passer toute sorte d’orthographes sur les forums pour désigner MATLAB.

Et vous ? Quelle habitude avez-vous prise ?

Commençons par la plus fautive qui est « mathlab ». Pourquoi ?
Car certains pensent sans doute, à tort, que MATLAB est dédié aux mathématiques.

Il faut plutôt se rappeler qu’il fut initialement crée comme outil de calcul numériques (algèbre linéaire et moindres carrés). Dans cette discipline, on utilise beaucoup de matrices. Le nom MATLAB vient donc de la concaténation de « MAT » pour « matrix » et de « LAB » pour « laboratory », soit « laboratoire (de calcul) matriciel ».

Alors pourquoi écrire « MATLAB » tout en majuscules ? Et pas « matlab » ou « MatLab » ?

Simplement parce que MathWorks, qui commercialise MATLAB, impose cet usage :

“MATLAB” is in all caps

Lire à ce sujet : Editorial standing – Referring to the Products

Voila donc pourquoi nous utilisons exclusivement cette orthographe sur les forums, dans les tutoriels, dans les FAQ et les autres contributions sur Developpez.com.

Dorénavant, vous n’avez plus d’excuse si vous n’écrivez pas « MATLAB ».

;)

Oui mais pourquoi Cleve Moler a-t-il choisi d’écrire le nom en majuscule ?

Sans doute parce que les bibliothèques sur lesquelles reposaient initialement MATLAB s’appelaient LINPACK et EISPACK. Elles même étaient écrites en Fortran, qui à l’époque s’écrivait… FORTRAN.

C’est l’explication la plus plausible à laquelle je suis parvenue.

Qu’en pensez-vous ?