not enough input argument
2 次查看(过去 30 天)
显示 更早的评论
hi guys,i have a problem trying to run this code : function double_pendulum(ivp, duration, fps, movie) % DOUBLE_PENDULUM Animates the double pendulum's (mostly) chaotic behavior. % % author: Alexander Erlich (<mailto:alexander.erlich@gmail.com alexander.erlich@gmail.com>) % % parameters: % % ivp=[phi1; dtphi1; phi2; dtphi2; g; m1; m2; l1; l2] % % Initial value problem. phi1 and dtphi1 are % the initial angle and anglular velocity. g % is gravity, m1 and l1 mass and rod length. % For an explaining picture, see % documentation file in same folder. % % duration The time interval on which the ode is % solved spans from 0 to duration (in sec). % % fps Frames Per Second. The framerate is % relevant both for normal (realtime) % animation and movie recording. % % movie If false, a normal realtime animation of % the motion of the double pendulum (the % framerate being fps) is shown. % If true, a movie (.avi) is recorded. The % filename is 'doublePendulumAnimation.avi' % and the folder into which it is saved is % the current working directory. % % This function calls double_pendulum_ODE and is, in turn, called by % double_pendulum_init. % % Example call: >> double_pendulum([pi;0;pi;5;9.81;1;1;2;1],100,10,false) % Or, simply call >> double_pendulum_init % % ---------------------------------------------------------------------
clear All; clf;
nframes=duration*fps; % here is where the error occurs sol=ode45(@double_pendulum_ODE,[0 duration], ivp); t = linspace(0,duration,nframes); y=deval(sol,t);
phi1=y(1,:)'; dtphi1=y(2,:)'; phi2=y(3,:)'; dtphi2=y(4,:)'; l1=ivp(8); l2=ivp(9); % phi1=x(:,1); dtphi1=x(:,2); % phi2=x(:,3); dtphi2=x(:,4); % l1=ivp(8); l2=ivp(9);
h=plot(0,0,'MarkerSize',30,'Marker','.','LineWidth',2); range=1.1*(l1+l2); axis([-range range -range range]); axis square; set(gca,'nextplot','replacechildren');
for i=1:length(phi1)-1
if (ishandle(h)==1)
Xcoord=[0,l1*sin(phi1(i)),l1*sin(phi1(i))+l2*sin(phi2(i))];
Ycoord=[0,-l1*cos(phi1(i)),-l1*cos(phi1(i))-l2*cos(phi2(i))];
set(h,'XData',Xcoord,'YData',Ycoord);
drawnow;
F(i) = getframe;
if movie==false
pause(t(i+1)-t(i));
end
end
end
if movie==true
movie2avi(F,'doublePendulumAnimation.avi','compression','Cinepak','fps',fps)
end
it says(not enough input argument in this line)
nframes=duration*fps;
0 个评论
回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!