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)
答案 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基础之前尝试高级内容。这就像在你走路之前试图跑步一样。请参阅我之前关于教程的建议。