Matlab:使用匿名函数求解二阶 ODE

Matlab: Solve 2nd order ODE using anonymous function

用matlab求解下面的ODE

t = 0:.01:20;
x0 = [0 0]';
xdot = @(t,x) [0 1; 0 0] * x;
ode45(@(t,x) xdot(x(1), x(2)),t,x0)

我收到这个错误:

Error using odearguments (line 91) @(T,X)XDOT(X(1),X(2)) must return a column vector.

你的 x0 是一个 2 by 1 矩阵,在你的函数句柄

中精确
xdot = @(t,x) [0 1; 0 0] * x; ---> xdot = @(t,x) [0 1; 0 0] * [x(1);x(2)];

因为 xdot 已经被定义为一个函数,你不需要 @ 将它传递给 ode45

代码如下

t = 0:.01:20;
x0 = [0 0]';
xdot = @(t,x) [0 1; 0 0] * [x(1);x(2)];
ode45(xdot,t,x0)