2013-10-09 75 views
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+') 
+1

除了像@prgao所說的那樣忘記引力之外,拖曳力應該在循環內更新。現在拖曳力在時間上是不變的。 – kalhartt

+0

我已將for循環更新到http://imgur.com/ikLboeU,但它仍然沒有完全模擬重力,想法? –

回答

1

它看起來並不像你爲你的Ÿ速度

+0

確實,我在-v中添加了vy等式,以便該行現在讀取vy(i)= v0 +( - g + fdragy)* dt,但是在運行代碼時,我會得到一條輕微的曲線而不是拋物線。 http://imgur.com/QyAAfIF –

+0

也不是,應該是拖拽力與速度成正比嗎? – prgao

+0

您可能還需要模擬更長的時間。 – prgao

0

建模克力向下加速貌似有三個問題。

首先你錯過了更新vy的引力。 固定

第二個拖動力沒有與速度更新。 固定

第三,你使用初始值而不是以前的值來計算新的位置/速度。在循環中嘗試更改這些行。您可能需要更新您的for循環,從2:n去,如果在1

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; 

編輯MATLAB指標: 沒有看到的初始條件的更新,忽略的第三點意見。

+0

第三,你錯了。他用當前的值代替初始值。 –

+0

錯過了,你是對的。 – kalhartt