Matlab ODE45 nonliear 必须返回一个列向量


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)

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

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

  • 更改函数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 基础知识。这就像在你能走路之前试图跑步一样。请参阅我之前关于教程的建议。