Зависит ли возвращаемое значение функции MATLAB от того, как она вызывается? - PullRequest
2 голосов
/ 06 апреля 2010
A = imread(filename, fmt)

[X, map] = imread(...)

Выше приведено в синопсисе части imread, которая говорит о том, что возвращаемое значение функции MATLAB зависит от того, как она вызывается? Это правда?

Ответы [ 2 ]

4 голосов
/ 06 апреля 2010

Функция IMREAD определяется как

function [X, map, alpha] = imread(varargin)

В ваших 2 примерах A и X будут одинаковыми, но во втором случае будет дополнительная переменная map.

В MATLAB есть способ определить вывод переменной, если вы используете VARARGOUT в определении функции:

function varargout = foo(x)

Таким образом, вы можете выводить различные значения в зависимости от некоторых условий в теле функции.

Это глупый пример, но он иллюстрирует концепцию:

function varargout = foo(a,b)
if a>b
    varargout{1} = a+b;
    varargout{2} = a-b;
else
    varargout{1} = a;
    varargout{2} = b;
end

Тогда

[x,y] = foo(2,3)
x =
     2
y =
     3
[x,y] = foo(3,2)
x =
     5
y =
     1

Выходные аргументы могут быть даже разных типов данных.

Другой пример с условием, основанным на количестве выходных переменных:

function varargout = foo(a,b)
if nargout < 2
    varargout{1} = a+b;
else
    varargout{1} = a;
    varargout{2} = b;
end

Тогда

[x,y] = foo(2,3)
x =
     2
y =
     3
x = foo(2,3)
x =
     5
3 голосов
/ 06 апреля 2010

Да, в Matlab есть механизм для предоставления результатов с переменным количеством, а также для входных параметров.

Вы можете использовать его самостоятельно при написании функций, см. Документацию о narg *на Mathwork, чтобы узнать больше.

Возьмите, например, функцию гистограмма функция

> hist(1:100); % generates a plot with the 10 bins
> hist(1:100, 4); % generates a plot with 4 bins
> fillrate = hist(1:100, 4); % returns the fill rate for the 4 bins
> [fillrate, center] = hist(1:100,4); % returns the fill rate and the bins center in 2 differen variables
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...