2012-04-10 3 views
1

В настоящее время у меня есть несколько функций, называемых function1.m, function2.m, function3.m, ..., function10.m. Каждая функция независима друг от друга. Я хотел бы запустить все функции в одном исполнении.Выполнение нескольких функций в парфоре

В настоящее время мой код выглядит следующим образом: он выполняет функции один за другим.

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

Я хотел бы знать, есть ли способ переписать код в parfor вместо for, как я знаю, что eval не работает в parfor.

ответ

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 вообще создать массив ячеек функции ручек с использованием for или parfor петли. Затем все, что вам нужно сделать, - вызвать каждый дескриптор функции, хранящийся в массиве ячеек 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 
Смежные вопросы