L'œil sur...

La famille des outils Matlab évolue avec la nouvelle version R2021a 

Des centaines de nouvelles fonctionnalités, de nouveaux outils ou des mises à jour sont disponibles avec la sortie de Matlab R2021a. Nous avons assisté les 4 et 5 mai aux journées Matlab Expo où plus de 70 experts techniques sont intervenus. Nous avons souhaité vous éviter les centaines de release notes ! Chaque semaine de juillet à août, un ingénieur d’Acsystème vous partage une fonctionnalité marquante de Matlab qui améliore son quotidien. Ouvrez Matlab ! 

 

Liste des articles : 

  1. Create Plot dans le Live Editor
  2. L’App Designer pour créer des interfaces graphiques
  3. Les nouveautés Stateflow vous simplifient le quotidien
  4. Réduisez vos temps de simulation simulink avec le "Refence Model"
  5. Des "plot", des "plot", oui mais des "plot" jolis !
  6. Analyser facilement votre modèle grâce au Simulation Data Inspector
  7. La parallélisation sous Simulink
  8. Utiliser le presse papier pour transférer des tableaux

 

 

S01E01 : Create Plot dans le Live Editor, par Maxime BONNET

Depuis la version Matlab R2021a, l’interface Create Plot est disponible à partir du Live Editor. Cette interface permet de créer rapidement, à partir de données chargées dans le workspace Matlab, des graphes propres (avec titres, légendes…). L’outil propose également de récupérer les lignes de codes correspondantes. 

Pour ouvrir l’interface, il y a plusieurs méthodes possibles : 

  • ouvrir un nouveau Live Script puis aller dans le menu Insert et dans la section Code, sélectionner Task > Create Plot

  • dans l’éditeur de code du Live Script, taper un mot clé tel que create, vis ou visualize : la commande Create Plot sera alors suggérée,

  • dans l’éditeur de code du Live Script, taper n’importe quel nom de fonction de création de graphe (plot, bar, contour…) : la commande Create Plot sera alors suggérée, en ayant prédéfini le type de graphe correspondant. 

 
      
 

Pour utiliser l’interface, il est nécessaire d’avoir des données chargées dans le workspace de Matlab. Celle-ci permet alors de sélectionner les données à mettre en abscisse et en ordonnée, et de tester plusieurs types de graphes et d’options de visualisations.On observe alors directement le résultat, sans avoir à écrire une seule ligne de code. Les titres, labels et légendes sont affichés automatiquement selon les noms de variables du workspace.

L’outil offre la possibilité de les personnaliser de façon interactive sur la figure de prévisualisation, et de mettre à jour automatiquement le code Matlab de création de cette figure. Les lignes de code générées sont disponibles, vous permettant de générer cette même figure ultérieurement. 

Au quotidien, cette interface est particulièrement adaptée pour réaliser des graphes rapides, qui n’ont pas besoin de fonctionnalités trop avancées (l’interface ne permet pas de réaliser tout ce qui existe avec les lignes de commande). La création de graphiques devient intuitive, sans question à se poser sur les lignes de code à écrire. Finalement, on gagne du temps dans la création de graphique, en conservant la qualité ! 

△ Haut de page

 

S01E02 : l’App Designer pour créer des interfaces graphiques, par Arthur ROUÉ

Avec la version R2016a, Mathworks introduit l’App Designer pour assister le développeur dans sa création d’interface graphique. Il est conçu pour permettre aux utilisateurs Matlab de réaliser rapidement et facilement des interfaces professionnelles par simple glisser-déposer. À terme, ce nouvel outil a vocation à remplacer son prédécesseur : GUIDE.

Depuis son arrivée, l’App Designer a été enrichi de nombreuses fonctionnalités et composants, tels que le positionnement des composants dans une grille (uigridlayout), la compilation en Web App, la personnalisation du style des tables (uitable / uistyle), la possibilité d’insérer des liens hypertextes (uihyperlink)...

 
Dans cet article, on présentera deux fonctionnalités qui ont été intégrées à l’App Designer :
  • l’ajout d’une barre de menus (R2017b),
  • la création de menus contextuels associés aux composants graphiques (R2020a).

