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