首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Matlab函数返回多个输出变量

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

Stack Overflow用户
提问于 2014-02-18 15:21:06
回答 4查看 29.1K关注 0票数 11

让我说我有一个功能:

代码语言:javascript
复制
function [ A, B, C ] = test(x, y, z)
    A=2*x;
    B=2*y;
    C=2*z;
end

当您按run时,Matlab只返回输出参数的第一个值--在本例中是[A]。是否有一个命令可以在函数中自动返回所有函数输出参数[A,B,C],而不是仅仅返回第一个参数。我知道我可以输入命令windows [ A, B, C ] = test(x, y, z)并获取所有的值,但有时我很懒,只想按Run并自动获取所有的值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-18 15:26:36

一些备选方案:

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

代码语言:javascript
复制
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

或者将它们合并成一个输出:

代码语言:javascript
复制
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

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

票数 9
EN

Stack Overflow用户

发布于 2014-03-04 15:56:24

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

代码语言:javascript
复制
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的长度。

票数 4
EN

Stack Overflow用户

发布于 2015-01-22 08:23:56

Matlab函数输出采用单元格格式,因此可以定义大小与函数输出相同的单元数据,并将其作为一个单一变量以更结构化的方式存储所有输出:)

代码语言:javascript
复制
a = cell{3, 1};
[a{:}] = test(x, y, z);
A = a{1};
B = a{2};
C = a{3}; 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21857967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档