Matlab - LiveScript - Réalisation de Plot dynamique

De troyesGEII
Aller à : navigation, rechercher

Introduction

Contrairement aux Scripts classiques de Matlab, les LiveScript permettent d'ajouter des éléments interactifs pour modifier en temps réels la valeur de certaines variables et mettre à jour en même temps les graphiques qui y sont liés. Cela permet par exemple d'ajouter un slider pour augmenter ou non un échantillonnage d'une fonction.

Dans l'exemple qui va suivre, nous allons réaliser un LiveScript qui permet de modifier à l'aide d'un Slider, le nombre de fonctions qui seront sommées dans une série de fourriers et ainsi pouvoir visualiser la conséquence de ce nombre sur la représentation graphique.

Création du fichier

La création d'un LiveScript se fait de la même façon qu'un Script classique.

ImageNewLiveScriptMenu.png

Rédaction du script

Lorsque le LiveScript est créé, la première fenêtre qui apparait devant vous est une fenêtre vide avec une case. La case grise permet la saisie du scripte, le reste permet de faire du formatage.

Redaction Code Vide.png

Vous pouvez passer du mode Code au mode Texte en cliquant sur le bouton "Text" de la catégorie "Live Editor", de cette façon vous habillez votre scripte.

Pour simplifier la réalisation de notre programme, nous allons partir d'un programme déjà réalisé.

clear variables;

T = -10:0.1:10;

for k=1:length(T)
    G2(k) = g(T(k),2);
    G10(k) = g(T(k),10);
    G30(k) = g(T(k),30);
    G100(k) = g(T(k),100);
end

figure;
plot(T,G2,T,G10,T,G30,T,G100);
legend('N = 2','N = 10', 'N = 30', 'N = 100');
title("Graphique");
grid on;
xlabel("Axe des ordonnées");
ylabel("Axe des abscisses");

PS : L'utilisation de "clear variables" au lieu de "clear all" permet de gagner en performance, dans notre utilisation, cela suffira.

Et la fonction g(t,N)

function y = g(t,N)
    
    y = 0;

    for k = 1:N
       y = y + (sin(k*t*(pi/3))/k);
    end
    y = (1/pi)*y; 

end

Ce code reprend l'exercice 2 du TD3 d'Outil Logiciel qui pour rappel la fonction était :

TD3 OL Math Ex2.png

Et voici le résultat graphique de ce programme :

Matlab Figure TD3 Ex2.png

Notre objectif sera donc qu'au lieu d'afficher plusieurs valeurs de N, de directement avoir un Slider qui permet de modifier cette valeur et de voir les changements apparaitre. Créons alors un LiveScript à côté de notre "g.m" (notre fichier de la fonction), et copions le code précédant dans l'encadré gris. Plaçons le curseur du clavier entre "clear variables;" et "T = -10:0.1:10;", de façon à ensuite cliquer sur le bouton "Control" (Catégorie "Live Editor", section "Code"). Vous devriez voir un "Numeric Slider" apparaitre.

NumericSlider example.png

De ce fait une boite de dialogue s'ouvre alors.

  • Label : Nom que portera ce Slider
  • Min : Valeur minimale où celui-ci coulissera
  • Max : Valeur maximale où celui-ci coulissera
  • Step : Le pas entre chaque valeur du slider

Exemple : une valeur minimale de 1 et un pas de 2 fera que le slider ne proposera que des valeurs impaires.

Dans notre situation, nous allons faire un Slider qui ira de 1 à 100 avec un pas de 1, nous ferons alors par la suite une somme de 1 à 100 fonctions pour notre DSF. Et l'intérêt d'avoir placé notre slider ici, est que nous pouvons associé la valeur du slider à une variable, et cela, juste en plaçant "N =" avant le slider si on veut associé sa valeur à N.

Conclusion

Cela ressemblera donc à cela :

Matlab programme final.png

On remarquera que notre boucle for aura été modifié pour ne laisser plus que "G2", la légende et la fonction plot sera également adapté en conséquence. De plus, le LiveScript affichera les plots directement dans la fenêtre de droite.

Une fois qu'on a compris comment fonctionne un Slider, il est aisé d'ajouter un autre type d'actionneurs, un champ peut être plus agréable à l'utilisation dans certaines situations. Il faudra cette fois-ci, faire un champ de type "Double" et adressé la valeur à une variable comme faite précédemment.
On peut ajouter autant de contrôleurs interactifs que l'on souhaite

Ressources complémentaires