使用ODE 45求解器求解六个微分方程而不定义y项? MATLAB

时间:2016-04-26 22:14:06

标签: matlab ode differential-equations ode45

我试图通过使用ode45求解器来求解微分方程。但是,它没有按预期工作。

function ydot=Untitledrt(z,y)
    ydot = zeros(6,1);
    %y(1)=A
    %y(2)=B
    %y(3)=C
    %y(4)=D
    %y(5)=P
    %y(6)=T
    m1 = 6;
    m2 = 9;
    m3 = 5;
    k1 = 6;
    k2 = 7;
    k3 = 4;
    k4 = 1;
    c1 = 1;
    c2 = 0.2;
    c3 = 0.1;
    c4 = 2;
    F1 = 3;
    F2 = 9;
    F3 = 12;
    ydot(1)=y(2)
    ydot(2)=((-((k1+k2)./m1)).*y(1))-(((c1+c2)./m1).*y(2))+((k2./m1).*y(3))+ ((c2./m1).*y(4))+(F1./m1)
    ydot(3)=y(4)
    ydot(4)=((k2./m2).*y(1))+((c2./m2).*y(2))-(((k2+k3)./m2).*y(3))-(((c2+c3).*m2).*y(4))+((k3/m2).*y(5))+((c3./m2).*y(6))+(F2./m2)
    ydot(5)=y(6)
    ydot(6)=((k2./m3).*y(3))+((c3./m3).*y(4))-(((k3+k4)./m3).*y(5))-(((c3+c4)./m3).*y(6))+(F3./m3)

MATLAB不断返回以下错误消息:

  

没有足够的输入参数。

     

Untitledrt中的错误(第24行)

     

ydot(1)= Y(2)

我理解错误是由于没有定义y术语。 ODE45求解器代码的其他一些示例也未定义y项。有什么我想念的吗?或者有人可以建议一些事情来使这个代码工作而不定义y术语。先感谢您。

1 个答案:

答案 0 :(得分:0)

First create an M-file which evaluates the right-hand side of the system f(t,y) for any given t, y1, y2, y3, y4, y5, y6 and name it as you Untitledrt.m.

function ydot=Untitledrt(t,y)
ydot = zeros(6,1);
m1 = 6;
m2 = 9;
m3 = 5;
k1 = 6;
k2 = 7;
k3 = 4;
k4 = 1;
c1 = 1;
c2 = 0.2;
c3 = 0.1;
c4 = 2;
F1 = 3;
F2 = 9;
F3 = 12;
ydot(1)=y(2)
ydot(2)=((-((k1+k2)./m1)).*y(1))-(((c1+c2)./m1).*y(2))+((k2./m1).*y(3))+ ((c2./m1).*y(4))+(F1./m1)
ydot(3)=y(4)
ydot(4)=((k2./m2).*y(1))+((c2./m2).*y(2))-(((k2+k3)./m2).*y(3))-(((c2+c3).*m2).*y(4))+((k3/m2).*y(5))+((c3./m2).*y(6))+(F2./m2)
ydot(5)=y(6)
ydot(6)=((k2./m3).*y(3))+((c3./m3).*y(4))-(((k3+k4)./m3).*y(5))-(((c3+c4)./m3).*y(6))+(F3./m3)

Now type in the following commands in MatLab window line by line or paste it in a new script file

[t,Y]=ode45('Untitledrt',[0 10],[1;-1;0;0;0;0]); 

plot(t,Y(:,1),'+',t,Y(:,2),'x',t,Y(:,3),'o',t,Y(:,4),'o',t,Y(:,5),'o',t,Y(:,6),'o')

Plot of the six dependent variables