私はMatlabが初めてです。ode45
およびを使用しarrow.m
て、Matlab で 3 次元空間を移動するときの質量のあるスイング スプリングの動きを示すスクリプトがあります。プログラムは、私がやりたいことをほとんどやっています。現在、ダイヤモンドの密度は、バネの速度を示しています (例外がある場合を除く)。ode45
個人的な好みの数のサンプルを取ります)、速度は関数のステップ サイズでほぼ正確に説明されます (少なくとも、私のコンピューターがコードを実行している速度で)。これでやりたいことは、コードでコメントアウトした位置ベクトルを、質量の瞬間的な位置、つまり曲線の終点にのみ表示し、ダイヤモンドが表示されるすべてのポイントに表示しないようにすることです。助けを求めて周りを見回しましたが、試してみるとすべてエラーが発生するようです。誰かが私を正しい方向に向けることができれば、それは大歓迎です。プログラムを実行してみてください。関数のパラメーターをいじってみてください。
function elasticPendulum(totalTime)
time=1;
totalTime=20
X=1
Vx=0
Y=0
Vy=0
Z=1.1
Vz=0
w=3;
g=9;
l=1;
while (time<totalTime)
tspan=[0,time];
x0=[X,Vx,Y,Vy,Z,Vz];
[t,x]=ode45(@F,tspan,x0);
plot3(x(:,1),x(:,3),x(:,5),'dk'), axis([-2 2 -2 2 -10 2]);
grid on;
o=[0, 0, 0];
Xeq=[0, 0, -(g/(w^2)+l)];
arrow(o,Xeq,'Length',5);
%{
Xt=[x(:,1) x(:,3) x(:,5)]
arrow(o,Xt,'Length',5);
%}
time=time+.1*(((x(2))^2+(x(4))^2+(x(6))^2)^(1/2))
pause(.1);
end
function xprime=F(t,x)
r=sqrt(x(1)^2+x(3)^2+x(5)^2);
xprime=[x(2);-w*(r-l)/r*x(1);x(4);-w*(r-l)/r*x(3);x(6);-w*(r-l)/r*x(5)-g];
end
end