我正在尝试编写一个matlab代码来模拟炮弹的弹丸运动,包括空气阻力和空气密度随温度变化的影响,但是到目前为止我的代码只计算了一条直线。壳弹道不正确。任何人都可以指出我出错的地方并指出我正确的方向,包括空气密度和温度的影响?感谢。
clear;
%input parameters
v0=input('Enter the muzzle velocity (m/s) ');
theta=input('Enter the quadrant elevation (degrees) ');
%T0=input('Enter the value for the ground temperature in degreees ');
%T0=T0+275.16;
b2bym0=4e-5;
g=9.8;
dt=1e-2;
%define initial conditions
x0=0;
y0=0;
vx0=v0*cosd(theta);
vy0=v0*sind(theta);
fdragx=-b2bym0*v0*vx0;
fdragy=-b2bym0*v0*vy0;
n=1000; %iterations
%Tratio=(T0/300)^(2.5);
%define data array
%t=zeros(1000);
x=zeros(1000); %x-position
y=zeros(1000); %y-position
vx=zeros(1000); %x-velocity
vy=zeros(1000); %y-velocity
for i=1:n
t(i)=i*dt;
vx(i)=vx0+fdragx*dt;
vy(i)=vy0+fdragy*dt;
x(i)=x0+vx(i)*dt;
y(i)=y0+vy(i)*dt;
x0=x(i);
y0=y(i);
vx0=vx(i);
vy0=vy(i);
end
plot(x,y,'g+')
答案 0 :(得分:1)
看起来你没有为你的y速度建模g力的向下加速度
答案 1 :(得分:0)
看起来有三个问题。
首先,您在更新vy
时错过了重力。 <强>固定强>
第二阻力没有随速度更新。 <强>固定强>
第三,您使用初始值而不是之前的值计算新位置/速度。在循环中尝试更改这些行。如果matlab索引为1,则可能必须更新for循环以从2:n
开始。
vx(i)=vx(i-1)+fdragx*dt;
vy(i)=vy(i-1)+(-g+fdragy)*dt;
x(i)=x(i-1)+vx(i)*dt;
y(i)=y(i-1)+vy(i)*dt;
编辑: 没有看到初始条件的更新,无视第三条评论。