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

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

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

−4π x ≤ 4π . При этом на графике отображается заголовок, подписи у координатных осей и координатная сетка. Кривая отображается сплошной линией синего цвета толщины 2. То же происходит, если в командной строке рабочей области ввести и выполнить всего одну команду:

>> SinX

В результате создается график функции, представленный на рис. 3.2.

Рис. 3.2. График функции создан в результате выполнения сценария

В том, что все использованные в сценарии переменные являются глобальными, достаточно легко убедиться. Для этого после команды вызова сценария в рабочей области проверяем значения первых элементов векторов x и y, как показано на рис. 3.3.

Хотя ни вектор x, ни вектор y непосредственно в рабочей области не определялись, они здесь доступны и им присвоены значения – во время выполнения сценария в соответствии с выполнявшимися при этом командами.

Ситуация может быть обратной: переменная объявляется в рабочей области командами пользователя, а используется в сценарии. Правда, это уже относится скорее к области экзотики. Тем не менее, в качестве иллюстрации можем рассмотреть следующий пример. В файл с названием SinX2.m записываем следующие команды:

106

b=abs(ans); a=-b; step=b/50; x=a:step:b; y=sin(x)./x; plot(x,y,'r--o') grid on

Окно редактора m-файлов с этим кодом представлено на рис. 3.4.

В сценарии переменной b в качестве значения присваивается модуль системной переменой ans (команда b=abs(ans)). Переменной а командой a=-b присваивается такое же по модулю, но отрицательное значение, а переменная step по-

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

Рис. 3.3. Все переменные в сценарии являются глобальными

Рис. 3.4. Окно редактора m-файлов с кодом сценария

лучает значение step=b/50. Вектор x формируется командой x=a:step:b и представляет собой набор узловых точек на симметричном интервале, а шаг дискретности равен 1/100 от длины интервала. Вектор y формируется командой y=sin(x)./x и представляет собой набор значений рассматривавшейся выше функции в узловых точках. Наконец, командой plot(x,y,'r--o') строится график функции (красная штрихованная линия с маркерами в виде кругов). Командой grid on на графике отображается координатная сетка.

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

>>8*pi ans =

25.1327

>>SinX2

107

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

На рис. 3.5 представлено рабочее окно с введенными в него командами.

Рис. 3.5. Окно рабочей области с командами пользователя

После выполнения команды 8*pi значение получает системная переменная ans. Поэтому когда следующей командой SinX2 вызывается соответствующий сценарий, в результате его выполнения получаем график, как на рис. 3.6.

Рис. 3.6. Результат выполнения команд и вызова сценария

sin(x)

В данном случае график строится для функции y(x) = x на интерва-

ле значений аргумента −8π x ≤ 8π (в соответствии со значением системной переменной ans).

108

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

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

На заметку

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

Функции пользователя

Есть еще время сохранить лицо.

В. Черномырдин

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

function [результат1,результат2,...]=имя_функции(аргумент1,аргумент2,...)

После ключевого слова function в квадратных скобках перечисляются переменные, в которые записываются результаты функции. Затем следует оператор присваивания и имя функции. После имени функции в круглых скобках через запятую перечисляются переменные - аргументы функции. Если результат у функции один, квадратные скобки можно не использовать. Если функция результат не возвращает (может быть и такое), переменные результата вообще не указываются: после ключевого слова function следует имя функции и список аргументов. Для начала рассмотрим самый простой случай, когда у функции один аргумент и результат она не возвращает. Редактор m-файлов с кодом такой функции представлен на рис. 3.7.

Код у функции следующий:

function nums(n) step=n/5; 0:step:n

109

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

Рис. 3.7. Окно редактора m-файлов с кодом функции nums()

У функции nums() один аргумент, и она не возвращает результат. В результате выполнения функции на экране появляется шесть числовых значений: от 0 до значения аргумента функции n с равным интервалом изменения, который определяется локальной переменной step=n/5. Здесь еще раз подчеркнем, что все переменные, использованные в функции, являются локальными. Поэтому в данном случае переопределения встроенной функции step() не происходит.

При сохранении m-файла с кодом функции его название должно совпадать с именем функции. В данном случае функция записана в файл nums.m. Результат использования созданной функции показан на рис. 3.8.

Рис. 3.8. Результат использования функции пользователя nums()

Рабочая область содержит такие команды и результат их выполнения (жирным шрифтом выделены команды пользователя):

>> nums(10)

ans =

2

4

6

8

10

0

>> nums(-6.2) ans =

0

-1.2400 -2.4800 -3.7200 -4.9600

-6.2000

110

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