MATLAB:parforerror

MATLAB:parforerror,matlab,for-loop,iteration,parfor,Matlab,For Loop,Iteration,Parfor,我有以下MATLAB代码,我想使用parfor运行它: max = -1; for i = 1:10 for j = (i+1):10 X = my_function(i, j); if (X > max) max = X; end end end disp(max) 我想把第一个换成帕弗。我阅读了一些教程和文档,但我不知道如何使用parfor获得与max相同的结果 我知道在j=(I+1):10的中使用I有一

我有以下MATLAB代码,我想使用parfor运行它:

max = -1;
for i = 1:10
    for j = (i+1):10
       X = my_function(i, j);
       if (X > max)
           max = X;
       end
    end
end
disp(max)
我想把第一个换成帕弗。我阅读了一些教程和文档,但我不知道如何使用parfor获得与max相同的结果

我知道在j=(I+1):10的
中使用I有一些问题

如果有任何建议,我将不胜感激。

您,即在您的情况下,
max
是循环迭代之间的一个依赖(共享)变量:

当循环中的迭代依赖于时,不能使用parfor循环 其他迭代的结果。每个迭代必须独立于 所有其他的

这也反映在显示的警告消息中:

警告:临时变量
max
将在开始时清除 parfor循环的每个迭代的。之前分配给它的任何值 循环将丢失。如果在中指定前使用了
max
对于循环,将发生运行时错误。有关中的循环,请参见并行 MATLAB,“临时变量”

MATLAB实现,即:

这条规则的例外是 使用在循环中累积值

因此,您可以重写代码以使用简化变量:

maxX = -1;
for i = 1:10
    for j = (i+1):10
       maxX = max(maxX, my_function(i, j));
    end
end
disp(maxX)
您,即在您的情况下,
max
是循环迭代之间的依赖(共享)变量:

当循环中的迭代依赖于时,不能使用parfor循环 其他迭代的结果。每个迭代必须独立于 所有其他的

这也反映在显示的警告消息中:

警告:临时变量
max
将在开始时清除 parfor循环的每个迭代的。之前分配给它的任何值 循环将丢失。如果在中指定前使用了
max
对于循环,将发生运行时错误。有关中的循环,请参见并行 MATLAB,“临时变量”

MATLAB实现,即:

这条规则的例外是 使用在循环中累积值

因此,您可以重写代码以使用简化变量:

maxX = -1;
for i = 1:10
    for j = (i+1):10
       maxX = max(maxX, my_function(i, j));
    end
end
disp(maxX)

你没有。将所有
X
值保存在一个数组中,然后查找
max
。将变量命名为与内置函数相同也是一个非常糟糕的想法。这使得再次使用该功能有点痛苦。包含错误/警告消息可能是获得更好答案和可重复使用问题的好主意。你没有。将所有
X
值保存在一个数组中,然后查找
max
。将变量命名为与内置函数相同也是一个非常糟糕的想法。这使得再次使用该功能有点痛苦。包含错误/警告消息可能是获得更好答案和可重用问题的好主意。