首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rainflow算法- Fortran到Matlab的转换

Rainflow算法- Fortran到Matlab的转换
EN

Stack Overflow用户
提问于 2014-08-21 09:24:28
回答 1查看 846关注 0票数 0

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

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

以下是Fortran代码:

代码语言:javascript
运行
复制
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结构。

他们是什么意思,在英语(或Matlab)?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 09:57:10

代码语言:javascript
运行
复制
 call 'get next peak/valley', VALUE

并不是(目前)语法上有效的Fortran,我也不确定以前的编译器是否也会理解它。我猜这意味着获取一个VALUE,以便在下面的代码中使用。

代码语言:javascript
运行
复制
INTEGER BUFFER (4096)

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

最后,GOTO是一个无条件的跳转,后面的数字是要跳转到的行的标签,所以GOTO 10意味着下一步用label 10执行行。在您所展示的年份的FORTRAN中,非常常见的是跳转到CONTINUE语句,在这种情况下,这是一个非操作,执行将继续到下一行。

在另一个上下文中,使用DO循环,CONTINUE将标记循环范围内的代码块的结束,并将产生微妙的不同效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25422719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档