4

让我们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( )知道我请求了多少返回参数?
  • 我可以在我的代码中复制这种行为吗?
4

2 回答 2

3

您可以使用该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 中实现。

于 2014-04-03T10:21:31.213 回答
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 的回答,看看如何做到这一点。

于 2014-04-03T09:56:47.520 回答