Updatedline在Matlab上drawnow后未更新

Updatedline在Matlab上drawnow后未更新,matlab,drawnow,Matlab,Drawnow,我有一个显示摆动画的代码,效果很好 现在我想同时画出钟摆的位置。但它不起作用 这是我的密码: % Program 6.3 Animation program for pendulum using IVP solver % Inputs: int = [a b] time interval, % initial values ic = [y(1,1) y(1,2)], h = step size % Calls a one-step method such as trapstep.m % Exa

我有一个显示摆动画的代码,效果很好

现在我想同时画出钟摆的位置。但它不起作用

这是我的密码:

% Program 6.3 Animation program for pendulum using IVP solver
% Inputs: int = [a b] time interval,
%  initial values ic = [y(1,1) y(1,2)], h = step size
% Calls a one-step method such as trapstep.m
% Example usage: pend([0 10],[pi/2 0],.05)
function pend2(int,ic,h,l)
n=round((int(2)-int(1))/h); % plot n points in total
y(1,:)=ic;                % enter initial conds in y
t(1)=int(1);
clf;                      % clear screen
subplot(2,1,1);
x(1)=1
axis([0 200 -2 2])
set(gca,'xlim',[-2.2 2.2],'ylim',[-2.2 2.2], ...
  'xtick',[-2 -1 0 1 2],'ytick',[-2 -1 0 1 2], ...
  'drawmode','fast','Visible','on','NextPlot','add');
plot(0,0,'ks');           % pivot where rod attached
axis square               % make aspect ratio 1 - 1
bob = line('color','r','Marker','.','markersize',40,...
    'erase','xor','xdata',[],'ydata',[]);
rod = line('color','b','LineStyle','-','LineWidth',3,...
    'erase','xor','xdata',[],'ydata',[]);
for k=1:n
  x(1,k+1)=x(1,k)+1;
  t(k+1)=t(k)+h;
  y(k+1,:)=trapstep(t(k),y(k,:),h,l);
  xbob = l*cos(y(k+1,1)-pi/2); ybob = l*sin(y(k+1,1)-pi/2);
  xrod = [0 xbob]; yrod = [0 ybob];
  set(rod,'xdata',xrod,'ydata',yrod)
  set(bob,'xdata',xbob,'ydata',ybob)
  subplot(2,1,2);
  addpoints(animatedline,x(1,k),y(k,1));
  drawnow;
  pause(h)
end

function y = trapstep(t,x,h,l)
%one step of the Trapezoid Method
z1=ydot(t,x,l);
g=x+h*z1;
z2=ydot(t+h,g,l);
y=x+h*(z1+z2)/2;

function z=ydot(t,y,l)
g=9.81;m=10;c=4.5;
z(1) = y(2);
z(2) = -(g/l)*sin(y(1)) -(c/m)*y(2);
有人能帮我吗


谢谢

问题在于这一行:

addpoints(animatedline,x(1,k),y(k,1));
每次调用时,它都会创建一条新的动画线

在for循环之前输入以下内容

ax = subplot(2,1,2);
hdl = animatedline;
ax.XLim = [0 200];
ax.YLim = [-2 2];
并将上面提到的行更改为

addpoints(hdl,x(1,k),y(k,1));

嗨,帕特里克,谢谢你的回答。现在可以了。我知道子情节必须在循环之外,这样它就不会一次又一次地创建相同的情节。但是如果我有3个子包s3,1,x,我想同时升级其中的两个子包呢?在我的第一个问题上,我画出了钟摆的角度。现在,我还想现场绘图,它的速度。这取决于你是想使用另一条动画线还是普通的绘图。对于第二个,使用子图3,1,3;hdl2=动画线;以及后来的addpointshdl2。。。。对于普通图,使用ax2=子图3,1,3;以及后来的plotax2。。。。