Моделирование движения снаряда с помощью Matlab ode45 - PullRequest
0 голосов
/ 18 декабря 2018

Поэтому я пытаюсь смоделировать простое движение снаряда (без сопротивления воздуха и т. Д.) С помощью решателя ode45 в Matlab.Пока это мой код:

function [x,y] = trajectory_without_AR_45(v0,theta, dt)

%Path of mortar without air resistance using ode45
g = 9.81;
t_start = 0;
t_end = 100;
%Initial Conditions
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];
%Derivatives
dy1 = y0(2); %vx
dy2 = 0; %ax
dy3 = y0(4); %vy
dy4 = -g; %ay
dy = [dy1;dy2;dy3;dy4];
%Using ODE45
f = @ (t, y) (dy);
solution = ode45(f, [t_start, t_end], y0);
t = t_start : 0.01: t_end;
y = deval(solution, t);
plot (y(:,1), y(:,3)); %plotting trajectory
end

Тем не менее, график, который я получаю, - это просто прямая линия, которая явно не верна.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 18 декабря 2018

Я думаю, что вы не вызываете решатель од правильно, вы, кажется, используете только начальные условия для вычисления 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...