Matlab: решить ODE 2-го порядка с помощью анонимной функции - PullRequest
0 голосов
/ 26 мая 2019

Чтобы решить ODE ниже с помощью matlab

enter image description here

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)

Я получаю эту ошибку:

Ошибка при использовании аргументов(строка 91) @ (T, X) XDOT (X (1), X (2)) должен возвращать вектор столбца.

1 Ответ

0 голосов
/ 26 мая 2019

Ваш 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)
...