lu()函数如何决定返回什么?

时间:2014-04-03 09:50:45

标签: matlab matrix decomposition

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( )函数如何知道我要求的返回参数数量?
  • 我可以在我的代码中复制此行为吗?

2 个答案:

答案 0 :(得分:2)

是的,可以使用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指出的那样,这对于创建一个对不同数量的输出表现不同的函数没有帮助。如果这是你想要的,你应该结合nargout结账switch-statement。同样,如果要根据输入变量的数量更改行为,可以使用nargin。请查看Sam Roberts' answer以了解如何完成此操作。

答案 1 :(得分: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中实现。