【发布时间】:2016-05-25 05:54:44
【问题描述】:
我在 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;
知道如何解决这两个问题吗?
【问题讨论】:
-
您的
counter没有做任何事情。此外,尝试将嵌套的for循环整体包装在一个函数中,只调用parfor中的函数。这可能与 MATLAB 很难看到valuesforOPratio始终只是100 x 1双精度有关。 -
谢谢,会试试的。柜台只是为了让我知道它的先进程度。 (我明白它在 parfor 循环中没有意义)
-
不需要临时存储变量
NPVtotal,并且,如果您的自定义cut_off_optimisation函数支持它,您可以使用cut_off_optimisation(M,1:100,x,y,z);,即在第二个参数上输入一系列值。那可以让你直接保存在valuesforM,我认为这也可以解决问题。 -
不幸的是,它出现了另一个错误-(我编辑了帖子)
-
如果你对一些随机的
M运行size(cut_off_optimisation(M,1:100,x,y,z)),它会给你一个1 x 100数组吗?