La barre de menus, absente au lancement de cet environnement de conception d’interfaces, a finalement été réimplémentée pour les composants uifigure. Ci-dessous un exemple simple de création d’un menu dont la fonction callback ferme la fenêtre de l’application :

 

    
 
A partir de la R2020a, la barre d’outils a elle aussi rendu compatible avec les uifigure et s’utilise de la même façon que dans l’exemple précédent.
 
Les menus contextuels font aussi leur entrée dans la version R2020a. Outil ergonomique très puissant, le menu contextuel peut être utilisé sur la plupart des composants graphiques. Un clic-droit sur l’objet, suivi de la sélection du menu déclenche la fonction callback associée au menu. Ci-dessous un exemple de menu contextuel qui permet l’export du contenu d’un axe dans un fichier PNG :
 
  
 
Documentation Mathworks des propriétés des composants présentés

Le code utilisé pour les illustrations est disponible ci-dessous :

	% Callbacks that handle component events
methods (Access = private) 
	% Code that executes after component creation
    function tracer(app)
        % Afficher sinus et cosinus
        x  = 0:0.1:2*pi;
        y1 = cos(x);
        y2 = sin(x);
        plot(app.UIAxes, x, y1, 'b', x, y2, 'r-.', 'LineWidth', 2)
    end

    % Menu selected function: QuitterMenu
    function quitter(app, event)
        close(app.UIFigure);
    end

    % Menu selected function: ExporterenPNGMenu
    function exporter(app, event)
        [file, path] = uiputfile('*.png');
        exportgraphics(app.UIAxes, fullfile(path, file));
    end
end

△ Haut de page

 

S01E03 : Les nouveautés Stateflow vous simplifient le quotidien, par Mathias AMADO CATTANEO

Ces dernières années, Mathworks a mené de nombreuses actions pour faciliter le codage sous Simulink. L'apparition de la possibilité d'insertion rapide ("quick insert"), permet notamment de rapidement intégrer un nouveau bloc, ou de créer un sous-système, dans un code Simulink. Et Stateflow alors ?

Maintenant que ces évolutions sont testées et approuvées par les utilisateurs de Simulink, elles font désormais leurs apparitions dans l’environnement Stateflow. Avec la version R2021a, Mathworks permet à l'utilisateur de modéliser avec plus de facilité des machines à états et des diagrammes de flux. L'outil d'insertion rapide permet d'ajouter directement un composant Stateflow, simplement en tapant son nom (state, subchart, Simulink state…).

  

 
Dans cette veine de simplifier le codage sous Stateflow, une petite option bien pratique fait son apparition. L'inversion en 1 clic du sens d'une transition. Fini les prises de têtes lors de la modélisation d'une logique complexe, ou lors de la modification d'un diagramme existant.
 
    
 
Une autre évolution ayant pour optique la facilité de lecture et de compréhension, et similaire aux zones de couleurs dans Simulink, est la personnalisation visuelle des différents paramètres (constantes, entrées, sorties, paramètres…). Vous n’avez plus aucune raison de garder ses diagrammes monochromes, faites place aux couleurs !
 
    
△ Haut de page
 
 

S01E04 : Réduisez vos temps de simulation Simulink avec le "Reference Model", par Marouane BENAZIZ

Vous êtes un utilisateur de Simulink et vous trouvez que vos temps de simulation sont trop longs ? Avez-vous pensé à passer une partie de votre modèle en modèle référencé ? C’est ce que nous avons fait pour un de nos clients pour lequel nous développons une plateforme de validation des algorithmes de contrôle de véhicule hybride. La validation de ce type de systèmes est coûteuse en temps de calculs car elle nécessite de simuler plusieurs scénarios pour différentes configurations de véhicule, ce qui peut durer plusieurs heures voire plusieurs jours. Voici une solution !

