Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 3. Элементы программирования

1+mod(i,2),'Color',colors(mod(i,3)+1)). Здесь дважды использована функция mod(), у которой два аргумента, а в качестве результата возвращается остаток от деления первого аргумента на второй. Поэтому результатом инструкции 1+mod(i,2) является значение 1 для четных значений переменной i и 2 для нечетных. В результате графики по очереди отображаются тонкой и толстой кривыми. Значением выражения mod(i,3)+1 являются числа 1, 2 и 3, поэтому инструкцией colors(mod(i,3)+1) осуществляется циклический перебор элементов массива colors. Наконец, после создания всех графиков инструкцией hold off отменяется режим отображения графиков в одном окне. На рис. 3.36 показано окно редактора m-файлов с кодом рассмотренной выше функции.

Рис. 3.36. Код функции с переменным числом аргументов в окне редактора m-файлов

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

Сначала создается базовый массив со значениями аргумента, а затем еще четыре массива со значениями различных функций в этих точках. Следующие три команды представляют собой вызов функции с одним, пятью и тремя аргументами (жирным шрифтом выделены команды, вводимые пользователем):

>>x=-2*pi:0.01:2*pi;

>>y1=sin(x);

>>y2=cos(x);

>>y3=sin(x)./x;

141

Самоучитель Matlab

Рис. 3.37. Вызов функции с разным количеством аргументов в командном окне

>>y4=(1-cos(x))./x;

>>MyPlots(x)

Недостаточное количество аргументов!

>>MyPlots(x,y1,y2,y3,y4)

>>MyPlots(x,y1,y2)

При вызове функции с одним аргументом появляется сообщение о недостаточном количестве аргументов. Результат вызова функции с пятью аргументами показан на рис. 3.38.

Рис. 3.38. Результат вызова функции с пятью аргументами

142

Глава 3. Элементы программирования

Если вызвать функцию с тремя аргументами, получим результат, как на рис. 3.39.

Рис. 3.39. Результат вызова функции с тремя аргументами

На заметку

Отметим, что если вызвать функцию MyPlots() с двумя аргументами, будет построен лишь один график, поскольку в теле оператора цикла нижняя граница диапазона изменения индексной переменной превышает верхнюю, и поэтому оператор цикла не выполняется.

Точно так же, как функция может иметь произвольное количество аргументов, она может возвращать и произвольное количество значений в качестве результата. В этом случае в качестве результата функции указывается переменная varargout. Как и переменная varargin, переменная varargout является массивом ячеек, каждая из которых содержит возвращаемый функцией результат. Ниже приведен пример функции, которая называется moments() и может возвращать произвольное количество значений в качестве результата:

function [varargout] = moments(x) for k=1:nargout

y=x.^k;

varargout{k}=sum(y)/length(x); end

end

143

Самоучитель Matlab

Предполагается, что функции аргументом передается массив числовых значений. В качестве значений функцией возвращаются статистические (или выборочные) моменты. Здесь имеет смысл отметить, что статистическим

(выборочным) моментом порядка k по выборке (множеству значений) x1 ,

 

 

1

n

x2 ,...,xn называется число mk

=

xik . Таким образом, момент первого

 

 

n

i=1

 

 

 

порядка представляет собой среднее арифметическое. В данном случае количество вычисляемых моментов определяется тем, сколько переменных содержит массив результата. На рис. 3.40 показан редактор m-файлов с кодом функции.

Рис. 3.40. Программный код функции в окне редактора m-файлов

На рис. 3.41 показано командное окно с примером использования функции moments().

Рис. 3.41. Пример использования функции moments()

144

Глава 3. Элементы программирования

Здесь с помощью команд (жирным шрифтом выделен ввод пользователя)

>>x=[1,2,5,-3,-2,0,2,1,-1,3];

>>[m1,m2,m3]=moments(x)

m1 =

0.8000

m2 =

5.8000

m3 =

13.4000

сначала создается числовой массив x, а затем на его основе вычисляются моменты от первого до третьего порядка включительно. Результат записывается соответственно в переменные m1, m2 и m3.

Функции eval () и feval ()

Софистика, пастор, софистика!

К/ф "Семнадцать мгновений весны"

Полезными при составлении программных кодов в Matlab могут оказаться системные функции eval() и feval(). У функций есть несколько вариантов использования. Здесь рассмотрим самый распространенный. Начнем с функции eval(). Функции передается текстовый аргумент, представляющий собой команду, которую необходимо выполнить. Обратимся к документу на рис. 3.42.

Рис. 3.42. Использование функции eval()

Фрагмент кода следующий:

>> eval('x=[1,2,3,4,5]') x =

1

2

3

4

5

145

Источник: https://studfile.net/preview/16433384/