让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( )
函数如何知道我要求的返回参数数量? 答案 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中实现。