Qu’est-ce que le modèle référencé ?

Le modèle référencé (« Model Reference ») est un bloc Simulink qui permet de référencer un modèle dans un autre. Dans notre cas, on référence le modèle contenant l’algorithme de contrôle (bloc « Contrôle » ci-dessous) dans un modèle dit « parent » qui est la plateforme de simulation.

      

Lorsque le modèle référencé est utilisé en mode « Accelerator », il est compilé une première fois et est ensuite réutilisé pour toutes les simulations suivantes. Tant que le bloc « Contrôle » n’est pas modifié, il n’y aura pas besoin de le recompiler.


Comment convertir un sous-système en modèle référencé ?

La conversion du sous-système (subsystem) en modèle référencé nécessite quelques étapes de préparation du modèle afin qu’il respecte certaines règles. En particulier, nous avons :

  • défini les bus d’entrée et de sortie du modèle référencé,
  • résolu les signaux qui passaient directement à travers le bloc « Contrôle » en utilisant des blocs « Signal Conversion »,
  • géré le comportement des « trigger ports » présents dans le modèle référencé,
  • résolu les boucles algébriques de la plateforme, suite au passage du bloc « Contrôle » en modèle atomique.

Les règles à respecter pour la conversion sont définies dans la page suivante : Convert Subsystems to Referenced Models - MATLAB & Simulink (mathworks.com)

Une fois que le modèle référencé est prêt, nous avons écrit un script qui permet de compiler le modèle avec mingw64, puis de compresser les fichiers dans une archive « .zip ». Cela permet de stocker et d’échanger proprement les fichiers du modèle référencé compilé.

Enfin, nous avons lancé des simulations de validation afin de garantir la stricte égalité des résultats de simulation avant et après la conversion et d’évaluer le gain de temps de simulation obtenu.


Quels sont les bénéfices obtenus ?

Voici les résultats grâce au « Reference Model » : 

  • le temps de simulation est divisé par 3 : une simulation dure parfois plusieurs heures, ce gain de temps est donc très appréciable, 
  • le temps perdu pour compiler le bloc « Contrôle » est largement compensé par le temps gagné lors des simulations,
  • la plateforme est plus légère à manipuler et s’ouvre plus rapidement : le modèle référencé n’est chargé que lorsque cela est nécessaire,
  • cette technique permet une approche modulaire : il est aisé de changer de versions d’algorithme de contrôle en modifiant simplement la référence du bloc « Model Reference »,
  • la possibilité de protéger l’algorithme de contrôle avec Simulink Coder est pertinente : elle permet de ne pas révéler sa propriété intellectuelle.

Nous appliquons la technique du modèle référencé sur d’autres applications et notamment pour la validation d’algorithmes de contrôle pour les systèmes ADAS. 

Pour avoir plus d’informations sur les détails techniques et les subtilités des modèles référencés, vous pouvez nous contacter et consulter la page Mathworks dédiée à ce sujet Model References - MATLAB & Simulink (mathworks.com).

△ Haut de page

 

S01E05 : Des "plot", des "plot", oui mais des "plot" jolis ! par Gireg LANOË

 

Le traçage de courbes ? Un des piliers de Matlab ! J’entends encore tonton, l’an dernier un peu agacé contre moi : « T’étais pas né que je traçais déjà des graphes sous Matlab ! ». Pas faux tonton, mais ce que tu ne savais pas, c’est que les fonctions de traçage et de mise en forme de courbes, sous leurs airs de vielles fonctions gâteuses, nous réservent encore bien des surprises… Et oui, Matlab dans ses dernières versions (R2020b et R2021a) n’oublie pas de doter ses aïeuls, pour transformer vos courbes en chefs-d’œuvre !
 
Matlab R2020b
 
Première petite révolution dans le Landerneau de Matlab, l’arrivée de 2 nouveaux nés dans la famille des marqueurs :
  
