任何人都可以向我解释,为什么以下内容会导致u
但h
max_X = 100;
max_Y = 100;
h = ones(max_Y,max_X);
u = zeros(max_Y,max_X);
parfor l=1:max_X*max_Y
i = mod(l-1,max_X) + 1;
j = floor((l-1)/max_Y) + 1;
for k=1:9
m = i + floor((k-1)/3) - 1;
n = j + mod(k,-3) + 1;
h_average(k) = sqrt(h(i,j)*h(m,n));
u_average(k) = (u(i,j)*sqrt(h(i,j)) + u(m,n)*sqrt(h(m,n)))/(sqrt(h(i,j)) + sqrt(h(m,n)));
end
end
我现在可以用(i,j)
替换(l)
,但即使我尝试计算相关变量,也可以根据p
将其称为(m,n)
,然后写{ {1}}而不是u(p)
它会给我一条错误消息。
它只强调u(m,n)
,分别为。 u(m,n)
但不是u(p)
。
MATLAB说:
说明: 为了使MATLAB有效地执行
h(m,n)
循环,发送给MATLAB工作人员的数据量必须最小。 MATLAB实现这一目标的方法之一是限制变量在parfor
次迭代中的索引方式。指示变量的索引方式与parfor
不兼容。 建议采取的行动 修复索引。有关索引限制的说明,请参阅并行计算工具箱文档中的“切片变量”
任何想法,这里有什么不对?
答案 0 :(得分:2)
u
和h
的问题是它们都作为广播变量发送到PARFOR循环。这不是错误 - 它只是一个警告,表明发送的数据超出了其他可能的数据。
PARFOR循环无法运行,因为您正在编制索引但未切片u_average
和h_average
。由于每次都覆盖u_average
和h_average
,所以不清楚你想要从这个循环中得到什么输出,因此PARFOR循环是没有意义的。