Что именно возвращает функция мульти-вывода в Matlab?
Отказ от ответственности: я на самом деле использую Scilab, но в основном он очень похож на MATLAB, и, основываясь на моих исследованиях, кажется, что то же самое происходит с MATLAB.
В MATLAB функции могут быть несколькими выходами. Предположим, у нас есть функция function [a, b] = f(x)
, Если я наберу:
c = f(x)
затем c
задается значение первого выхода. Если я наберу:
[a, b] = f(x)
затем [a, b]
задается значение пары обоих выходов. Кажется, это означает, что MATLAB не имеет ссылочной прозрачности. Какова фактическая стоимость выражения f(x)
? В чем дело?
2 ответа
В некоторых случаях количество запрошенных выходов меняет поведение, особенно когда функция вызывается без выходных аргументов.
Например, это просто отображает гистограмму данных в a
с настройками по умолчанию:
hist(a);
Следующий возвращает данные гистограммы в N
, Сюжет не производится:
N = hist(a);
Однако, если мы попросим два выхода (X
теперь центры бина) мы можем построить гистограмму с bar
(который является то, что hist
используется для построения графика, если не заданы выходные аргументы):
[N, X] = hist(a);
bar(X,N);
Это поведение контролируется проверкой nargout
и может быть включен в ваши собственные функции.
Это означает, что функция f(x)
обычно возвращает 2 выхода. Однако, когда вызывается только с одним выходным аргументом, он вернет только первый (a
в твоем случае). В MATLAB вы также можете указать, что вы не заинтересованы в конкретном выводе, используя ~
:
[~,b] = f(x);
[a,~] = f(x); % equivalent to a = f(x)