【问题标题】:How does the lu( ) function decide what to return?lu() 函数如何决定返回什么?
【发布时间】:2014-05-15 01:27:52
【问题描述】:

A 为以下矩阵:

1 3 
2 4

如果我调用lu( ) 函数并像这样保存返回值:

[L, U] = lu(A);

MATLAB 返回 L, U 使得 L * U = A:

>> L * U

ans =
     1     3
     2     4

当我像这样保存返回值时:

[L, U, P] = lu(A);

L * U 等于 A:

>> L * U

ans =
     2     4
     1     3

因为lu( ) 返回 L、U、P 使得 L * U = P * A

我的问题:

  • lu( )函数怎么知道我请求了多少返回参数?
  • 我可以在我的代码中复制这种行为吗?

【问题讨论】:

    标签: matlab matrix decomposition


    【解决方案1】:

    是的,这可以使用varargout 复制。同样,如果您想要可变数量的输入,您可以使用varargin

    function varargout = my_fun(a,b,c);
       varargout{1} = b;
       varargout{2} = c;
       varargout{3} = a;
    end
    
    Now, this function can be called
    
    x = my_fun(1,2,3)
    x = 2
    
    [x, y] = my_fun(1,2,3)
    x = 2
    y = 3
    
    [x, y, z] = my_fun(1,2,3)
    x = 2
    y = 3
    z = 1
    

    正如 Sam Roberts 所指出的,这并不能帮助您创建一个针对不同数量的输出表现不同的函数。如果这是您想要的,您应该查看nargoutswitch-statement。同样,如果您想根据输入变量的数量改变行为,您可以使用nargin。请查看Sam Roberts' answer 了解如何做到这一点。

    【讨论】:

    • 这不演示如何根据输出的数量(根据 OP 的要求)改变函数的行为,只演示如何填充更少或更多的输出。
    【解决方案2】:

    您可以使用nargout 函数来检测请求了多少个输出参数。

    此外,您可以使用varargout 来适当地填写您的参数列表。

    例如:

    function varargout = myfun(a,b)
    
        switch nargout
            case 1
                varargout{1} = a;
            case 2
                varargout{1} = b;
                varargout{2} = a;
        end
    
    end
    

    当使用一个输出参数调用时,第一个(也是唯一一个)输出将是a。当用两个调用时,第一个是b,第二个是a

    您还可以使用nargoutchk(或在旧版本中使用nargchk)来断言请求的输出参数的数量在指定的限制范围内。

    lu 的作用与此类似,但在编译后的 C 而非 MATLAB 中实现。

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2013-01-16
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2020-01-20
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多