在Matlab中运行并行功能

时间:2019-10-04 02:51:05

标签: matlab parallel-processing

我试图用下面的非常简单的代码进行测试,但是错误是“输出参数太多”。

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 个答案:

答案 0 :(得分:1)

调用函数的方式

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