初速というか母機の速度をv0とします。高校の物理で習ったように、高速で運動する物体の空気抵抗は速度の二乗に比例するとします。質量も空気抵抗の比例定数も正規化して1としましょう。発射時を時刻0, 推力a>0は時刻t0まで一定で、その後は0になるものとします。
速度をv(t)で表すと、時刻0からt0までは次のニュートンの運動方程式が成立します。
dvdt(t)=a−v(t)2
変数分離形なので解くことにします。まず
12log√a+v(t)√a−v(t)+C=t
(絶対値は省略。最後に符号を調整。)
整理して、
v(t)=√aDee2t+1De2t−1
ここで、Dはv0から次のように定まります。
D=√a+v0√a−v0
tが正負の無限大で±√aに収束します。これが推力aで飛翔し続けた時の限界速度です。が、今はt0で推力が止まるのです。
t0以降は次のようになります。
dvdt(t)=−v(t)2
1v(t)−1v(t0)=t−t0
これより、
v(t)=v(t0)v(t0)(t−t0)+1
t0では滑らかな形になりませんが、推力を細かく与えると解けるかどうかわからなくなりますのでここまで。
a=1, t0=2, v0=1/2 でグラフを描くとこんな感じです。t=t0で推力が不連続に変わりますので、グラフは滑らかになりません。x軸は0から10までに1/100します。これを描くのに使ったMATLABクローンのフリーソフトoctaveのソースをつけます。
a=1;
v0=1/2;
t0=2;
function y=v(x,a,v0,t0)
d=(sqrt(a)+v0)/(sqrt(a)-v0);
if( x < t0 )
y=(d*exp(2*x)-sqrt(a))/(d*exp(2*x)+sqrt(a));
else
y=1/(x-t0+1/((sqrt(a)*(d*exp(2*t0)-1))/(d*exp(2*t0)+1)));
endif
endfunction
z=[1:1000];
for x=[1:1000];
z(x)=v(x/100,1,1/2,2);
endfor
plot(z)
こんにちは! 解説ありがとうございます。JavaScript で試しにプログラミングしてみました。そうしたところいくつか、自分自身のコーディングのバグなのか、マイナスが表示されたりとドタバタしております(苦笑)。
返信削除もしよろしければ v(t) の実例など一つご紹介頂けると助かります!