Я думаю, что вы не вызываете решатель од правильно, вы, кажется, используете только начальные условия для вычисления dy
, что неправильно.Лучше всего поместить функцию ode в отдельную функцию (файл).Например, следующее в missile.m
:
function dY = missile(t,Y)
g = 9.81;
dY(1) = Y(2); %vx
dY(2) = 0; %ax
dY(3) = Y(4); %vy
dY(4) = -g; %ay
end
, которое вы затем назвали бы следующим образом:
t_start = 0;
t_end = 2.3; % changed to something more consistent with when y<0
v0 = 10; % made up
theta=pi/4; % made up
y01 = 0; %initial x
y02 = v0 * cos(theta); %finding initial velocity in x direction
y03 = 0; %initial y
y04 = v0 * sin(theta); % finding intial velocity in y direction
y0 = [y01;y02;y03;y04];
opts = odeset('MaxStep',0.01,'InitialStep',0.001);
[t,y] = ode45(@missile, [t_start, t_end], y0, opts);
plot(t,y)
legend('x','dx','y','dy')
, что дает следующие результаты:
![enter image description here](https://i.stack.imgur.com/3I6xU.jpg)