有没有理由说MATLAB的drawow不会刷新?
这是我的代码:
j=1;
for k = 1:length(P)
for i = 1:n
plot(P(k,j),P(k,j+1),'.');
j = j+2;
end
axis equal
axis([-L L -L L]);
j=1;
drawnow
end
(rungekutta4
是我自己编写的函数,它运行正常,所以问题不存在。)
粒子只是留在绘图上,每次循环执行时都不会被覆盖。
我该如何解决这个问题?
答案 0 :(得分:2)
执行此操作的正确有效方法是使用handle graphics。您还应该对plot
命令进行矢量化。
% Example data to make runnable
L = 1;
n = 10; % Number of points
P = 2*rand(1e2,n+1)-1;
% Initialize plot, first iteration
h = plot(P(1,1:n),P(1,2:n+1),'.'); % Plot first set of points and return handle
axis equal;
axis([-L L -L L]);
hold on; % Ensure axis properties are fixed
drawnow;
% Animate
for k = 2:size(P,1) % size is safer in this case
% Use handle to update the positions of the previously plotted points
set(h,{'XData','YData'},{P(k,1:n),P(k,2:n+1)});
drawnow;
pause(0.1); % Slow down animation a bit to make visible
end
在动画的每次迭代中调用clf
和/或plot
会导致内存中的许多内容被不必要地删除和重新分配,从而导致代码速度变慢。在某些情况下,它也可能导致闪烁。