Filter löschen
Filter löschen

How to fix the error?

1 Ansicht (letzte 30 Tage)
Gazza Dazzle
Gazza Dazzle am 2 Sep. 2014
Kommentiert: Gazza Dazzle am 2 Sep. 2014
Hi I am not sure how to fix the error in this program, thanks in advance.
clc, clear all, close all
l=0.3; sampling=0.01; runningstep=200; timespan=sampling*runningstep;
x0=[pi/6 0];
%main program for numberical solution k=l; while(k<1000) [t,y]=ode45(@pendulum,[0 sampling], x0, [], l); if k==1 yp(1,:)=y(1,1:2); tp(1,:)=t(1,1); else yp(k,:)=y(size(y,1),1:2); tp(k,1)=sampling*k; end %update date x0=y(size(y,1),1:2); %change initial value k=k+1; end
%animation xa=l*sin(yp(:,1)); ya=-l*cos(yp(:,1)); hp=plot([0,0],[xa(1),ya(1)],'linewidth',2,'Marker','o','Erasemode','xor'); axis([-l -0.1 l+0.1 -l-0.1 l+0.1]); for i=1: size(tp) set(hp,'xdata',[0,xa(i)],'ydata',[0,ya(i)]); drawnow pause(0.001); grid on mov(i)=getframe; end movie2avi(mov,'pendulum.avi')
2nd Function file ------------------------------------------- function dy=pendulum(t,y,l) dy(1,1)=y(2,1); dy(2,1)=-9.81/l*sin(y(1,1));
  2 Kommentare
Gazza Dazzle
Gazza Dazzle am 2 Sep. 2014
Subscript indices must either be real positive integers or logicals.
Error in pendulum01 (line 18) yp(k,:)=y(size(y,1),1:2);
Pierre Benoit
Pierre Benoit am 2 Sep. 2014

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Yona
Yona am 2 Sep. 2014
you start by
l=0.3;
and you put this value in k
k=l;
and because k>1 you do
yp(k,:)=y(size(y,1),1:2);
but you don't have yp(0.3,:).
k need to be positive integer.
  1 Kommentar
Gazza Dazzle
Gazza Dazzle am 2 Sep. 2014
OH great thanks for your help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by