Le trait horizontal « _ » et le trait vertical « | » sont centrés autour de la coordonnée qu’ils représentent (comme pour le marqueur « + »). Ils s’utilisent exactement de la même façon que tous les autres marqueurs.
 
La suite ?  Désormais, il est possible d’ajouter des sous-titres aux graphiques avec des propriétés bien distinctes du titre (comme la couleur par exemple). L’ajout de sous-titres peut être réalisé de 2 façons :
  1. en utilisant la fonction subtitle qui permet d’ajouter un sous-titre à l’axe courant :
    hSousTitre = subtitle('Mon sous-titre');
  2. directement en entrant le sous-titre lors de l’appel à la fonction title :
    [hTitre, hSousTitre] = title('Mon titre', 'Mon sous-titre');
 

Et ce n’est pas tout ! Maintenant, on peut également choisir l’alignement du titre/sous-titre et des labels des axes (relativement au graphique auquel ils appartiennent) avec deux nouvelles propriétés :

  1. la propriété TitleHorizontalAlignment des « Axes » qui permet de définir l’alignement du titre/sous-titre : hAxis.TitleHorizontalAlignment = 'center';
  2. la propriété LabelHorizontalAlignment des objets « Ruler » qui définissent les axes x, y et z :
    hAxis.XAxis.LabelHorizontalAlignment = 'right’;

Ces 2 propriétés peuvent prendre les valeurs 'left' | 'center' | 'right'.

Matlab R2021a 
 
Le meilleur pour la fin ! Avez-vous déjà rencontré ce « chose » ?
    
Des TickLabel si longs que, par défaut, ils se chevauchent les un les autres… Jusqu’à maintenant, vous aviez la possibilité d’indiquer leur orientation via les propriétés XTickLabelRotation, YTickLabelRotation et ZTickLabelRotation des axes. Désormais, par défaut, l’angle de rotation le plus adéquat est automatiquement appliqué pour que les TickLabel ne se chevauchent pas :
  
Cette nouveauté apporte un réel confort, notamment lors de l'observation de données en 3D :

 
Il est toujours possible de revenir au mode de fonctionnement classique en passant les propriétés XTickLabelRotationMode, YTickLabelRotationMode et/ou ZTickLabelRotationMode des axes à la valeur 'manual' : hAxis.XTickLabelRotationMode = 'manual';
 
Pour ne pas avoir à réaliser cette modification pour chaque axe, il est également possible de modifier le fonctionnement par défaut de Matlab via ces lignes de codes :

Pour remettre ces paramètres aux valeurs « d’usine » (gestion automatique des angles des TickLabel) :

À vos données ! Prêt ? Tracez !

 

△ Haut de page

 

S01E06 : Analyser facilement votre modèle grâce au Simulation Data Inspector par Ronan BLANCHARD

L’inspecteur de données de simulation (Simulation Data Inspector, ou SDI) est un outil proposé dans Simulink, qui permet de visualiser rapidement des résultats de simulation. Après avoir sélectionné les signaux à enregistrer dans le modèle, il vous sera possible de configurer rapidement une figure afin d’analyser le comportement de celui-ci.  

Les avantages du SDI :

  • pas besoin d’écrire de code,
  • création rapide de figures,
  • pas de surcharge du modèle avec des scopes,
  • sauvegarde des précédents résultats pour comparer différentes simulations.

Illustrons l’utilisation de cet outil en visualisant le comportement d’un circuit RC.

Tout d’abord, il faut commencer par enregistrer les signaux qui nous intéressent dans le modèle.

 

Voyons ensuite comment créer une figure à partir des résultats d’une simulation.

 

Nous allons maintenant changer un paramètre du modèle et comparer les résultats des deux simulations.

 

Une fois la figure créée, nous pouvons très facilement l’exporter pour l’ajouter dans un rapport.

 

Cette présentation est bien sûr non exhaustive, et vous trouverez davantage d’éléments dans la documentation officielle du SDI par The Mathworks :

https://fr.mathworks.com/help/simulink/slref/simulationdatainspector.html

