Matlab ODE45 nonliear必须返回列向量

时间:2017-07-11 09:35:16

标签: matlab ode ode45

function yp = nonlinear(t,y)
e=0.2;
yp(1)=y(2);
yp(2) = (-y(1)-e*y(1)^3);

代码

tspan = [0 20];
y0=[0;0]
[t,y]=ode45('nonlinear',tspan,y0)
plot (t,y(:,1))
grid
xlabel('time')
ylabel('u')
title ('u vs. t')
hold on;

当我执行此操作时,它表示非线性必须返回列向量。对不起真的不在此。

Error using odearguments (line 90)
NONLINEAR must return a column vector.

Error in ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in Project1 (line 3)
[t,y]=ode45('nonlinear',tspan,y0)

1 个答案:

答案 0 :(得分:0)

这可能是因为您的初始条件y0被定义为列向量(请注意;中的y0=[0;0])。你可以:

  • y0更改为行向量(y0=[0,0]

OR

  • 更改您的函数nonlinear以返回列向量

根据以下代码:

function yp = nonlinear(t,y)
e=0.2;
yp = [y(2); -y(1)-e*y(1)^3 ];

我还建议您将函数句柄传递给ode求解器:

[t,y]=ode45(@nonlinear,tspan,y0)

我运行它(在Octave中,而不是在MATLAB中),它运行得很好。但是,解决方案是零平面。

但是,再次,根据您之前的问题,您需要熟悉MATLAB基础之前尝试高级内容。这就像在你走路之前试图跑步一样。请参阅我之前关于教程的建议。