【发布时间】:2018-12-18 16:24:05
【问题描述】:
所以我尝试使用 Matlab 中的 ode45 求解器对简单的弹丸运动(无空气阻力等)进行建模。到目前为止,这是我的代码:
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
但是,我得到的情节只是一条显然不正确的直线。任何帮助将不胜感激。
【问题讨论】:
-
am304 的回答是正确的,这里的根本是你的
f实际上并不依赖于t或y,它是constant 向量@987654325 @。你可以定义f像f = @(t,Y) [Y(2); 0; Y(4); -9.81];。
标签: matlab