2012-04-10 35 views
1

目前我有幾個功能,分別命名爲function1.m,function2.m,function3.m, function10.m。每個功能都是相互獨立的。我想在一次執行中運行所有功能以parfor執行多項功能

目前,我的代碼是這樣的,它一個接一個地運行函數。

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

我想知道的是,有沒有辦法改寫parfor而不是for的代碼,因爲我知道,evalparfor工作。

回答

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 
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