0

空気抵抗を使って発射体の動きをモデル化しようとしています。

これは私のコードです:

function [ time , x , y ] = shellflightsimulator(m,D,Ve,Cd,ElAng)

% input parameters are:
% m mass of shell, kg
% D caliber (diameter)
% Ve escape velocity (initial velocity of trajectory)
% Cd drag coefficient
% ElAng angle in RADIANS

A = pi.*(D./2).^2; % m^2, shells cross-sectional area (area of circle)
rho = 1.2 ; % kg/m^3, density of air at ground level
h0 = 6800; % meters, height at which density drops by factor of 2
g = 9.8; % m/s^2, gravity
dt = .1; % time step

% define initial conditions
x0 = 0; % m
y0 = 0; % m
vx0 = Ve.*cos(ElAng); % m/s
vy0 = Ve.*sin(ElAng); % m/s

N = 100; % iterations

% define data array
x = zeros(1,N + 1); % x-position,
x(1) = x0;
y = zeros(1,N + 1); % y-position,
y(1) = y0;
vx = zeros(1,N + 1); % x-velocity,
vx(1) = vx0;
vy = zeros(1,N + 1); % y-velocity,
vy(1) = vy0;


i = 1;
j = 1;

while i < N
    ax = -Cd*.5*rho*A*(vx(i)^2 + vy(i)^2)/m*cos(ElAng); % acceleration in x
    vx(i+1) = vx(i) + ax*dt; % Find new x velocity
    x(i+1) = x(i) + vx(i)*dt + .5*ax*dt^2; % Find new x position
    ay = -g - Cd*.5*rho*A*(vx(i)^2 + vy(i)^2)/m*sin(ElAng); % acceleration in y
    vy(i+1) = vy(i) + ay*dt; % Find new y velocity
    y(i+1) = y(i) + vy(i)*dt + .5*ay*dt^2; % Find new y position

    if y(i+1) < 0 % stops when projectile reaches the ground
        i = N;
        j = j+1;
    else
        i = i+1;
        j = j+1;
    end
end

plot(x,y,'r-')
end

これは私がMatlabに入れているものです:

shellflightsimulator(94、.238,1600、.8,10 * pi / 180)

これにより、放物線ではなく、奇妙なプロットが生成されます。また、位置は負の値であるように見えます。注:ElAngはラジアンです!

私は何が間違っているのですか?ありがとう!

4

1 に答える 1

1

vx と vy が正しくありません... vx= ve*sin(ラジアン単位の角度) で、vy は反対です。U また、初期速度と * の間にドットは必要ありません。これは、要素ごとの乗算にのみ使用され、初期速度は定数変数です。ただし、ドット乗数は答えを変更しません。必要ないだけです..

于 2013-02-14T22:03:30.627 に答える