Самоучитель 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