L'œil sur...

Quoi de neuf dans Matlab ?

Depuis la R2008a, Matlab a apporté quelques améliorations majeures et continues pour faciliter le développement des applications et le traitement de données volumineuses.

Plan :

 

1. Et si on passait à la programmation orientée objet ?

La principale amélioration de Matlab au cours de ces dernières années s’est faite au niveau de la programmation orientée objet.

En effet, Matlab a modifié sa syntaxe dédiée à la Programmation Orientée Objet en reprenant les concepts et les règles d’écriture utilisés dans d’autres langages objet notamment la notion de classe et de référence. Un fichier de définition de classe est reconnu à partir du mot clé classdef. Une classe Matlab définit les propriétés, les méthodes mais aussi les événements. Elle peut être placée dans des paquets pour gérer l’espace de nommage et faciliter la syntaxe lors de leurs appels. Les références vers des objets sont possibles en utilisant le mot clé handle et permettent de manipuler les objets sans les recopier. Toutefois, depuis la R2011a la classe copyable permet d’apporter un comportement de copie par défaut pour les classes handle.

De plus, pour mettre en œuvre des tableaux de consultation, Matlab a créé depuis la R2008b un nouveau type de données containers.Map. Les utilisateurs d’autres langages de scripts comme Python ou Perl seront donc en terrain connu avec cet objet. Ce type permet de récupérer des valeurs en utilisant une indexation par « clé ». Les clés peuvent être des nombres réels ou une chaîne de caractères. Ils fournissent plus de flexibilité pour accéder aux données que les indices, qui doivent être des nombres entiers positifs. Les valeurs stockées peuvent être de tout type (des matrices, des structures, des cellules, des strings, des objets mais aussi d’autres Map). Ce type de données est un compromis entre les structures et les cells arrays qui offre la simplicité de conteneurs des cells arrays et la lisibilité des noms de champs des structures.

 % containers.Map
% Construction

mesCles = {'cle1','cle2','cle3'};
mesValeurs = {ones(3),'truc',123};

monObjet = containers.Map(mesCles,mesValeurs);
% Ou bien
monObjet2 = containers.Map({'cle1','cle2','cle3'},{ones(3),'truc',123});

% Recupération et visualisation des éléments du container
Cle = keys(monObjet)
Valeurs = values(monObjet)
valeur1 = monObjet ('cle1')

Cle =
    'cle1'    'cle2'    'cle3'

Valeurs =
    [3x3 double]    'truc'    [123]

valeur1 =
     1     1     1

     1     1     1

     1     1     1 

En programmation, des tâches de nettoyage (fermeture de fichiers, rétablissement de l’état du répertoire courant…) peuvent être spécifiées après exécution d’une fonction à partir de l’objet onCleanup.

 %% Exemple onCleanUp pour assurer la fermeture d'un fichier en cas d'erreur
function strText = lireFichier(nomFichier)

  % Ouvre le fichier en lecture
  fid = fopen(nomFichier, 'rt');
  if fid<0
      error('lireFichier:ImpossibleOuvrirFichier', ...
         'Impossible d''ouvrir %s\n', nomFichier);
  end

  % Ajout de l'objet onCleanup pour fermer le fichier en sortie de fonction
  objCleanup = onCleanup(@() fermeture(fid, nomFichier));

  % Lecture du fichier
  strText = fread(fid, '*char')';

  % Génère une erreur si le fichier est vide
  if isempty(strText)
      error('lireFichier:FichierVide', 'Le fichier est vide');
  end

     %% Fonction exécutée par l’objet objCleanUp en sortie de la fonction
      function fermeture(fileID, fileName)
          fclose(fileID);
          fprintf('objCleanup : fermeture du fichier "%s"\n', fileName);
      end
end
 

 

2. Ce qui continue d’évoluer

Matlab évolue entre chaque version pour faciliter la programmation de l’utilisateur. Ces évolutions portent surtout sur l’environnement de développement (IDE) qui devient plus convivial et plus interactif.

 

