Проблема не в начальных условиях.Вам нужно определить dxdt
как функцию, т. Е.
% Define differential equation
function derivative = dxdt(t,y)
% Given conditions for a differential drive robot:
B = 20; % (cm) distance along axle between centers of two wheels
r = 10; % (cm) diameter of both wheels
w_l = 5*sin(3*t); % (rad/s) angular rate of left wheel
w_r = 5*sin(3*t); % (rad/s) angular rate of right wheel
v_l = r*w_l; % (cm/s) velocity of left wheel
v_r = r*w_r; % (cm/s) velocity of right wheel
v = (v_r+v_l)/B; % (cm/s) velocity of robot
theta = 90; % constant orientation of robot since trajectory is straight
derivative = v*cos(theta); % diff equation for x
end
Затем, когда вы используете ode45
, вы должны указать, что переменные t
и y
передаются в dxdt
как
[t,x] = ode45(@(t,y) dxdt(t,y), tspan, x0);
Это должно сработать.В этом случае, поскольку dxdt
принимает только аргументы по умолчанию, вы также можете написать
[t,x] = ode45(@dxdt, tspan, x0);
Полученная ошибка означает, что в какой-то момент вы превратили dxdt
в вектор длиной 69, тогда как MATLABожидал получить 1 значение для dxdt
, когда он передал одну t
и одну y
вашей dxdt
'функции'.Всякий раз, когда вы получаете подобные ошибки, я рекомендую поместить
clear all
`clearvars` % better than clear all - see am304's comment below
в верхней части вашего сценария, чтобы избежать загрязнения рабочей области ранее определеннымипеременные.