アプリ版:「スタンプのみでお礼する」機能のリリースについて

よろしくお願いいたします。

Scilabを用いて二重振り子の数値解析を行なっています。
この先scilabが必要になるのでいろいろ使ってみているのですが、
うまくいきません。

オイラー法を用いて二重振り子の運動方程式を動かそうとしているのですが、
動きません。

ソースは
//Matrix
ccc1=zeros(20000,1);
ccc2=zeros(20000,1);
s1=zeros(20000,1);
s2=zeros(20000,1);
c1=zeros(20000,1);
c2=zeros(20000,1);

m1=0.10; //一重目質量
m2=0.08; //二重目質量

l1=0.4; //一本目長さ
l2=0.3; //二本目長さ
dt=0.05; //時間刻み幅
g=9.80665; //Gravitational acceleration

c1(1)=%pi;
c2(1)=%pi*0.5;

s1(1)=0; //1.
s2(1)=0; //2.

//Eular method
for t=0:1:100

z1=-m2*l1*s1(t+1)*s1(t+1)*sin(c1(t+1)-c2(t+1))*cos(c1(t+1)-c2(t+1));
z2=m2*g*cos(c1(t+1)-c2(t+1))*sin(c2(t+1));
z3=-m2*l2*s2(t+1)*s2(t+1)*sin(c1(t+1)-c2(t+1));
z4=(m1+m2)*g*sin(c1(t+1));
z5=l1*m1+l1*m2*sin(c1(t+1)-c2(t+1))*sin(c1(t+1)-c2(t+1));

ccc1=(z1+z2+z3+z4)/z5;
ccc2(t+2)=ccc2(t+1)+dt*ccc2(t+1);
s1(t+2)=s1(t+1)+dt*ccc1(t+1);
c1(t+2)=c1(t+1)+dt*s1(t+1);

z6=(sin(c1(t+1)-c2(t+1))*(m2*l2*s2(t+1)*s2(t+1)*cos(c1(t+1)-c2(t+1))));
z7=(sin(c1(t+1)-c2(t+1))*((m1+m2)*l1*s1(t+1)*s1(t+1)));
z8=(m1+m2)*g*cos(c1(t+1)-c2(t+1))*sin(c1(t+1));
z9=(m1+m2)*g*sin(c2(t+1));
z10=(l2*m1+l2*sin(c1(t+1)-c2(t+1))*sin(c1(t+1)-c2(t+1)));

ccc1=(z6+z7+z8+z9)/z10;
ccc2(t+2)=ccc2(t+1)+dt*ccc2(t+1);
s2(t+2)=s2(t+1)+dt*ccc2(t+1);
c2(t+2)=c2(t+1)+dt*s2(t+1);


end

なのですが、
ccc2(t+2)=ccc2(t+1)+dt*ccc2(t+1);
s1(t+2)=s1(t+1)+dt*ccc1(t+1);
c1(t+2)=c1(t+1)+dt*s1(t+1);

のあたりで、
「添字に誤りがあります」とエラーが出てしまいます。
20000行一列の行列を用意して、C言語のように配列を用いているのですが、、、。

ご教授よろしくお願いいたします。

A 回答 (1件)

ccc1=(z1+z2+z3+z4)/z5;


としたものを
ccc1(t+1);
と使おうとしたからでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!