Fortran77将循环转换为MATLAB代码? [英] Fortran77 do loop conversion into MATLAB code?
问题描述
我正在开发一个将大型Fortran77代码转换为MATLAB的项目。由于F77中的Do循环等效于MATLAB中的For循环,因此F77的子程序在转换为MATLAB时会出错。 F77 子程序链接 [ ^ ]
和我试过的MATLAB翻译版在我试过的内容一节中给出了
给出以下错误
I am working on a project to convert a large Fortran77 code into MATLAB. Since Do loops in F77 are equivalent to For loops in MATLAB, a subroutine of F77 when translated into MATLAB is giving error. The F77 subroutine is given in link[^]
and my tried MATLAB translated version is given in "What I have tried" section
which is giving following error
Attempted to access G(0); index must be a positive integer or logical
HS(i)=FI^(NH)*G(2*i)/(G(NH-i)*G(i)*G(i-1));
我想我无法理解Fortran77子程序中存在的复杂循环结构。 />
我尝试过:
G(1)= 1.0;
NH = NS / 2;
for i = 2:NS
    G(i)= G(i-1)* i;
结束
HS(1)= 2.0 / G(NH-1);
for i = 2:NH
    FI = i;
   如果我== NH
            HS(i)= FI ^(NH)* G(2 * i)/(G(i)* G(i-1));
  结束
  HS(i)= FI ^(NH)* G(2 * i)/(G(NH-i)* G(i)* G(i-1));
end
SN = 2 *(NH-NH / 2 * 2)-1;
对于i = 1:NS
    V(i)= 0.0;
    K1 =(i + 1)/ 2;
    K2 = i
   如果K2> NH
        K2 = NH;
   结束
   对于j = K1:K2
       如果2 * j-i == 0
                V(i)= V(i)+ HS(j)/(G(i-j));
        elseif i == j
                V(i)= V(i)+ HS(j)/ G(2 * j-i);
       结束
  结束
V(i)= SN * V(i);
SN = -SN;
end
I think I am unable to understand complex loop structure present in subroutine of Fortran77.
What I have tried:
G(1)=1.0;
NH=NS/2;
for i=2:NS
G(i)=G(i-1)*i;
end
HS(1)=2.0/G(NH-1);
for i = 2:NH
FI=i;
if i== NH
HS(i)=FI^(NH)*G(2*i)/(G(i)*G(i-1));
end
HS(i)=FI^(NH)*G(2*i)/(G(NH-i)*G(i)*G(i-1));
end
SN=2*(NH-NH/2*2)-1;
for i=1:NS
V(i)=0.0;
K1=(i+1)/2;
K2=i
if K2 > NH
K2 = NH;
end
for j=K1:K2
if 2*j-i == 0
V(i)=V(i)+HS(j)/(G(i-j));
elseif i == j
V(i)=V(i)+HS(j)/G(2*j-i);
end
end
V(i)=SN*V(i);
SN=-SN;
end
推荐答案
G(1)=1.0;
NH=NS/2;
for i=2:NS
G(i)=G(i-1)*i;
end
HS(1)=2.0/G(NH-1);
for i = 2:NH
FI=i;
if i== NH
HS(i)=FI^(NH)*G(2*i)/(G(i)*G(i-1));
else
HS(i)=FI^(NH)*G(2*i)/(G(NH-i)*G(i)*G(i-1));
end
end
SN=2*(NH-NH/2*2)-1;
for i=1:NS
V(i)=0.0;
K1=floor((i+1)/2);
K2=i;
if K2 > NH
K2 = NH;
end
for j=K1:K2
if 2*j-i == 0
V(i)=V(i)+HS(j)/(G(i-j));
elseif i == j
V(i)=V(i)+HS(j)/G(2*j-i);
else
V(i)=V(i)+HS(j)/(G(i-j)*G(2*j-i));
end
end
V(i)=SN*V(i);
SN=-SN;
end
这篇关于Fortran77将循环转换为MATLAB代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!