0

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

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

sizeofsbestposition取决于 的值,i它是(1,31)wheni=1(1,38)when i=8;我打算将它们的值保留在一个变量中。

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

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

parfor 中的变量 sbestposition 无法分类

我该如何克服呢?

谢谢你。

4

3 回答 3

1

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

parfor i = 1:8
    [sbestvalue(i), sbestposition{i}] = ...
end
于 2014-01-28T10:35:30.507 回答
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

在这段代码中,工具箱可以将每一行推送给一个工人,显然没有干扰。

于 2014-01-28T10:42:59.560 回答
0

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

于 2014-01-28T10:30:17.097 回答