您好我想使用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
端
我找不到解决方案。你能给我一个解决方案吗? 提前致谢。 埃里科
答案 0 :(得分:1)
看起来你正试图进行减少"使用A_x
在A_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_x
和A_y
的减少操作。