2.1 Du nouveau dans l’éditeur

Ces évolutions permanentes concernent tout d’abord l’éditeur. Les fonctionnalités apportées offrent une meilleure gestion des variables et des fonctions en les renommant automatiquement, en mettant en évidence toutes leurs utilisations, en identifiant les variables partagées entre fonctions imbriquées, en permettant de trouver les fonctions appropriées lors de la saisie à l’aide du navigateur de fonction.

Sur l’aspect visuel, la navigation dans le code est améliorée avec par exemple la prise en charge du code folding - repliement des parties du code avec une indentation plus grande - ou encore l’accès aux listes des fonctions imbriquées, des sous-fonctions, des variables locales.

          

Figure 1 : exemple de colde folding sur une boucle for

L’éditeur de variables a aussi été amélioré en fournissant plus d’informations lors d’une inspection des structures et des objets et en permettant aussi la sélection des éléments non-contigus d’une matrice.

 

2.2 Un vrai outil de comparaison de fichier

Pour aider l’utilisateur à comparer différents fichiers, Matlab a perfectionné son outil de comparaison (menu Desktop à Comparison Tool). Précédemment, ne s’appliquant qu’aux fichiers .txt, l’outil a été étendu aux M-files et MAT-files depuis la R2008a. L’outil amélioré met en surbrillance les différences entre les fichiers (.txt et .m). Pour les fichiers MAT, l’outil offre la possibilité de fusionner les différences entre les valeurs de variable. Dernièrement, l’outil permet de comparer les répertoires, les fichiers binaires et leurs archives (.zip) et d’exclure du résultat les éléments inchangés ou des éléments spécifiés par type. Les habitués de WinMerge ou d’outils similaires y retrouveront facilement leurs marques.

 

2.3 Des graphes catalogue

  

La création de graphe est devenue plus aisée grâce au catalogue de tracés (Plot Selector) présent dans l’espace de travail. Ce catalogue facilite la navigation, la découverte des tracés pertinents et disponibles, y compris ceux provenant des boîtes à outil. En outre, il est possible de ne garder que ses graphes favoris à l’aide de la petite étoile placée à droite des graphes.

Figure 2: catalogue de tracé (plot catalog)

 

2.4 Des données interactives bien brushées

Autre nouveauté, Matlab rend la manipulation des tracés plus interactive en liant (Tools à Link) les tracés aux variables de l’espace de travail. Un graphe lié aux données est mis à jour automatiquement lorsque celles-ci sont modifiées.

Le « brossage » (Brushing) permet de sélectionner à la souris une partie des tracés en rouge sur la figure. Le brossage permet alors au choix de faire un drag’n’drop des données dans la console pour récupérer les valeurs numériques des points sélectionnées ou de nettoyer les tracés en remplaçant par exemple les données brossées par des NaN.

Ces manipulations sont en même temps reportées sur les autres tracés liés aux mêmes données de l’espace de travail.

Figure 3 : tracé de données liées aux variables x,y

Figure 4 : fonctionnalité de brossage (brushing) et de liaison des données

Dans GUIDE, l’éditeur d’interfaces graphiques, le nouveau composant uitable offre la possibilité d’afficher et d’éditer des données tabulaires.

 

2.5 L’import / export

Comme Matlab est utilisé avec d’autres interfaces externes, il a amélioré sa prise en charge de fichiers d’entrée et de sortie de données. Parmi ses améliorations, Matlab permet la création de fichier vidéo MPEG à l’aide de la fonction VideoWriter, la lecture de fichier Excel .xlsx sous Mac et Linux. La gestion des fichiers de format NetCDF, format de données scientifiques auto-documenté, est également intégrée dans la version de base.

