在parfor中执行多个功能

时间:2012-04-10 08:01:36

标签: multithreading matlab parallel-processing parfor

目前我有几个功能,名为function1.mfunction2.mfunction3.m,...,function10.m。每个功能彼此独立。我想在一次执行中运行所有函数

目前,我的代码是这样的,它逐个运行这些功能。

for i = 1 : 10
  result = eval(sprintf('function%d.m',i));
  fprintf('%d ', result);
end

我想知道有没有办法在parfor而不是for中重写代码,因为我知道evalparfor中不起作用。

2 个答案:

答案 0 :(得分:1)

在普通循环中使用eval来填充函数句柄的单元格数组吗?

functions = cell(10, 1);
for i=1:10
  functions{i} = eval(sprintf('@()function%d', i));
end
parfor i=1:10
  result = functions{i}();
  ...
end

答案 1 :(得分:0)

您根本不需要使用eval来使用forparfor循环创建函数句柄的单元格数组。然后,您需要做的就是调用存储在functions单元阵列中的每个函数句柄。

functions = cell(1, 10);

parfor i = 1:10
    functions{i} = str2func([ 'function', num2str(i) ]);
end

parfor i = 1:10
    result = functions{i}();
    fprintf('%d ', result);
end