Rainflow算法 - Fortran转换为Matlab

时间:2014-08-21 09:24:29

标签: fortran call goto

我正在尝试将Fortran中的Rainflow循环计数算法转换为Matlab,这是一种我不熟悉的语言。

我已经为Matlab下载了现成的Rainflow,但这不符合我项目的要求,所以我试图从头开始构建一个。

这是Fortran代码:

INTEGER BUFFER (4096), INDEX, VALUE, RANGE, MEAN, X, Y
INDEX = 0
10 CONTINUE
   call 'get next peak/valley', VALUE
   INDEX = INDEX + 1
   BUFFER (INDEX) = VALUE
20 CONTINUE
   IF (INDEX.LT.3) THEN
           not enough points to form a cycle
           GOTO 10
   ELSE
           X = ABS (BUFFER(INDEX)  - BUFFER(INDEX - 1))
           Y = ABS (BUFFER(INDEX - 1)  - BUFFER(INDEX - 2))
           IF (X.GE.Y) THEN
c -- cycle has been closed
                RANGE = Y
                MEAN = (BUFFER(INDEX-1) + BUFFER(INDEX-2))/2
c -- remove the cycle
                INDEX = INDEX - 2
                BUFFER(INDEX) = BUFFER(INDEX+2)
c -- see if this value closes any more cycles
                GOTO 20
           ELSE
                GOTO 10
           END IF
END IF

我已经下载了f2matlab(Fortran到Matlab转换器),但它需要一个我没有的Fortran编译器。

我真正理解如何转换的内容是:

  1. call 'get next…行(这是输入()?)
  2. BUFFER(4096)等(这在matlab中有点大吗?)
  3. GOTO/CONTINUE结构。
  4. 他们的意思是什么,用英语(或Matlab)?

    我见过 How to translate fortran goto state to matlabtranslating loop from Fortran to MATLAB 但他们对我没有帮助。

1 个答案:

答案 0 :(得分:1)

 call 'get next peak/valley', VALUE

不是(当前)语法上有效的Fortran,我不确定昔日的任何编译器是否也会理解它。我想这意味着在以下代码中使用VALUE

INTEGER BUFFER (4096)

是一个简单的声明,BUFFER4096整数的向量,没有什么可以在该数据量中吓唬Matlab。

最后,GOTO是无条件跳转,其后面的数字是要跳转到的行的标签,因此GOTO 10表示执行下一个标签为10的行 。你在向我们展示的CONTINUE语句跳转到DO语句是很常见的,在这种情况下,这是一个无操作,执行继续到下一行。

在另一个上下文中,CONTINUE循环{{1}}会在循环范围内标记代码块的结尾,并会产生微妙的不同效果。