【问题标题】:Projectile motion of a cannon ball with air drag and air density not correct plot?带有空气阻力和空气密度的炮弹的弹丸运动不正确的情节?
【发布时间】:2013-10-09 00:25:06
【问题描述】:

我正在尝试编写一个 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+')

【问题讨论】:

  • 除了像@prgao 所说的那样忘记重力之外,阻力应该在循环内更新。现在阻力在时间上是恒定的。
  • 我已经将 for 循环更新为 imgur.com/ikLboeU,但它仍然没有完全模拟重力,想法?

标签: matlab motion projectile


【解决方案1】:

看起来你不是在为你的 y 速度建模 g 力的向下加速度

【讨论】:

  • 没错,我在 vy 方程中添加了一个 -g,因此该行现在读取 vy(i)=v0+(-g+fdragy)*dt 但是在运行代码时我得到了一个轻微的曲线而不是抛物线。 imgur.com/QyAAfIF
  • 另外,阻力不应该与速度成正比吗?
  • 您可能还需要模拟更长的时间。
  • 不幸的是,我的 matlab 版本无法处理超过 n=1000 的迭代
  • 尝试增加步长
【解决方案2】:

看起来有三个问题。

首先您在更新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;

编辑: 没有看到初始条件的更新,忽略第三条评论。

【讨论】:

  • 第三,你错了。他将初始值替换为当前值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多