0
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)
4

1 回答 1

0

这可能是因为您的初始条件y0被定义为列向量(注意;in 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 基础知识。这就像在你能走路之前尝试跑步一样。请参阅我之前关于教程的建议。

于 2017-07-11T09:51:31.407 回答