Matlab - 设置嵌套的parfor循环

时间:2016-05-25 05:54:44

标签: matlab parfor

我在matlab中设置parfor循环时遇到了麻烦。我知道它很容易,但我有点卡在这里,这就是为什么我会感激所有的帮助。

我试过以下

valuesforM = zeros(901,100);
valuesforOPratio = zeros(100,1);
counter=1;
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');

parfor M = 100:1000;
counter=counter+1
for OPratio = 1:100;
NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
valuesforOPratio(OPratio)=NPVtotal;
end
valuesforM(M-99,:) = valuesforOPratio;
end

我收到以下错误:

 Error using senitivity_script_10000_steps (line 10)
 Error: The variable valuesforOPratio in a parfor cannot be classified.

我该如何解决这个问题?非常感谢。

修改

根据提交建议我尝试了以下内容:

valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','C2:C10000');

parfor M = 100:1000;
NPVtotal = cut_off_optimisation(M,1:100,x,y,z);
valuesforM(M-99,:) = NPVtotal;
end

会出现以下错误:

In an assignment A(:) = B, the number of elements in A and B must be the same.
Error in parforscript (line 8)
parfor M = 100:1000;

知道如何解决这两个问题吗?

1 个答案:

答案 0 :(得分:1)

正如你在评论中所说的那样,由于不需要计数器,我已经将其删除,并且计数器也不会像这样工作,因为不同的迭代将以非顺序​​的方式运行并尝试更新相同的变量。这是不允许的。

接下来,您必须在valuesforOPratio = zeros(1,100)内执行parfor loop,因为如果您将其放在循环之外,那么每次迭代都会尝试访问同一个变量。这是不允许的。所以这就是你得到那个错误的原因。当你把它放进去时,每次迭代都将访问一个本地创建的变量。这也是你在基础工作区找不到它的原因。这是更正后的代码。

valuesforM = zeros(901,100);
x = xlsread ('gtc.xlsx', 'A2:A10000');
y = xlsread ('gtc.xlsx','C2:C10000');
z = xlsread ('gtc.xlsx','B2:B10000');

parfor M = 100:1000;
    valuesforOPratio = zeros(1,100);

    for OPratio = 1:100;
        NPVtotal = cut_off_optimisation(M,OPratio,x,y,z);
        valuesforOPratio(OPratio)=NPVtotal;
    end

    valuesforM(M-99,:) = valuesforOPratio;
end