Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №2. Скрипты и функции в MATLAB

Поиск

Теоретическая часть

М-файлы

М-файл – это текстовый файл, содержащий инструкции языка MATLAB, с расширением.m. Для вызова М-файла достаточно записать в окне команд MATLAB (или в другом М-файле) его имя без расширения.

Создать М-файл можно в любом текстовом редакторе, но предпочти­тельней использовать встроенный редактор MATLAB. Чтобы его вызвать, надо воспользоваться пунктом File главного меню MATLAB; например, для созда­ния File /New/M-file. Для открытия существующего М-файла также можно вве­сти команду: edit имя_файла (без расширения). Для закрытия М-файла надо воспользоваться командой главного меню окна редактора File/Save имя_файла. Существует два вида М-файлов: скрипты и функции. Их мы рассмотрим в сле­дующих параграфах.

Скрипты

Скрипты – это простейшие М-файлы. Они имеют с командным окном (или с вызвавшим скрипт М-файлом) общее рабочее пространство переменных. При вызове скрипта просто выполняются содержащиеся в нем команды. Например, создадим текстовый файл z2_5_2.m, содержащий команды

s=sum(a');

k=length(find(s>0));

Тогда из командного окна с помощью инструкции

>> z2_5_2

мы вычислим число строк матрицы а с положительной суммой элементов.

Функции

Функции – это подпрограммы языка MATLAB. Общий вид функции:

function [ СписокВыхода ]= ИмяФункции (СписокВхода)

% комментарии

исполняемые операторы

Первая строка, начинающаяся с ключевого слова functionявляется заго­ловком функции. СписокВхода и СписокВыхода – это списки входных и вы­ходных формальных параметров; элементы списков перечисляются через запя­тую. В отличие от Паскаля, функция MATLAB может иметь несколько выход­ных значений, и поэтому нет необходимости в процедурах общего назначения. Если выходной параметр один, то его можно не заключать в квадратные скобки.

После заголовка идут строки комментариев. Как во всех алгоритмиче­ских языках, комментарии не обрабатываются транслятором, а используются для пояснения программы. В языке MATLAB комментарием считается текст от символа % до конца строки. Комментарии, которые стоят между заголовком функции MATLAB и первой пустой или исполняемой строкой, выводятся как информационный текст при вызове команды
help ИмяФункции

Исполняемые операторызаписываются как обычно при кодировании алгоритма.

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

Вызов функции осуществляется инструкцией:

[ СписокВыхода ]= ИмяФункции (СписокВхода),

в которой участвуют списки фактических параметров, т. е. переменных базовой рабочей области.

Пример 2. Функция sumk определяет сумму каждой строки произволь­ной матрицы а и число ее строк с положительной суммой:

function [s,k]=sumk(a)

% s-sums of rows, k- number of positive sums

s=sum(a');% calculate sums

k=length(find(s>0));%calculate number of positive sums

Текст функции должен быть сохранен в файле sumk.m.

Тогда операторы, набранные в командном окне:

[sa,ka]=sumk(a);

[sb,kb]=sumk(b);

обеспечат вычисление sa (sb) – массива сумм строк матрицы a (b), и ka (kb) числа положительных значений среди этих сумм.

Глобальные переменные

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

Пример 3. Функция

function h=falling(t)

global GRAVITY

h=1/2*GRAVITY*t.^2;

может быть вызвана следующими командами:

global GRAVITY

GRAVITY=9.8;

y=falling(0.1:0.1:1);

Ответьте на вопрос: в каких ситуациях оправдано использование глобальных переменных?

Для удаления глобальной переменной из рабочей области используется команда clear global имя_переменной.

Отладка М-файлов

Встроенный редактор М-файлов является также и отладчиком (Editor/Debugger). Приемы отладки такие же, как в Паскале. Рассмотрим минимальный набор средств отладки.

Установка (снятие) точек прерывания осуществляется следующими способами:

· щелчком на полосе точек отладки (см. рис. 2.1) возле оператора, на котором необходимо сделать прерывание;

· командой Breakpoints/Set (Clear) Breakpoints (курсор должен стоять на нужном операторе);

· клавишей F12;

· кнопками панели инструментов.

Активные точки отладки имеют красный цвет, неактивные серый. Причиной неактивности точек отладки может быть наличие синтаксических ошибок в М-файле или несохранение последней версии файла.


Трассировка М-файла может осуществляться с помощью пункта глав­ного меню Debug, указанных в этом пункте функциональных клавиш или кно­пок панели инструментов. Возможности трассировки:

Step – пооператорное выполнение М-файла, вызов функции считается одним оператором (аналогично Trace в Delphi);

Step In – пооператорное выполнение М-файла c заходом в функции (аналогично Trace Into в Delphi);

Step Out – после захода в функцию выполнение ее до конца и после выхода из функции пауза;

Continue – выполнение М-файла до его конца или до следующей точки прерывания.

Просмотр значений переменных во время паузы может осуществляться следующими способами:

· установкой курсора слева от переменной в окне редактора/отладчика, при этом на несколько секунд появится небольшой прямоугольник с ее текущим значением;

· оцениванием выделенного выражения; после выделения вызвать контекстное меню или выбрать пункт Evaluate Selection;

· использованием редактора массивов рабочей области функции; для входа в редактор сделать щелчок мышью на пиктограмме интересующей переменной в рабочей области функции; нужная рабочая область выбирается из раскрывающегося списка Stack;

· просмотром значения в командном окне; в процессе отладки приглашение в командном окне изменит свой вид с «>>» на «K>>»; после приглашения достаточно ввести имя переменной и нажать Enter.

Профилирование М-файлов

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

Окно профилера (см. рис. 2.2) вызывается с помощью команды главного меню View/Profiler. В поле Run this code записывается команда вызова профилируемого М-файла. Нажатие кнопки Start Profiling запускает процесс про­филирования. Индикатор Profile time показывает время профилирования; его исходный цвет черный, во время профилирования меняется на зе­леный. После завершения профилирования его итоги выводятся в окне профилера. На рис. 2.2 представлен результат профилирования М-файла prof, в котором в цикле 10000 раз вызывается функция sumk (см. п. 1.3):

b=[-8,7;7,7];

for i=1:10000

[sb,kb]=sumk(b);

end

 
 

Ниже дан перевод итогов профилирования. Последний столбец итоговой таблицы содержит диаграмму общего времени выполнения функций.

 

 
 

2. Задание

1. Сделайте скрипт для алгоритма задачи [3] 2.5.2.N+1. Ввод исходных дан­ных и вывод результатов не включайте в скрипт. Вызовите скрипт не­сколько раз из окна команд для обработки матрицы, значения которой за­давайте двумя способами: присваиванием и вводом из файла.

2. Оформите алгоритм задачи [3] 2.5.2.N+1 как функцию MATLAB. Вызовите эту функцию несколько из окна команд для обработки матриц с различ­ными именами.

3. Выполните в среде MATLAB задачу [3] 4.2.6.N+1.

4. Для отладки каждого М-файла организуйте его пооператорное выполне­ние, в ходе которого проанализируйте, правильно ли изменяются значения переменных.

5. Выполните профилирование разработанных М-файлов. Чтобы время выполнения было значимым, организуйте многократный вызов М-файла в цикле по образцу п.1.6.



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 2398; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.15.124 (0.007 с.)