Matlab - 设置嵌套的 parfor 循环

Matlab - setting up a nested parfor loop

我在 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;

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

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

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

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