プロが教える店舗&オフィスのセキュリティ対策術

fortranでペットボトルロケットの軌道計算をしています。
コンパイルは問題ないのですが、正しい数値が出てきません。
なぜなのか教えてください。

e=1000
S=0.0006
m=0.055
P0=100000
L=0.002
Ps=600000
Vs=0.0008

P=600000.0
V=0.0008
a=0.0
d=0.0
h=0.0
dt=0.01
t=0.0

write(6,600)P,V,a,d,h,t
600 format(4f10.4)

do i=1,10000
if(V>0)then
w=(2*(P-P0)/e)**(1/2)
else
w=0
end if
Mm=m+e*v
V=V-w*S*dt
a=a+e*S*w*w/Mm
d=d+a*dt
h=h+d*dt
P=Ps*(L-Vs)/(L-V)
t=t+dt
write(6,600)P,V,a,d,h,t
enddo
end

質問者からの補足コメント

  • うーん・・・

    w={2×(P-P0)/e}^1/2
    だと思って入れました。

    fortranでペットボトルロケットの軌道計算しなさい。というのと、
    1/2×e×w^2=P-P0
    だけ与えられて自分で組んだのでこれだけです。
    何か足りないですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/08/20 17:40

A 回答 (3件)

各文字が何を表しているのか


どういう微分方程式を解こうとしているのか
「正しい数値が出ない」とは具体的にどういう結果が出力されたという意味か
みたいな事を貴方の書いたプログラムだけから推測するクイズを解く気にはなれないので、クイズを解かずにわかる範囲の事しか書けませんが、


言語によっては整数/整数の結果が常に整数(商を返す)になります。つまり1/2が0.5ではなく0になります。fortranの仕様は覚えてませんが、この事を意識せずに1/2と書いたのならこれがいくらになっているのか確かめた方がいいでしょう。


>a=a+e*S*w*w/Mm
>d=d+a*dt
>h=h+d*dt
この部分の計算の順番はこれで正しいですか?
例えば、hの式にあるdはその直面で計算したdの値(多分、次の時刻での値)が使われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえず試してみます。

お礼日時:2016/08/20 19:35

Fortran では 1/2 は 0 になります>#2. あと, 暗黙の型宣言が有効になっていると L は整数型.

    • good
    • 0
この回答へのお礼

ありがとうございました。
暗黙の型のこと忘れてました。

お礼日時:2016/08/22 18:40

まずおかしいと思うのは


w=(2*(P-P0)/e)**(1/2)
のところ. これ, どう計算されるか理解してますか?

あと, プログラムはこれで本当に全部ですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!