Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
03.03.2016
Размер:
527.73 Кб
Скачать

Основы работы в системе 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

Соседние файлы в папке Компьютерная графика