Иллюстрированный самоучитель по MatLab

Функции с переменным числом аргументов. Функции подсчета числа аргументов.

При создании функций со специальными свойствами весьма полезны две приведенные ниже функции:

  • nargin – возвращает число входных параметров данной функции;
  • nargout – возвращает число выходных параметров данной функции.

Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов пяти аргументов x1, х2, х3, х4 и х5.

Обычный путь состоит в следующем – создаем функцию с именем sum2_5:

function f = sum2_5(x1, x2, x3, x4, x5);
f = x1 ^ 2 + x2 ^ 2 + x3 ^ 2 + x4 * 2 + x5 ^ * 2;

Теперь проверим ее в работе:

>> sum2_5(1.2.3.4.5)
ans =
55
>> sum2_5(1,2)
??? Input argument 'x3' is undefined.
Error in = › C:\MATI_AB\bin\sum2_5.m
On line 2 = › f=x1^2+x2^2+x3^2+x4^2+x5^2;

Итак, при наличии всех пяти аргументах функция работает корректно. Но если аргументов менее пяти, она выдает сообщение об ошибке. С помощью функции nargin можно создать функцию sum2_5m, которая работает корректно при любом числе заданных входных аргументов в пределах от 1 до 5:

f unction f=sum2m_5(x1, x2, x3, x4, x5);
n=nargin;
if n==1 f=x1^2; end
if n==2 f=x1^2+x2^2;end
if n==3 f=x1^2+x2^2+x3^2; end
if n==4 f=x1^2+x2^2+x3^2+x4^2: end
if n==5 f=x1^2+x2^2+x3^2+x

В данной функции используется условный оператор if…end, который будет детально описан далее. Но и без этого ясно, что благодаря применению функции nargin и условного оператора вычисления всякий раз идут по формуле с числом слагаемых, равным числу входных аргументов – от одного до пяти. Это видно из приведенных ниже примеров:

>> sum2_5m(1)
ans =
1
>> sum2_5m(1.2)
ans =
5
>> sum2_5m(1.2.3)
ans =
14
>> sum2_5m(1.2.3.4)
ans =
30
>> sum2_5m(1.2.3.4.5)
ans=
55
>> sum2_5m(1.2.3.4.5.6)
??? Error using => sum2_5m
Too many input arguments.

Итак, при изменении числа входных параметров от 1 до 5 вычисления проходят корректно. При большем числе параметров выводится сообщение об ошибке. Это уже действует встроенная в интерпретатор MATLAB система диагностики ошибок.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.