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

         

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


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

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

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

Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов пяти аргументов xl, х2, хЗ, х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(l,2.3.4.5) 

ans = 

55

» sum2_5(l,2)

??? Input argument 'хЗ' 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 , хЗ ,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

В данной функции используется условный оператор i f...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 система диагностики ошибок



Содержание раздела