我目前正在手动将代码从 Fortran 翻译到 MATLAB,但我不确定如何翻译其中的一部分。(整个代码实际上是一个 2,000 行的子程序。)代码如下。
C Has series crossed neckline?
120 neckext=x(trough(peaknum-1))+
* dydx*real((t-trough(peaknum-1)))
if(x(t).lt.neckext) goto 130
C NO. Here if series has not crossed neckline, nor new trough found
C Check to see if new trough has been found.
t=t+1
if(t.ge.lastobs) goto 900
if(x(t).lt.min) then
min=x(t)
mindate=t
end if
troughid=min*(1.0+cutoff)
if(x(t).ge.troughid) goto 150
goto 120
C YES. Here if series crossed neckline before new trough found
130 dblcount=0
if(poscount.ge.1) then
DO 132 i=1,poscount
if((enterdt(i)-2.le.t).and.(t.le.enterdt(i)+2)) then
dblcount=dblcount+1
end if
132 continue
if(dblcount.ge.1) then
C write(30,2583) t,Cutnum
2583 format('DoubleCounting episode occurred at ',I5,
* ' with Cutoff = ',F3.1)
goto 150
end if
end if
我的问题是这部分代码:
if(x(t).ge.troughid) goto 150
goto 120
当我在 MATLAB 中翻译这部分内容时,我正在编写如下内容:
if x(t,:)>=troughid
t=marker;
minimum=x(t,:);
end
但是我不知道如何处理标签120。当我翻译它时,我是否再次写了那部分?因为据我了解,当我回到 120 时,代码将再次运行。谢谢!
编辑:作为对 Chris 关于标签 150 和 900 做什么的问题的回应,我将在此处发布它们。
150 t=marker
min=x(t)
这是针对标签 900 的。
C Last observation found. This iteration finished.
900 continue