从Matlab函数返回多个输出变量 | 您所在的位置:网站首页 › matlab怎么引用变量 › 从Matlab函数返回多个输出变量 |
可以说我有一个功能: 12345function [ 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)中键入并获取所有值,但是有时我很懒,只是想按Run(运行)并自动获取所有值。 一些选项: 添加一个参数以指定控制台的详细输出,但默认情况下将其设置为false: 1234567891011121314151617function [ 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\ B = %f\ C = %f', A, B, C); end; end或将它们合并为一个输出: 123456789function 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或者,如果您真的很想我想,您可以编写一个包装函数,然后在该函数上调用它,它会为您显示所有可以在任何函数上通用使用的所有三个。但这似乎不值得。 相关讨论 如果使用{A;B;C},则可以通过在代码末尾添加A=output{1},B=output{2}和C=output{3}来显示它们,而不使用分号。另一个选择是使用assignin自动将输出参数保存到工作空间 123456789function [ 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"是从命令窗口调用变量时使用的主要工作空间的名称。 这样,您可以在不带[A,B,C] =部分的情况下在工作区中键入test(x,y,z),它仍将为您提供所有值。 与将A,B和C组合为一个输出相比,这样做的好处是您仍将在工作区中保存3个单独的变量。如果A,B和C是数组或单元格,这将很有用。此方法的缺点是,如果在另一个函数中使用此函数,则该函数仍将仅使用A的值。例如:length(test(x,y,z))仅给出A的长度。 Matlab函数输出采用单元格格式,因此您可以定义大小与函数输出相同的单元格数据,并将其用作单个变量以更结构化的方式存储所有输出:) 12345a = cell{3, 1}; [a{:}] = test(x, y, z); A = a{1}; B = a{2}; C = a{3}; 相关讨论 Matlab函数输出采用单元格格式,因此您可以定义大小与函数输出相同的单元格数据,并将其用作单个变量以更结构化的方式存储所有输出:) wshan,感谢您的快速回复。我根本不了解matlab,但是您可以编辑答案,并使用尽可能多的信息对其进行更新。这将使其他用户更加清楚和理解该答案。但是,如果您可以改善答案,我会为您的答案给我+1。 只要确保您的答案不重复其他(现有)答案即可。或者,如果您想给出更好的答案(应与问题相关),请解释为什么此答案是更好的答案。 如果我可以提出建议,请使用deal:[A, B, C] = deal(a{:});。 第一行应该是a = cell(3,1);代码完美MATLAB将自动输出未以';'结尾的变量/表达式。 因此,如果您只需要显示所有这些值,则最简单的方法是: 12345function [ 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 相关讨论 唯一的问题是,即使您不希望使用它们,也将始终打印这些值。 @丹是的。但适合OP输出所有值。 :P |
CopyRight 2018-2019 实验室设备网 版权所有 |