Matlab:parfor循环中的访问函数输入

时间:2014-11-14 14:26:20

标签: matlab function variables input parfor

我有一个循环遍历几个不同值组合的脚本。此脚本使用值组合调用main,然后调用parfor来访问不同的值。以下是我的代码的虚拟简化。如果需要,我将提供完整的代码。

循环:

a = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8];
b = [5,10,15,20,25,30];
c = [0,1];

% Iterate over all possible combinations
for p = 1:length(a)
    for s = 1:length(b)
        for e = 1:length(c)
            main(p,s,e); clear all;
        end
    end
end

主:

function main (p,s,e)
    parfor k = 1:51
        if(e)
            display('Foobar');
        end
    end
end

所以我基本上想在输入参数的帮助下在parfor循环中决定做什么(例如如何创建间隔等)。我不想编辑这些参数,只需阅读并使用它们。

现在我收到以下错误:

  

对于'e',工人抛出了UndefinedFunction错误。这个   可能是因为包含'e'的文件无法访问   工作人员。使用addAttachedFiles(池,文件)指定所需的   要附加的文件。请参阅文档   'parallel.Pool / addAttachedFiles'了解更多详情。

我不明白为什么这不起作用。再次定义e,就像     e2 = e 也没有帮助。

问候

编辑: 实际上似乎工作的是当我不将for循环的变量直接传递给main但实际上使用像预期的数组。 E.g:

main(a(p),b(s),c(e))

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 我试图将分配的变量传递给主函数。这是不可能的。 我现在真正想要(并且做了)的是将之前定义的数组中的值传递给main函数。

a = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8];
b = [5,10,15,20,25,30];
c = [0,1];

% Iterate over all possible combinations
for p = 1:length(a)
    for s = 1:length(b)
        for e = 1:length(c)
            main(a(p),b(s),c(e)); clear all;
        end
    end
end