Pour conclure, le SDI est un outil simple et intuitif qui permet aux utilisateurs de Simulink de gagner en productivité lors de l’analyse des résultats sans avoir à modifier le modèle étudié. L’utilisateur peut très rapidement synthétiser ses résultats de simulation et les exporter dans un rapport.

△ Haut de page

 

S01E07 : La parallélisation dans Simulink par Sébastien SALIOU


La vidéo What's New in MATLAB and Simulink R2021a de la conférence Matlab Expo 2021 évoquait des nouveautés au niveau des capacités de parallélisation de Simulink. Cette annonce était l’occasion pour Acsystème de vous faire un rappel des principales possibilités de parallélisation dans Simulink afin d’accélérer vos simulations. Une 1ère approche consiste à paralléliser les différentes simulations d’un ensemble de simulations réalisées dans le cadre d’une étude de sensibilité par exemple. La 2nde approche (celle évoquée à la Matlab Expo) consiste à paralléliser les calculs au sein d’un modèle Simulink. Quelle sera la vôtre ?

 
Approche 1 : paralléliser les simulations
 
Sous condition de disposer de la Parallel Computing Toolbox, il est relativement simple de paralléliser une série de simulations tant que le résultat d’une simulation n’impacte pas les suivantes. C’est notamment le cas lors d’une étude de sensibilité qui consisterait à simuler un même modèle pour plusieurs valeurs différentes d’un ou plusieurs paramètres. Pour se faire on va s’appuyer sur l’instruction parfor ou sur la fonction parsim.
 
 
La vidéo ci-dessous illustre la transformation d’une boucle for par une boucle parfor et le gain obtenu au niveau du temps de simulation (de 16,79s à 10,32s).

  

Plus d’infos sur la parallélisation par l’instruction parfor ici.


La vidéo ci-dessous illustre la transformation d’une boucle for par l’utilisation de la fonction parsim. La syntaxe est assez différente mais cette méthode est celle préconisée par Mathworks pour paralléliser un grand nombre de simulations. À noter que l’utilisation de la fonction parsim donne accès à une interface graphique, le Simulation Manager, pour visualiser les détails de chaque simulation. Le Simulation Manager permet également de faire appel au Simulation Data Inspector pour comparer les résultats des différentes simulations. Ronan Blanchard évoque ce dernier outil dans l'épisode 6 de notre saga

Dans l’exemple utilisé pour créer cette vidéo, on observe très peu de gain au niveau du temps de simulation (de 26,12s à 25,44s). Cela s’explique par le peu d’itérations et la simplicité du modèle utilisé pour cette démonstration. 

  

Plus d’infos sur la parallélisation par la fonction parsim ici.


La figure suivante illustre une comparaison des temps de calcul pour les 3 méthodes (for / parfor / parsim) pour un nombre d’itérations supérieur.

  

 

Approche n°2 : paralléliser les calculs au sein d’un modèle
 
Lors des conférences Matlab Expo 2021, Mathworks annonce la possibilité de paralléliser les calculs au sein d’un modèle Simulink si celui-ci contient des s-functions ou des modèles référencés et que ceux-ci sont parallélisables. La figure ci-dessous illustre les deux types d’exécution pour un modèle de ce type.
 
  
Mathworks précise bien que cette fonctionnalité est automatique mais elle est limitée à trois types de blocs :
  • Model reference en mode accelerator,
  • S-function,
  • Co-Simulation FMU.

La documentation de Matlab/Simulink présente un exemple qui illustre très bien cette fonctionnalité dans le cas d’un exemple avec des s-functions. 

Pour valider cette fonctionnalité dans le cas des modèles référencés, nous avons créé chez Acsystème un exemple similaire à celui cité ci-dessus. Les deux figures ci-dessous illustrent cet exemple. 

    

