В настоящее время я перевожу код с Fortran на MATLAB вручную и не знаю, как перевести его часть. (Весь код на самом деле представляет собой подпрограмму из 2000 строк.) Код приведен ниже.
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, код снова будет работать. Спасибо!
РЕДАКТИРОВАТЬ: В ответ на вопрос Криса о том, что делают метки 150 и 900, я опубликую их здесь.
150 t=marker
min=x(t)
И это за лейбл 900.
C Last observation found. This iteration finished.
900 continue
goto
затрудняют понимание кода! - person High Performance Mark   schedule 04.09.2012goto
статусы. - person John Alexiou   schedule 04.09.2012