Je veux tracer y = omega * x ^ 2, quel oméga est -3 en 3 avec une taille de pas de 0,25, x de -4 en 4 avec une taille de pas de 0,001. Mais ce code me donne la courbe ne peut pas bouger et les axes bougent. Je veux que la courbe bouge, comme ceci.
x=-4:0.001:4; for omega=-3:0.25:3 for i=1:length(x) y(i)=omega*x(i)^2; end plot(x,y); pause(0.1); end
Comment faire cela?
3 Réponses :
Une méthode rapide consiste à définir les limites des axes x et y dans la boucle après chaque tracé, en utilisant la commande axis ([xmin, xmax, ymin, ymax]). Cette méthode n'est pas infaillible, dans le cas où le script obtient de l'aide après le tracé mais avant de définir les limites des axes, mais dans la plupart des cas, cela devrait fonctionner.
figure(1) x=-4:0.001:4; for omega=-3:0.25:3 for i=1:length(x) y(i)=omega*x(i)^2; end plot(x,y); axis([-4 4 -50 50]) pause(0.1); end
Comme une autre réponse l'a indiqué, vous devez définir les limites de l'axe.
(Notez également qu'il n'y a aucune raison de calculer y
en utilisant une boucle.)
Mais au lieu d'utiliser plot
à chaque fois dans la boucle, il est plus efficace de créer la ligne une seule fois, puis de remplacer les données x
et y
de la ligne à chaque fois dans la boucle.
x=-4:0.001:4; all_omega=-3:0.25:3; for idx = 1:numel(all_omega) omega = all_omega(idx); y=omega*(x.^2); if idx == 1 % create animated line am = animatedline(x,y); axis([-4,4,-40,40]); box on grid on else % replace the line clearpoints(am) addpoints(am,x,y); end title(sprintf('\\Omega = %.2f',omega)); pause(0.1); end
Ou vous pouvez utiliser animatedline
,
x=-4:0.001:4; all_omega=-3:0.25:3; for idx = 1:numel(all_omega) omega = all_omega(idx); y=omega*(x.^2); if idx == 1 % create line hl = plot(x,y); axis([-4,4,-40,40]); box on grid on else % replace line data set(hl,'XData',x,'YData',y); end title(sprintf('\\Omega = %.2f',omega)); pause(0.1); end
C'est la même chose que la réponse de @ phil-goddard, mais utilise plus efficacement les poignées de la chaîne YData animée et du titre.
x = -4 : 0.001 : 4; y = zeros(1, numel(x)); omega_range = -3 : 0.25 : 3; % Create line and title, and obtain handles to them. h_plot = plot(x, y); axis([-4, 4, -40, 40]); box on; grid on; h_title = title(sprintf('\\omega = %.2f', 0)); for idx = 1:numel(omega_range) omega = omega_range(idx); y = omega * (x.^2); % Replace y data. h_plot.YData = y; % Replace title string. h_title.String = sprintf('\\omega = %.2f', omega); pause(0.1); end