从Matlab函数返回多个输出变量 您所在的位置:网站首页 matlab怎么引用变量 从Matlab函数返回多个输出变量

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

2024-01-08 14:56| 来源: 网络整理| 查看: 265

可以说我有一个功能:

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 实验室设备网 版权所有