Что именно возвращает функция мульти-вывода в 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)
Другие вопросы по тегам