【发布时间】:2014-11-18 21:30:32
【问题描述】:
我有一个循环遍历几个不同值组合的脚本。该脚本使用值组合调用 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(pool, files) 指定所需的 要附加的文件。请参阅文档 'parallel.Pool/addAttachedFiles' 了解更多详情。
我不明白为什么这不起作用。再次定义 e ,比如 e2 = e 也无济于事。
问候
编辑: 实际上似乎起作用的是,当我不将 for 循环的变量直接传递给 main 而是实际使用预期的数组时。 例如:
main(a(p),b(s),c(e))
【问题讨论】:
-
会不会是因为你在调用
main之后的clear all声明?尝试评论它,看看它是否有效。 -
另外,如果可能的话,最好将
parfor循环放在main函数之外,并将调用传递给main在parfor循环内。 -
@am304:不,这不应该是原因并且没有帮助(只是尝试过)。因为循环脚本应该按顺序执行,所以在主调用完成之前,不应该执行 clear all。 parfor 应该保留在 main 函数中,我现在没有看到其他合理的方法。
-
@am304:我实际上尝试在循环脚本中使用 parfor,同时删除 main 中的 parfor。这会产生同样的错误。
-
好吧,另一个想法:我假设
main是用它自己的文件main.m定义的。也许尝试addAttachedFiles和main.m将所需的 MATLAB 文件传递给工作人员。尽管有错误消息,但问题可能与e无关,而与main有关。
标签: matlab function variables input parfor