Как функция lu() решает, что возвращать?
Позволять 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 ответа
Вы можете использовать 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.
Да, это может быть воспроизведено с помощью 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
Как отмечает Сэм Робертс, это не поможет вам создать функцию, которая будет вести себя по-разному для разного количества выходов. Если это то, что вы хотите, вы должны проверить nargout
в сочетании с оператором switch. Точно так же вы можете использовать nargin
если вы хотите изменить поведение в зависимости от количества входных переменных. Пожалуйста, проверьте ответ Сэма Робертса, чтобы увидеть, как это можно сделать.