0

私は、温度に関して変化する空気抵抗と空気密度の影響を含む、大砲シェルの発射体の動きをモデル化するための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+')
4

2 に答える 2

0

3つの問題があったようです。

まず、更新中に重力を逃しましたvy修理済み

2 番目の抗力が速度で更新されていませんでした。修理済み

第三に、以前の値ではなく初期値を使用して新しい位置/速度を計算します。ループ内でこれらの行を変更してみてください。2:nmatlab のインデックスが 1の場合、for ループを更新する必要がある場合があります。

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;

編集:初期条件の更新が表示されませんでした。3 番目のコメントは無視してください。

于 2013-10-09T01:25:10.587 に答える