我的程序是为了计算我从悬崖上跳下时的落地速度。
我解了一个微分方程。(空气阻力力与速度的平方成正比。)
dvdt = g (1 - v^2 V_terminal^2)
正负
现在使用这个技巧dvdt = dvdz dzdt = dvdz * v (z = height)
并整合
积分v (1-v^2V_terminal^2) dv = 积分g dz。
给你
(V_terminal^2 2) *ln(1-V_final^2V_terminal^2) = gH。
所以
V_final = V_terminal*(1-e^(-2ghV_terminal^2))^(12)
现在我把它放在程序里,但无论我输入什么高度,出来的都是极限速度。
我到底做错了什么?
PROGRAM JUMP
IMPLICIT NONE
REAL GETV
REAL V
REAL H
REAL HGAPING
C https://en.wikipedia.org/wiki/Gaping_Gill
PARAMETER (HGAPING=98.)
WRITE(6,*) 'EXAMPLE YOU JUMP ',HGAPING,' METRES'
WRITE(6,*) 'YOU HIT GROUND AT ',GETV(HGAPING),' MPH'
10 WRITE(6,*) 'HOW HIGH DO I JUMP FROM (METRES)?'
READ(5,*) H
WRITE(6,*) 'YOU JUMP FROM ',H,' METRES'
WRITE (6,*) 'YOU HIT GROUND AT ',GETV(H),' MPH'
GOTO 10
END
FUNCTION GETV(H)
REAL GETV
REAL H
REAL G
C https://en.wikipedia.org/wiki/Standard_gravity
PARAMETER (G=9.81)
REAL VTERMIN
C https://en.wikipedia.org/wiki/Free_fall
PARAMETER (VTERMIN=53.)
REAL METPS2MPH
PARAMETER (METPS2MPH=2.2369363)
GETV=VTERMIN*SQRT(1.-EXP(-2*G*H/(VTERMIN*VERMIN)))
1 *METPS2MPH
END
注 这里是你期望的,如果它是正确的工作。如果你把一个 大 数,那么你应该得到大约的极限速度,但如果你输入一个数字,那么你应该得到一个大约的极限速度。小型 那么你应该得到大约SQRT(2*G*H)。两者都通过程序中的比例因子转换为mph。
以下是忽略空气阻力的程序工作版本。
(1/2) m V_final^2 = m g H (simple energy equation)
PROGRAM JUMP
IMPLICIT NONE
REAL GETV
REAL V
REAL H
REAL HGAPING
C https://en.wikipedia.org/wiki/Gaping_Gill
PARAMETER (HGAPING=98.)
WRITE(6,*) '*** THIS PROGRAM NEGLECTS AIR RESISTANCE ***'
WRITE(6,*) 'EXAMPLE YOU JUMP ',HGAPING,' METRES'
WRITE(6,*) 'YOU HIT GROUND AT ',GETV(HGAPING),' MPH'
10 WRITE(6,*) 'HOW HIGH DO I JUMP (METRES)?'
READ(5,*) H
WRITE(6,*) 'YOU JUMP',H
WRITE (6,*) 'YOU HIT GROUND AT ',GETV(H),' MPH'
GOTO 10
END
FUNCTION GETV(H)
REAL GETV
REAL H
REAL G
C https://en.wikipedia.org/wiki/Standard_gravity
PARAMETER (G=9.81)
REAL METPS2MPH
PARAMETER (METPS2MPH=2.2369363)
GETV=SQRT(2*G*H)
1 *METPS2MPH
END
但包括空气阻力在内的计算却出了问题。
这是一个扩展的评论,而不是一个答案,但那些小盒子太局限了......通过阻力空气下降的代码包括计算方法
GETV=VTERMIN*SQRT(1.-EXP(-2*G*H/(VTERMIN*VERMIN)))*METPS2MPH
你需要仔细检查这些变量的名称。 你犯的错误是你把 implicit none
而不是在程序外部的函数作用域。
现在,说到一些绝对值得评论的事情:为什么,哦,为什么你写的Fortran像1985年一样? 如果你为教育付费,其中包括教你如何用Fortran编程,那么请你把你的大部分钱要回来,也许可以考虑换一个机构。 如果你自己教自己,扔掉你爷爷的教科书,给自己买一本最近十年左右写的。