Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 跳下悬崖计算器总是返回终点速度_Fortran_Calculation - Fatal编程技术网

Fortran 跳下悬崖计算器总是返回终点速度

Fortran 跳下悬崖计算器总是返回终点速度,fortran,calculation,Fortran,Calculation,我的程序是用来计算我从悬崖上跳下来时落地的速度 我解了一个微分方程。(空气阻力与速度的平方成正比。) dv/dt=g(1-v^2/v_终端^2) 正v向下 现在使用技巧dv/dt=dv/dz-dz/dt=dv/dz*v(z=高度) 整合 积分v/(1-v^2/v_终端^2)dv=积分g dz 给你 (V_终端^2/2)*ln(1-V_终端^2/V_终端^2)=gH 所以 V_final=V_终端*(1-e^(-2gh/V_终端^2))^(1/2) 现在我把它放在一个程序中,但不管我放在什么高度,

我的程序是用来计算我从悬崖上跳下来时落地的速度

我解了一个微分方程。(空气阻力与速度的平方成正比。)

dv/dt=g(1-v^2/v_终端^2)

正v向下

现在使用技巧dv/dt=dv/dz-dz/dt=dv/dz*v(z=高度)

整合

积分v/(1-v^2/v_终端^2)dv=积分g dz

给你

(V_终端^2/2)*ln(1-V_终端^2/V_终端^2)=gH

所以

V_final=V_终端*(1-e^(-2gh/V_终端^2))^(1/2)

现在我把它放在一个程序中,但不管我放在什么高度,它都会作为终端速度出来

我做错了什么

      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)。通过程序中包含的比例系数,这两个值都转换为英里/小时

这是忽略空气阻力的程序的工作版本

   (1/2) m V_final^2 = m g H  (simple energy equation)

但是,包括空气阻力在内的计算在某些地方出了问题。

这是一个延伸的评论,而不是答案,但这些小盒子太局限了。。。穿过阻力空气的代码包括计算

GETV=VTERMIN*SQRT(1.-EXP(-2*G*H/(VTERMIN*VERMIN)))*METPS2MPH
您需要非常仔细地检查这些变量名。您犯的错误是在程序作用域中包含了
隐式无
,但不在程序外部的函数作用域中


现在,有一件事绝对是一个评论:为什么你要像1985年那样写Fortran?如果你支付的教育费,包括教你如何在FORTRAN编程,要求你的大部分钱回来的课程,也许考虑转换机构。如果你在自学,扔掉你爷爷的课本,给自己买一本在过去十年左右写的。

考虑到我毕业已有几十年了,我现在换大学有点晚了。幸运的是,当时我不必为我的教育付费,因此,尽管剑桥大学只教授当时可用的Fortran版本(当然仍然支持该版本),而不是预测未来的发展,显示了他们的不足,但至少我不必为此付费。你所没有做的是为重新学习这一切提供一个令人信服的理由。PS我的两个祖父都死于20世纪60年代。不管怎样,答案似乎是修改了变量名(害虫!哦,天哪,谢谢你)。。。空气阻力造成的影响比想象的要小。在张开鳃的例子中,它是83.5英里/小时,而不是98.1英里/小时。好吧,动能减少了28%,但可能比新冠病毒更致命,除非你真的很老了,还在写COBOL。打赌它仍然可以编译…不幸的是,我无法复制hammer关闭的这个,我已经VTCed了,因为错误是由打字错误造成的。如果可以的话,我会把它作为复制品关闭。我真的不认为它继续存在会增加任何东西。也很难看到有
隐式none
缺失,因为函数没有从视觉上与程序体分离。
GETV=VTERMIN*SQRT(1.-EXP(-2*G*H/(VTERMIN*VERMIN)))*METPS2MPH