MATLAB parfor错误

时间:2014-01-28 08:49:05

标签: matlab parfor

我有一个Matlab函数,我在其中使用parfor,它是这样的:

sbestposition=zeros(8,38);
sbestvalue=zeros(8,1);

matlabpool open 8
parfor i=1:8
    [ sbestvalue(i) sbestposition(i,1:i+30)] = pso(lb, ub, s2, i+31, 30,1,2,2 );
end
matlabpool close

sbestposition的大小取决于i的值,(1,31)时的i=1(1,38)时的i=8;我打算将它们的值保存在一个变量中。

该函数在[ sbestvalue(i) sbestposition(i,:)] = pso(lb, ub, s2, i+31, 30,1,2,2 );时有效但是当我使用它时,由于尺寸不匹配错误,该函数将无法再次工作。

相反,这里它给出了一个错误

  

parfor中的变量sbestposition无法分类

我如何克服这个问题?

谢谢。

3 个答案:

答案 0 :(得分:1)

为什么不使用单元格数组进行sbestposition

parfor i = 1:8
    [sbestvalue(i), sbestposition{i}] = ...
end

答案 1 :(得分:1)

Matlab并不“知道”如何在如此复杂的模式中对变量进行切片。每次迭代最多使用整行,最少使用行。很明显,变量应该按行切片:

parfor i=1:8
    p=zeros(1,38);
    [sbestvalue(i),p(1:i+30)]=pso(lb, ub, s2, i+31, 30,1,2,2 );
    sbestposition(i,:)=p;
end

在此代码中,工具箱可以将每行推送到一个工作人员,显然没有干扰。

答案 2 :(得分:0)

您正在更改 parloop 内的变量维度。