从Matlab函数返回多个输出变量

时间:2014-02-18 15:21:06

标签: matlab

假设我有一个功能:

function [ A, B, C ] = test(x, y, z)
    A=2*x;
    B=2*y;
    C=2*z;
end

当您按下run时,matlab仅返回输出参数中的第一个值 - [A]。是否有一个命令,我可以放在我的函数中,自动返回所有函数输出参数[A,B,C]而不是第一个参数。 我知道我可以输入我的命令窗口[ A, B, C ] = test(x, y, z)并获取所有值,但有时候我很懒,只想按“运行”并自动获取所有值。

4 个答案:

答案 0 :(得分:8)

一些选项:

添加一个参数以指定控制台的详细输出,但默认情况下将其设置为false:

function [ A, B, C ] = test(x, y, z, verbose)

   if nargin = 3
       verbose = false;
   end;

   A=2*x;
   B=2*y;
   C=2*z;

   if verbose
       fprintf('A = %f\nB = %f\nC = %f', A, B, C);
   end;

end

或将它们组合成一个输出:

function output = test(x, y, z)

   A=2*x;
   B=2*y;
   C=2*z;

   output = [A, B, C]; %// Or {A;B;C} if they're not going to be the same size, but then it won't display anyway

end

或者如果你真的想要我猜你可以编写一个你在函数上调用的包装函数,它会显示你可以在任何函数上使用的所有三个函数。但这似乎不值得。

答案 1 :(得分:3)

另一个选择是使用assignin自动将输出参数保存到工作区

function [ A, B, C ] = test(x, y, z)
    A=2*x;
    B=2*y;
    C=2*z;

    assignin('base', 'A', A);
    assignin('base', 'B', B);
    assignin('base', 'C', C);      
end

'base'是从命令窗口调用变量时使用的主工作空间的名称。

这样,您可以在没有test(x,y,z)部分的工作区中键入[A,B,C] =,它仍会为您提供所有值。

将A,B和C组合成一个输出的好处是,您仍然可以在工作区中保存3个单独的变量。如果A,B和C是数组或单元格,这很有用。这种方法的一个缺点是,如果你在另一个函数中使用这个函数,它仍然只使用A的值。例如:length(test(x,y,z))只给出A的长度。

答案 2 :(得分:1)

   a = cell{3, 1};
   [a{:}] = test(x, y, z);
   A = a{1};
   B = a{2};
   C = a{3}; 

答案 3 :(得分:0)

MATLAB将自动输出那些不以';'结尾的变量/表达式。

因此,如果您只需要显示所有这些值,最简单的方法是:

function [ A, B, C ] = test(x, y, z)
    A=2*x    % no ';' will print A's value automatically
    B=2*y    % no ';' will print B's value automatically
    C=2*z    % no ';' will print C's value automatically
end