Fortran77将循环转换为MATLAB代码? [英] Fortran77 do loop conversion into MATLAB code?

查看:176
本文介绍了Fortran77将循环转换为MATLAB代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个将大型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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