Archives du mot-clé MATLAB

Gérez la compatibilité descendante de vos codes MATLAB

MathWorks publie deux versions de MATLAB par an avec à chaque fois son lot de nouvelles fonctions. La version R2014b est attendue prochainement.

Si vous souhaitez diffuser vos programmes à un maximum d’utilisateurs, vous devez veillez à la compatibilité descendante (ou rétrocompatibilité) de vos codes. C’est à dire que vous devez prendre en compte le fait que certains utilisateurs ont une version moins récente de MATLAB que la vôtre.

Deux questions se posent alors :

  • jusqu’à quelle version de MATLAB assurer la compatibilité ?
  • comment déterminer ce qui casse la compatibilité descendante ?

Quelle version de MATLAB ?

Vous vous en douterez, il n’y a pas de réponse précise à cette question… Nous avons ouvert plusieurs sondages sur le forum MATLAB :

Au passage, vous pouvez toujours participer au sondage de 2014 !

En voici les résultats :

Versions utilisateurs MATLAB 2013

Sondage 2013

Versions utilisateurs MATLAB 2014

Sondage 2014

Malgré le peu de votes, on peut juger que la compatibilité devrait être gérée jusqu’aux versions R2011.

Comment déterminer ce qui casse la compatibilité descendante ?

La solution la plus efficace est d’installer la version la plus ancienne de MATLAB pour laquelle vous souhaitez assurer la compatibilité sur votre machine de développement. Votre licence MATLAB vous permet d’installer les versions plus anciennes.

A l’exécution du code, en cas de problème de compatibilité, vous rencontrez surement l’erreur Undefined function or variable ‘***’. Dans ce cas, vous devrez alors écrire un code alternatif pour gérer l’absence de cette fonctionnalité. Vous pourrez alors utiliser la fonction verLessThan présentée ci-dessous.

Si vous ne pouvez pas installer une ancienne version, il faudrait alors faire la liste de tous les changements répertoriés dans les Release Note des versions de MATLAB (voir la FAQ Où trouver la documentation des différentes versions de MATLAB en ligne ?). Tout ça risque d’être assez laborieux. Vous pouvez consulter une liste partielle de ces changements sur ce site : MatlabVersionsCompatibility.

La fonction verLessThan

La fonction verLessThan permet de tester si la version de MATLAB en cours d’utilisation est antérieure à une version donnée. Pour les numéros de version, voir la deuxième colonne du tableau donné dans la FAQ : Quelles sont les différentes versions de MATLAB ?

Prenons le cas de la fonction strjoin ajoutée avec la version R2013a (8.1) de MATLAB. Une version antérieure de MATLAB ne pourra pas l’exécuter. Vous devrez donc pas exemple écrire votre propre fonction mystrjoin et faire le teste suivant dans le code :

if verLessThan('matlab', '8.1')
    B = mystrjoin(A, ',');
else
    B = strjoin(A, ',');
end

Conclusion

Comme vous l’aurez compris, il est difficile d’assurer une compatibilité parfaite d’un code MATLAB récent avec des versions plus anciennes. J’espère au moins vous avoir sensibilisé à ce problème.

Deux conseils pour finir :

  • spécifiez la version de MATLAB que vous avez utilisée dans l’entête de votre code
  • laissez également un email pour permettre aux utilisateurs de vous contacter

Toujours pas de certification MATLAB dans les pays francophones

MathWorks propose depuis 2 ans maintenant deux certifications : Associate et Professionnal.

Aurélien avait écrit un billet à ce sujet sur son blog : MathWorks Certification Program.

Par curiosité, je viens de consulter le calendrier des futures sessions de certification et… toujours pas de session en France. Pour l’Europe, c’est soit Cambridge en Angleterre, soit Munich en Allemagne. Aucune date en Afrique, ni au Moyen-Orient.

Les utilisateurs des pays francophones devront donc encore patienter, ou alors ajouter le prix du voyage au prix de la certification. :shock:

Pour ma part, j’hésite encore entre Natick et Sydney :mrgreen:

Les termes « lhs » et « rhs » dans MATLAB

Les termes « lhs » et « rhs » apparaissent parfois dans la documentation et dans certains messages d’erreurs renvoyés par MATLAB :

Assignment has more non-singleton rhs dimensions than non-singleton subscripts.

Ce sont en fait deux acronymes :

  • lhs : left-hand side
  • rhs : right-hand side

Ils symbolisent donc respectivement le terme de gauche et le terme de droite d’une affectation.

Par exemple :

A = 2;

Dans l’affectation ci-dessus, « A » est le « lhs » donc le terme de gauche, et « 2 » est le « rhs », le terme de droite.