La mise en œuvre de cette fonctionnalité nécessite la prise en compte de plusieurs limitations : modèles référencés utilisés en mode accelerator, pas d’états continus, utilisation d’un solver à pas fixe… Malgré ces limitations (dont certaines seront certainement supprimées dans les prochaines versions de Matlab), cette fonctionnalité reste certainement une bonne approche pour réduire les temps de simulation. Cela nécessite la création de modèles référencés qui est également une bonne technique pour réduire les temps de simulation comme le décrit très bien l’article « réduisez vos temps de simulation Simulink avec le Reference Model » de Marouane BENAZIZ.


Conclusion
 
Cet article présente deux approches basées sur la parallélisation pour accélérer vos simulations dans Simulink dont la 2ème approche qui est une nouveauté de la release R2021a. Pour information Mathworks propose une série de vidéos intitulées Five Practical Tips to Speed Up Your Simulink Simulations qui évoque d’autres approches à savoir l’utilisation du Performance Advisor, le mode Fast Restart, l’exploitation des différents modes de simulation (Normal, Acceleartor et Rapid Accelerator) et l’utilisation des modèles référencés.

△ Haut de page

 

S01E08 - Utiliser le presse papier pour transférer des tableaux par Stéphanie LESCARRET
 

Les Uitable permettent de facilement rendre compte et éditer des données comme dans un tableur. On les utilise beaucoup dans les applications pour visualiser nos données sous forme de tableau. Et comme beaucoup, j’ai toujours le fol espoir de réussir à transférer des données de mon application vers Excel, ou d’Excel vers mon application avec un simple copier/coller. Malheureusement, cela n’est pas possible nativement mais on peut rapidement développer quelque chose qui répond à ce besoin.
 
Pour réaliser cette opération, nous aurons besoin de :
  • un menu contextuel, associé à la table et de 2 actions copier / coller (facile à mettre en œuvre depuis l’App Designer depuis la version R2020a),
  • une fonction qui peut transférer de l’information vers et depuis le presse-papier (une bonne vieille fonction qui existe depuis 2006 : clipboard !).

 

D’abord le design

La première étape consiste à créer une nouvelle App, et y ajouter une table :

 
  
 
Vous utilisez la fonction startupFcn pour remplir la table :
 
  
 
La seconde étape consiste à créer un menu contextuel, et y ajouter 2 commandes Copier et Coller.
 
  
 
 
Ensuite le code
 
La fonction clipboard permet de transférer une chaîne de caractères entre Matlab et le presse-papier. Un tableau sous Excel est copié dans une chaîne dont les colonnes sont séparées par des tabulations et les lignes par un retour à la ligne. Il va donc falloir créer des fonctions pour transformer notre table en une chaîne au bon format. 
 
Copier : dans la jungle des fonctions de manipulation de chaînes de caractères, j’ai choisi la fonction sprintf pour transformer une ligne de la table. Cette fonction de bas niveau permet de gérer tout type de données et d’insérer facilement les tabulations. Traduire une ligne : Prénom (=chaine) / Min (=numérique) / Moyenne (=numérique) / Max (=numérique) se fait avec une instruction du style : 
 
str = sprintf('%s\t%f\t%f\t%f', prenom, min, moyenne, max);
 
Puis, pour concaténer les lignes entre elles, j’utilise la fonction de haut niveau strjoin en utilisant le retour à la ligne comme séparateur. Finalement, on obtient le code suivant pour copier la table dans le presse-papier :
 
  
 
Et voilà : 
 
  
 
Coller : pour interpréter la chaine de caractère issue d’Excel, j’utilise la fonction textscan, qui comme sprintf permet de choisir le format de décodage de la chaine de caractères. Mais attention, comme pour toute action de l’utilisateur, il faut vérifier qu’il essaie bien de coller quelque chose de compatible avec la table de données.
 
Si j’identifie un problème dans les données interprétées, j’alerte l’utilisateur avec un message :
 
 
Et on obtient : 
 
  
 
  
 
Pour aller plus loin, on peut étoffer le code et faire en sorte de copier/coller une ligne ou une colonne pour obtenir ce type de fonctionnement :
 
  
 
△ Haut de page