Concernant l’exportation des m-file et des figures, Matlab peut maintenant exporter ses fichiers sous divers formats (Publishing) notamment sous pdf depuis la R2009b. Cependant, il est important de relever le fait que certains formats de sortie peuvent être endommagés et même refusés car l’exportation dépend de l’adéquation entre la version de Matlab utilisée et la version du logiciel de son système. 

Figure 5 : publication d'un code Matlab

 

3. Et les performances dans tout ça ?

Matlab a augmenté ses performances de calcul en améliorant ses fonctions mathématiques et ses outils de parallélisation pour augmenter la vitesse de traitement des données volumineuses.

Matlab a notamment amélioré sa prise en charge de l’accélérateur JIT pour les instructions exécutées en ligne de commande et en mode cellule dans l’éditeur afin d’augmenter la performance dans ses environnements.

Ensuite, de nombreuses fonctions mathématiques et opérations arithmétiques utilisées principalement dans le calcul matriciel sont plus performantes grâce au développement des calculs multithread sur des ordinateurs multiprocesseurs (fft,sum, prod, min, max, sort, filter, bsxfun, sparse matrix QR, conv2,mrdivide, convn, histc, sortrows,…)

Pour augmenter les performances dans l’interpolation des données, Matlab a amélioré ses fonctions d’interpolation (interp1, interp2, interp3, interpn) et la classe griddedInterpolant pour optimiser l’efficacité de la mémoire pour l'interpolation des grilles de données

Mathématiquement, les fonctions FFT supportent des vecteurs de tailles jusqu’à 2 Go et la fonction rng dans la version R2011a offre un meilleur contrôle de la génération des nombres aléatoires que les fonctions rand ou randn. Cette fonction permet au choix de garder la même graine entre 2 générations ou d’éviter la génération de mêmes séries de nombres d’aléatoire entre 2 nouvelles sessions de Matlab (rngshuffle).

Enfin, la fonction memory rend compte de l’état de la mémoire (en particulier de la taille du plus grand bloc disponible ce qui permet de diagnostiquer les problèmes mémoires.

 

4. La gestion du 64 bits ?

Mathématiquement, la R2010b prend en charge l’arithmétique pour les entiers de 64 bits. Le type double ne peut représenter correctement des entiers plus grands que 2^53 et, par conséquent, les résultats des opérations sont faussés. Désormais, il est possible de réaliser des opérations sur des entiers de 64 bits, donnant des résultats plus précis.

 

5. Matlab 8.0

Téléchargeable sur le site de MathWorks, la R2012b comporte une interface graphique retravaillée et quelques nouveautés dans les fonctions et les fonctionnalités.

Parmi celles-ci, citons la possibilité de déclarer des classes abstraites, de récupérer des exceptions Java par  la classe matlab.exception.JavaException et la disparition du support des compilateurs Linux 32-bits GNU gcc Version 4.4x et GNU gfortran 4.3.x.

En mathématiques appliquées, nous gagnons la possibilité d’exécuter les fonctions logiques bit à bit (bitand, bitor, bitxor…) sur des entiers signés, d’utiliser les fonctions trigonométriques en degrés (sind, cosd, tand, asind, acosd…) avec des nombres complexes, et profitons de divers optimisations pour les fonctions de Bessel, les fonctions airy, et psi. Enfin, la fonction ddensd permet de résoudre des équations différentielles à retard de type neutre avec des retards indépendants de l’état.

En outre, un certain nombre de nouvelles fonctions facilitent l’import et l’export de données. Notons l’outil Import Tool qui permet d’importer en une seule fois des données matricielles de type nombre, date, ou texte, sous forme de vecteurs colonne. En matière de multimédia, les fonctions audioread et audioinfo permettent d’importer des fichiers MP3, MPEG-4, AAC, et la fonction audiowrite rend possible l’écriture en MPEG-4. Enfin, notons la possibilité de manipuler des fichiers BigTIFF de plus de 4 Go, et la gestion des formats XLSM, XLTX, XLTM par xlsread sur toutes les plateformes.