2017-07-25 21 views
0

我有我想要通过使用PARFOR运行它下面的MATLAB代码: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。我读了一些教程和文档,但我不知道如何使用parfor获得max的相同结果。

我知道在for j = (i+1):10中我的使用存在一些问题。

我将不胜感激任何建议。

+2

你不知道。将所有'X'值保存到数组中,然后查找'max'。命名与内置函数相同的变量也是一个非常糟糕的主意。它使得使用该功能再次有点痛苦。 – beaker

+0

包括您的错误/警告消息可能是一个好主意,以获得更好的答案和可重用的问题。 – m7913d

回答

2

can not use parfor for dependent iterations,即,在你的情况max是您的循环迭代之间的依赖性的(共享的)变量:

当在循环的迭代取决于 所述的其他结果不能使用一个PARFOR环迭代。每个迭代必须独立于所有其他的 。

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

警告:临时变量max将在PARFOR循环的每次迭代的开始 被清除。在 之前分配给它的任何值都会丢失。如果在 parfor循环中分配max之前使用max,则会发生运行时错误。参见 MATLAB中的循环并行,“临时变量”。

MATLAB实现one exception to this rule,即Reduction Variables

的例外是 使用Reduction Variables在一个循环中积累值。

所以,你可以重写代码以使用减少变量:

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