Fortran代码:PHI功能的实现是否正确?

时间:2017-05-27 09:21:57

标签: fortran

  REAL FUNCTION PHI(D) 
  COMMON FAC,DELTA,ER,T 
  DOW=2.*D/DELTA 
  TOW=4.*T/DELTA 
  DOWM=DOW-1. 
  DOWP=DOW+1. 
  IF(D.EQ.0.) GO TO 1 
  PHI=DOWM*ALOG(DOWM)-DOWP*ALOG(DOWP) 
 1-0.5*DOWM*ALOG(DOWM**2+TOW**2) 
 2+0.5*DOWP*ALOG(DOWP**2+TOW**2) 
 3-TOW*(ATAN(DOWM/TOW)-ATAN(DOWP/TOW)) 
  PHI=PHI*FAC/2. 
  GO TO 2 
  PHI=FAC*(0.5*ALOG(1.+TOW*TOW)+TOW*ATAN(1./TOW)) 
  CONTINUE 
  RETURN 
  END

我的作业是将上面的代码转换成Matlab .m文件。

但我无法理解,我从未见过像这样的实现:

 ....
  PHI=DOWM*ALOG(DOWM)-DOWP*ALOG(DOWP) 
 1-0.5*DOWM*ALOG(DOWM**2+TOW**2) 
 2+0.5*DOWP*ALOG(DOWP**2+TOW**2) 
 3-TOW*(ATAN(DOWM/TOW)-ATAN(DOWP/TOW))
 ...

没有任何续行标记!这非常令人困惑。 我该如何将这些行转换为Matlab代码?我认识Matlab,但我不认识Fortran。

1 个答案:

答案 0 :(得分:1)

PHI 计算分为四行,第二行标有 1 ,依此类推......

您正在寻找的续篇标记 (1,2,3)

你的公式是:

PHI=DOWM*ALOG(DOWM)-DOWP*ALOG(DOWP)-0.5*DOWM*ALOG(DOWM**2+TOW**2)+0.5*DOWP*ALOG(DOWP**2+TOW**2)-TOW*(ATAN(DOWM/TOW)-ATAN(DOWP/TOW))

但请记住,原始的Fortran无法理解第73列及以上的字符(仅1到72),这就是第6列中使用连续标记的原因(通常是星号,但也可以使用数字)。

此外,代码只能位于第7列到第72列之间,因为第1列到第5列是为标签保留的。

我的猜测是 标签1 位于 PHI 的第二个定义前面,而 标签2 CONTINUE 前面的 ,这是Fortran应该怎么看

   GO TO 2 
1  PHI=FAC*(0.5*ALOG(1.+TOW*TOW)+TOW*ATAN(1./TOW)) 
2  CONTINUE

Fortran中的代码应该是这样的:

      REAL FUNCTION PHI(D) 
      COMMON FAC,DELTA,ER,T 
      DOW=2.*D/DELTA 
      TOW=4.*T/DELTA 
      DOWM=DOW-1. 
      DOWP=DOW+1. 
      IF(D.EQ.0.) GO TO 1 
      PHI=DOWM*ALOG(DOWM)-DOWP*ALOG(DOWP) 
     1-0.5*DOWM*ALOG(DOWM**2+TOW**2) 
     2+0.5*DOWP*ALOG(DOWP**2+TOW**2) 
     3-TOW*(ATAN(DOWM/TOW)-ATAN(DOWP/TOW)) 
C
C Previous four (4) lines have this formula (C mark for comment)
C
C PHI=DOWM*ALOG(DOWM)-DOWP*ALOG(DOWP)-0.5*DOWM*ALOG(DOWM**2+TOW**2)+0.5*DOWP*ALOG(DOWP**2+TOW**2)-TOW*(ATAN(DOWM/TOW)-ATAN(DOWP/TOW)) 
C
      PHI=PHI*FAC/2. 
      GO TO 2 
1     PHI=FAC*(0.5*ALOG(1.+TOW*TOW)+TOW*ATAN(1./TOW)) 
2     CONTINUE 
      RETURN 
      END