Запустить параллельную функцию в Matlab - PullRequest
0 голосов
/ 04 октября 2019

Я пытался протестировать мой действительно простой код, как показано ниже, но ошибка «Слишком много выходных аргументов».

function func1(x,y)
plot(x, y), xlabel('x'), ylabel('Sin(x)'), title('Sin(x) Graph'),
grid on, axis equal
end

function func2(x,y)
plot(x, y), xlabel('x'), ylabel('Cos(x)'), title('Cos(x) Graph'),
grid on, axis equal
end

Основным является

x = 0:0.01:10;
y1 = sin(x);
y2 = cos(x);
funcs = {@func1, @func2} ;   % let fun1, fun2 be two functions 
arguments = {x y1;x y2} ;   % write the inputs of each function 
solutions = cell(1,2);                 % initialize the solution 
% use of parfor 
parfor ii = 1:2
      solutions{ii}=funcs{ii}(arguments{ii,:});
end

Пожалуйста, помогите! !!

1 Ответ

1 голос
/ 04 октября 2019

То, как вы вызываете функцию

solutions{ii}=funcs{ii}(arguments{ii,:});

Ожидается вывод, который вы назначаете solutions{ii}.

Это не будет работать в обычном цикле или дажебез цикла тот факт, что вы пытаетесь написать parfor, здесь несущественен ...

Ваши функции определены как

function func1(x,y)
% ...
function func2(x,y)
% ...

Ни у одного из них нет выходных аргументов,поэтому неясно, что вы ожидаете присвоить solutions{ii} - это точно соответствует сообщению об ошибке, которое вы видите «слишком много выходных аргументов».

Если вы ожидаете вывода от своей функции, тогда объявите один

function z = func1(x,y)
    z = x + y;
    % other stuff
end

В противном случае не запрашивать вывод в цикле

parfor ii = 1:2        
    funcs{ii}(arguments{ii,:});
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...