web-dev-qa-db-fra.com

Tracer à l'intérieur d'une boucle dans MATLAB

Je fais quelque chose comme ça:

a = [1:100];
for i=1:100,
    plot([1:i], a(1:i));
end

Mon problème est que l'intrigue n'est pas affichée tant que la boucle n'est pas terminée. Comment puis-je afficher/mettre à jour l'intrigue à chaque itération?

15
Macarse

Utilisez DRAWNOW

a = [1:100];
for i=1:100,
 plot([1:i], a(1:i));
 drawnow
end

Vous pouvez également consulter ANYMATE à partir de l'échange de fichiers.

20
Jonas

Une autre façon de procéder si vous souhaitez simplement la visualiser sans enregistrer l'animation consiste à utiliser refreshdata au lieu de plot pour les tracés suivants. Vous aurez toujours besoin d'appeler drawnow pour qu'il se mette à jour à l'écran.

soit utiliser

set(fig_handle,'XData',new_xdata_array)
set(fig_handle,'YData',new_ydata_array)
refreshdata
drawnow

ou utiliser

set(fig_handle,'XDataSource',xdata_array)
set(fig_handle,'YDataSource',ydata_array)

%call this whenever xdata_array and ydata_array are assigned new values to see it updated in the plot
refreshdata
drawnow

pour votre exemple, cela pourrait ressembler à:

a=[1:100];

figure;
h=plot(1,a(1));
for i=2:100
  set(h,'XData',[1:i])
  set(h,'YData',a(1:i))
  refreshdata
  drawnow
end

Ce n'est pas très utile pour les tracés linéaires simples (pour lesquels plot(); drawnow; est plus simple et plus rapide), mais lorsque vous devez créer des figures plus complexes impliquant plusieurs types de tracé, cela peut être utile.

5
JS Ng

De la documentation pour comet.m

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(x,y);
3
MatlabDoug

Matlab vous permet d'automatiser une instruction de boucle pour les variables

x = 0.0:0.1:2*pi

plot(x,cos(x));

est un exemple ......

Souvent, vous n'avez pas vraiment besoin de tracer une boucle

0
user3124024