Чтобы решить ОДУ ниже с помощью Matlab
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)