Компьютерная графика / Osnovy_MATLAB
.pdfОсновы работы в системе MATLAB
уровня. Функция нижнего уровня может вызвать функцию верхнего уровня, в
которую она вложена, и все функции, доступные из нее.
Переменные, определенные во внешней функции, доступны и во вложен-
ной функции, и наоборот. Исключение составляет случай коллизии переменных для функций одного уровня. В этом случае во вложенных функциях это разные локальные переменные с одним именем. Разумеется, что во внешней функции доступ к двум переменным с одним именем не возможен, поэтому ни одна из них не доступна.
Использование указателя на вложенную функцию позволяет обеспечить доступ к вложенным функциям не только в М-файле. В следующем примере приведено использование вложенной функции для создания двух однотипных функций с разными параметрами. Допустим, существует функция fixed_parm:
function pointer = fixed_parm(a, b, c)
%a, b, c – параметры процесса.
%Cоздание указателя на вложенную функцию pointer = @process;
function y = process(t) y = a*sin(b.*t + c);
end
end
Тогда при выполнении команд:
>>f = fixed_parm(1.5, 2, 0);
>>g = fixed_parm(1, 10, 25);
>>fplot(f, [-2, 2])
>>hold on;
>>fplot(g, [-2, 2])
будут построены графики двух разных функций. Таким образом, созданы две функции f и g, зависящие от одной переменной, для которых значения пара-
метров зафиксированы на момент обращения к функции fixed_parm (рис.3).
21
Основы работы в системе MATLAB |
|
|
|
|
|
|
|
|
1.5 |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
0.5 |
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
-0.5 |
|
|
|
|
|
|
|
|
-1 |
|
|
|
|
|
|
|
|
-1.5 |
|
|
|
|
|
|
|
|
-2 |
-1.5 |
-1 |
-0.5 |
0 |
0.5 |
1 |
1.5 |
2 |
Рис. 3 График двух функций одной переменной |
Приватные функции позволяют управлять доступностью файл-функций со стороны других файл-функций. Простейший прием сделать функции до-
ступными или нет, состоит в размещении М-файлов в рабочих каталогах.
Определенная структура каталога с пользовательскими файл-функциями поз-
воляет задать некоторые вспомогательные функции, которые используются только файл-функциями, содержащимися в М-файлах данного каталога, а для файл-функций из других каталогов являются недоступными. Для этого следует создать подкаталог с именем private и разместить в нем вспомогательные файл-функции. Например, файл-функция с:\work2\test.m не имеет доступа к приватной функции с:\work1\private\fun1.m.
Встраиваемые и анонимные функции. Если исследуемая функция зада-
ется простой и короткой формулой, то не обязательно составлять файл-
функцию. Вместо этого удобно ввести встраиваемую функцию (inline-
функцию), воспользовавшись функцией inline, или определить анонимную функцию.
Обращение к встраиваемой функции выглядит следующим образом:
Имя_функции=inline(’формула’, список_аргументов)
Список аргументов не обязателен, а формула является текстовой стро-
кой и задает выражение для вычисления значения функции. Например,
>> fun = inline(’sin(x) - x.^2.*cos(x)’)
22
Основы работы в системе MATLAB
Функция fun может быть использована как любая другая функция,
например,
>> y=fun(0.5) y=0.2600
Если функция зависит от нескольких переменных, то все они являются аргументами введенной inline-функции и располагаются в алфавитном порядке:
>> fun1=inline(’sin(a*x) - x.^2.*cos(b*x)’)
Для изменения порядка аргументов их следует перечислить через запятые в списке после выражения, определяющего вид функции:
>> fun2=inline(’sin(a*x) - x.^2.*cos(b*x)’, ’x’, ’a’, ’b’)
Все аргументы функции должны быть символьными строками, заключен-
ными в апострофы, или строковыми переменными.
Если в списке пропущен хотя бы один из аргументов, то воспользоваться inline-функцией не удастся. Даже при наличии пропущенной переменной в ра-
бочей среде вызов функции приведет к сообщению о том, что аргумент не за-
дан, т.е. переменные рабочей среды при вычислении значений inline-функции недоступны.
Альтернативный способ задания функции состоит в объявлении аноним-
ной функции с помощью оператора указателя @:
Имя_функции = @(список_аргументов) формула
В отличие от inline-функции, и аргументы, и формула записываются в обычном виде, а не как текстовые строки в апострофах. Кроме того, анонимной функции доступны переменные рабочей среды, которые входят в формулу. Од-
нако они являются константами, в качестве которых берутся значения этих пе-
ременных в момент создания анонимной функции, и последующее изменение их значений не будет учитываться при вычислении функции:
>>a=1;
>>gun3 = @(x,b) (sin(a*x) – x.^2.*cos(b*x))
>>gun3(5, 0)
ans = -25.9589
23
Основы работы в системе MATLAB
>>a = 1000;
>>gun3(5, 0) ans = -25.9589
По способу использования анонимная функция напоминает inline-
функцию, но отличается тем, что создается указатель на функцию, который связан с исполняемым кодом (это видно в окне Workspace - информация о вы-
делении памяти показывает, что для анонимной функции исполняемый код и указатель на нее отделены, а для inline-функции - это единый объект).
4 РАЗБИЕНИЕ М-ФАЙЛА НА ЯЧЕЙКИ
Кроме пофрагментного исполнения при помощи клавиши F9 редактор позволяет разбить всю программу на ячейки и выполнять их независимо. Текст разбивается при помощи строк комментариев, начинающихся с двух идущих знаков процента (%%).
Для использования средств редактора следует установить режим Cell Mode, выбрав в меню Cell пункт Enable Cell Mode. При этом становятся доступными другие пункты этого меню, а выбранный изменится на Disable Cell Mode для отмены режима. Кроме этого, появляется панель инструментов для работы с ячейками. Для оформления файла можно использовать следующие пункты меню Cell:
Insert Cell Divider – вставка разделителя ячеек из двух символов процен-
та (%%). Если курсор находится не в первой позиции строки, то раздели-
тель вставляется за текущей строкой, иначе - перед ней;
Insert Cell Divider around Selection – вставка разделителя ячеек (%%) до и после выделенного фрагмента;
Insert Text Markup – раскрывающийся пункт меню для вставки строк об-
разцов комментариев в место, где расположен курсор;
Evaluate Current Cell – выполняются строки текущей ячейки, после чего она становится текущей;
24
Основы работы в системе MATLAB
Evaluate Current Cell and Advance – выполняются строки текущей ячейки, после чего текущей становится следующая ячейка;
Evaluate Entire File – выполняется весь файл.
При выполнении файла требуется, чтобы переменные, используемые в командах и функциях, присутствовали в среде Workspace. Ячейки М-файла выполняются в режиме Cell Mode без предварительного сохранения его на диске, в отличие от запуска всего файла по клавише F5. Перемещаться по ячейкам вверх и вниз можно по опциям Previous Cell и Next Cell меню Cell.
Для файл-функций применение технологии разбиения на ячейки сопря-
жено с трудностями, поскольку их переменные являются локальными.
5ДИАГНОСТИКА М-ФАЙЛОВ
Всоставе среды MATLAB имеется средство M-Lint для проверки кор-
ректности написанного кода. После сохранения М-файла следует в меню редактора Tools выбрать пункт Check Code with M-Lint (если файл не был сохранен, то этот пункт меню называется Save and Check Code with M-Lint). По окончании проверки появится окно M-Lint Code Check Report с отчетом.
6КОНТРОЛЬНЫЕ ВОПРОСЫ
6.1Что такое "рабочая среда MATLAB" ?
6.2Для чего используются кнопки Dock и Undock ?
6.3Какое назначение окна Command Windows ?
6.4Какое назначение и структура окна Workspace ?
6.5Какое назначение окна Array Editor ?
6.6 Как используются команды who, whos, clear, exist ?
6.7Как устанавливается формат вывода результатов ?
6.8Как используется команда format ?
6.9Какое назначение служебных клавиш , ?
25
Основы работы в системе MATLAB
6.10В каких случаях возможно появление исключительных ситуаций ?
6.11В чем состоит особенность записи комплексных чисел ?
6.12В чем состоит особенность комплексно-сопряженных выражений ?
6.13Каким образом можно получить информацию о встроенных элементар-
ных функциях ?
6.14 Каким образом можно получить информацию о специальных матема-
тических функциях ?
6.15Какие требования к записи имен переменных ?
6.16Каким образом сохраняются и восстанавливаются переменные среды ?
6.17Какая особенность хранения переменных в файлах с расширением mat ?
6.18Как используется команда diary ?
6.19Какие возможности MATLAB по работе с текстовыми файлами ?
6.20Для чего используется файл history.m ?
6.21Какое назначение М-файлов ?
6.22Как указываются комментарии в М-файлах ?
6.23Какое отличие файл-программ от файл-функций ?
6.24Какие особенности использования файл-программ ?
6.25Какие особенности использования файл-функций ?
6.26Какое назначение функции fplot ?
6.27Какое назначение подфункций и вложенных функций ?
6.28Какое назначение приватных функций ?
6.29Когда применяются встроенные и анонимные функции ?
6.30Как задаются параметры для встроенной функции ?
6.31Как используются переменные рабочей среды при работе встроенных и анонимных функций ?
26