matlab如何做出动态图?

我现在得到一系列数据。T 和 A。T是一个列向量 A是与T对应的一个矩阵 对于A的每一列,代表的是一个波导的某个物理量随时间的变化。对于T的每一行,代表的是不同的波导的某一物理量的大小。
对于每一个T中每个元素,A有一个行向量与之对应,可以画出一个图形。
我想换一个连续变化的图,就是T不断变大的时候,行向量随T的变化的图形

由于没有你的数据,这里前面的部分代码使用二阶系统阶跃响应生成测试数据T和A,你需要的代码是后面的那部分。

% 生成测试数据
zeta = 0 : 0.1 : 2;
T = (0 : 0.1 : 10).';
A = zeros(length(T), length(zeta));
for i = 1 : length(zeta)
sys = tf(1, [1 2*zeta(i) 1]);
A(:, i) = step(sys, T);
end

% T变化时,A的行向量变化动态图
h = plot(A(1, :));
set(gcf,'DoubleBuffer','on');
axis([1 size(A,2) min(A(:)) max(A(:))]);
for i = 1 : length(T)
set(h, 'YData', A(i, :));
title(['T = ' num2str(T(i), '%.1f')]);
drawnow
end追问

时间间隔是怎么定的?
图形变化太快了。

追答

抱歉,最近事情忙,没能及时回答。

对代码做了一点修改:

% T变化时,A的行向量变化动态图
h = plot(A(1, :));
axis([1 size(A,2) min(A(:)) max(A(:))]);
T0 = 0.1; % 间隔时间
t0 = now*24*3600;
for i = 1 : length(T)
set(h, 'YData', A(i, :));
title(['T = ' num2str(T(i), '%.1f')]);
drawnow
while 1
t1 = now*24*3600;
if t1-t0 >= T0, t0 = t1; break, end
end
end

简单说明两点:
1、可以通过修改T0的值调整变化速度;
2、前面生成测试数据的部分没有改动,所以只贴出后面的动画部分。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-21
你需要将它保存为movie的格式吗?如果需要的话,需要用Movie(M),例子
clear all
clc
clear all
clc
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
A(1:length(x))=struct('cdata',[],'colormap',[]);
for jj=1:length(x)
set(h,'xdata',x(jj),'ydata',y(jj));
axis(axesValue);
drawnow
A(jj)=getframe;
end
movie2avi(A,'ex_movie2avi','compression','none')

或者可以制作gif格式的动画:
x=0:pi/50:2*pi;
y=sin(x);
plot(x,y)
h=line(0,0,'color','r','marker','.','markersize',40);
axesValue=axis;
A(1:length(x))=struct('cdata',[],'colormap',[]);
for jj=1:length(x)
set(h,'xdata',x(jj),'ydata',y(jj));
axis(axesValue);
drawnow
f=getframe;
f=frame2im(f);
[X,map]=rgb2ind(f,256);
if mod(jj,10)==1
if jj==1
imwrite(X,map,'ex_imwrite.gif');
else
imwrite(X,map,'ex_imwrite.gif','WriteMode','Append');
end
end
end
第2个回答  2013-07-21
每画好一个图后drawnow一下(或者pause一下指定的时间),再画下一个图,用for循环画。
下面只是一个小例子,你自己依葫芦画瓢即可
n=-2:0.01:2;
x=linspace(-pi,pi);
for k=n
plot(x,sin(k*x));
drawnow;
end