在Parfor循环中切片变量

时间:2014-12-10 09:38:53

标签: matlab

您好我想使用PARFOR运行以下代码。 当我试着说:

  

' A_x'的有效索引和' A_y'在PARFOR循环中受到限制。   说明为了使MATLAB有效地执行parfor循环,   发送给MATLAB工作人员的数据量必须很小。其中一个   MATLAB实现这一目标的方法是限制变量的方式   在parfor迭代中索引。指示的变量在a中索引   与parfor不相容的方式。建议采取的行动

     

修复索引。有关索引限制的说明,请参阅>并行计算工具箱文档中的“切片变量”:

 N=eveninteger;
 H=zeros(N);
 V=zeros(N);
 A_x=zeros(N);
 A_y=zeros(N);
    parfor i=1:N;
      for j=1:N;
        if H(i,j)==-2;
          t=0.3;
          As_x=t*(j-i)/a;
          As_y=t*(j-i)/a;


       elseif H(i,j)==-3;
           t=0.8;
          As_x=t*(j-i)/(a*sqrt3);
          As_y=t*(j-i)/(a*sqrt3);

      elseif i==j

               As_x=i;
               As_y=i;
      else
          t=0;
          As_x=0;
          As_y=0;

        end
      for p=1:N/2
        for q=N/2+1:N

             A_x(p,q)=A_x(p,q)+As_x*(V(i,p)*V(j,q));
             A_y(p,q)=A_y(p,q)+As_y*(V(i,p)*V(j,q));


        end
      end
end

我找不到解决方案。你能给我一个解决方案吗? 提前致谢。 埃里科

1 个答案:

答案 0 :(得分:1)

看起来你正试图进行减少"使用A_xA_y+上。您可以通过执行以下操作来解决此问题:

parfor i = 1:N
  A_x_tmp = zeros(N);
  A_y_tmp = zeros(N);
  for p=1:N/2
    for q=N/2+1:N
      A_x_tmp(p,q) = A_x_tmp(p,q) + ...
      A_y_tmp(p,q) = A_y_tmp(p,q) + ...
    end
  end
  A_x = A_x + A_x_tmp;
  A_y = A_y + A_y_tmp;
end

通过这种方式,PARFOR将了解A_xA_y的减少操作。