Изучение программирования в MATLAB. Использование команд Save и Load, операторы ввода и вывода для работы в командном окне. Отладка собственных программ. Интерфейс MATLAB. Отличия поздней версии MATLAB от более ранних. Средство Source Control Interface.
Аннотация к работе
Пользователь вводит команды или запускает на выполнение файлы с текстами на языке MATLAB. Также вычисления можно выполнить, подготовив m-файл, называемый также файлом-сценарием или script-файлом, и запустив его на выполнение. Панель основного окна содержит значки часто используемых операций: создание нового и открытие существующего m-файла, операции правки, команда отмены ввода (Undo), просмотр рабочей области (Workspace Browser), подключенные каталоги (Path Browser) и справка (Help Window). Редактор-отладчик (Editor/Debugger) обеспечивает создание, редактирование и отладку m - файлов. Из файла ИМЯ считываются только переменные, перечисленные в списке ПЕРЕМЕННЫЕ, а отсутствие списка вызовет считывание всех величин, сохраненных в файле ИМЯ.В курсовой работе рассмотрена среда MATLAB, детально изучены основные команды и операционная программа в среде MATLAB.
Введение
Система компьютерной математики MATLAB является в настоящее время одним из наиболее эффективных инструментов для выполнения научно-технических расчетов, графической интерпретации полученных результатов и визуального моделирования. Эта система имеет удобный пользовательский интерфейс, развитый язык программирования, ядро символьных вычислений и множество дополнительных пакетов, таких, как Simulink, SIMPOWERSYSTEM и другие.
Овладев навыками и приемами работы в системе MATLAB, студенты технических специальностей университета смогут качественно и достаточно быстро проводить в ней нужные исследования и вычисления по курсовому и дипломному проектированию, применять систему для решения сложных инженерных задач.
1. Работа в среде MATLAB
Среда MATLAB включает интерпретатор команд на языке высокого уровня, графическую систему, пакеты расширений и реализована на языке С. MATLAB постоянно модернизируется, при этом расширяются возможности системы меню, совершенствуются старые и добавляются новые команды. Меню частично дублируют ряд команд и облегчают взаимодействие с многочисленными инструментами MATLAB. По-прежнему вся работа организуется через командное окно (Command Window), которое появляется при запуске программы matlab.exe. В процессе работы данные располагаются в памяти (Workspace), создаются графические окна для изображения кривых, поверхностей и других графиков
1.1 Командное окно
В командном окне в режиме диалога проводятся вычисления и активируются элементы среды MATLAB. Пользователь вводит команды или запускает на выполнение файлы с текстами на языке MATLAB. Интерпретатор обрабатывает введенное и выдает результаты: числовые и строковые данные, предупреждения и сообщения об ошибках.
Знаком «>>» в тексте помечаются строки ввода команд MATLAB, а результат будет располагаться на последующих строках. Если заранее результат не присвоить какой либо переменной, то результат запишется в стандартную переменную ans (сокращение от Answer). Чтобы посмотреть список используемых имен переменных, достаточно выполнить команду who. Команда whos выводит список переменных вместе с информацией о размерности, плотности заполнения и типе переменных. Туже информацию можно получить, обратившись к пункту меню File/Show Worcspase или к значку Workspase Browser. Если затем в окне Workspase Browser щелкнуть дважды на идентификаторе нужной переменной, то в MATLAB Editor/Debugger появится содержимое этой переменной и станет доступным для изменения. Такое редоктирование возможно для матриц, но не распространяется на многомерные массивы и структуры.
Также вычисления можно выполнить, подготовив m-файл, называемый также файлом-сценарием или script-файлом, и запустив его на выполнение. Таким образом, в MATLAB можно приготовить файл с программой, протестировать его при помощи редактора-откладчика и выполнить, указав в строке ввода командного окна имя файла.
1.2 Система меню
Меню MATLAB состоит из пяти пунктов. Их назначения приведены в с таблице 1.1.
Таблица 1.1
Пункты Назначение
File Команды работы с файлами, свойствами окон, печать
Edit Операции правки, команда очистки рабочей области
View Включение/отключение строки состояния
Window Список окон
Help Справка, примеры и демонстрации
В таблице 1.2 описаны пункты меню File.
Таблица 1.2
Пункты Назначения
Open Selection Открытие файла, соответствующего выделенной функции, в окне редактора
Run script Запуск т-файла
Load Workspace… Считывание данных в рабочую область
Save Workspace As… Сохранение данных рабочей области
Show Workspace Просмотр данных в рабочей области
Show Graphics Property editor Свойства графического редактора
Show GUI Layout Tool Свойства графического интерфейса
Set Path Подключение каталогов
Preferences Назначение шрифтов, форматов и др.
Меню Edit содержит стандартные возможности (Undo, Cut, Copy, Paste, Clear, Select All) и команду очистки всех переменных в сеансе (Clear Session).
Меню View состоит из одного пункта-переключателя (Toolbar).
Меню Window позволяет переключаться от одного окна к другому, причем основное окно имеет номер 0, а нумерация графических окон начинается с 1.
Меню Help позволяет пользователю MATLAB ознакомится с программой, ее характеристиками, описание команд и т.д. Панель основного окна содержит значки часто используемых операций: создание нового и открытие существующего m-файла, операции правки, команда отмены ввода (Undo), просмотр рабочей области (Workspace Browser), подключенные каталоги (Path Browser) и справка (Help Window).
1.3 Интерфейс MATLAB
Новая версия MATLAB сохраняет преемственность с предыдущими реализациями по языку, библиотекам команд, средствам отладки и пр. Изменения затронули интерфейс рабочего места (desktop), куда теперь включены средства работы с файлами, переменными и ассоциированными с MATLAB приложениями.
Ниже описано какие отличия поздней версии MATLAB от более ранних: Командное окно, осуществляющее запуск команд и получающее результаты их выполнения. Здесь стало доступно контекстное меню для вывода выделенных переменных, открытия файлов-функций и получения справки по ним. Кроме того, конструкции языка MATLAB выделяются цветом.
Список введенных в сеансе команд (History command) является новым инструментом, организующим просмотр, копирование и повторный запуск этих команд.
Новым средством является Launch Pad, обеспечивающий быстрый доступ к инструментам (Workspace, Path, GUI Builder), справке и документации.
Система справки обрела новый интерфейс, заменивший HELPDESK.
Просмотр каталогов является новым средством, обеспечивающим работу с файлами, поиск и замену строк в файлах.
Рабочая область (Workspace Browser) обеспечивает просмотр и внесение изменений в переменные, а также предоставляет доступ к графическому интерфейсу для считывания данных из бинарных и текстовых файлов Import Wizard.
Редактор массивов (Array Editor) предназначен для просмотра и редактирования матриц, строк и массивов ячеек из строк, имеется возможность изменения формата представления данных.
Редактор-отладчик (Editor/Debugger) обеспечивает создание, редактирование и отладку m - файлов. Модернизация расширила возможности редактора, в частности добавлены следующие возможности: показ номеров строк, превращение массива строк в комментарии, изменение цветов для выделения синтаксических конструкций, поиск фразы в нескольких файлах, возможность восстановления файлов при неудачном завершении предыдущего сеанса, подсказки по данным, сохранение точек останова при записи файла.
Окно Set Path дает доступ к каталогам и предоставляет новый интерфейс вместо Path Browser.
Профилер теперь поддерживает оценку времени выполнения файлов источников.
Добавилось новое средство Source Control Interface.
Включена поддержка Windows 2000 для документов Notebook.
Новым в системе справки является то, что почти вся документация подготовлена в виде HTML-файлов. Она лучше всего отражает текущее состояние системы MATLAB. Доступ к справочной информации реализуется при помощи просмотрщика, учитывающего специфику и организацию продуктов семейства MATLAB. Раскрываемые оглавления по системам, индексация по темам, расширенные поисковые возможности - все это позволяет легко найти нужную информацию. Новым является сохранение закладок и использование контекстного меню при нажатии правой кнопки мыши.
Для быстрого считывания в рабочую область двоичных или ASCII данных удобно пользоваться системой Import Wizard. Ряд команд поддерживает совместимость со старыми названиями.
Возможности компилятора MATLAB расширились, для получения справки нужно набрать мсс - ?. Добавились различные способы оптимизации кода, поддерживаются команды pause и continue. Библиотека MATLAB C/C Graphics Library позволяет использовать графические возможности MATLAB и интерфейс GUI для запускаемых независимо от MATLAB приложений, реализованных на С или C . Значительно усовершенствована производительность всех функций математической библиотеки, в частности добавлены быстрые скалярные версии многих функций, графическая библиотека теперь поддерживает команды печати. В создаваемых программах можно использовать многие элементы MATLAB: текст, сетки, линии, многоугольники, компоненты графического интерфейса (меню, кнопки, диалоговые окна). Для создания таких приложений следует использовать компилятор MATLAB, вызов процедур MATLAB C/C Graphics Library из модулей С и C не поддерживается. Внесены изменения в библиотеку математических процедур MATLAB C/C Math Library.
При реализации новых возможностей среды MATLAB использована технология Java. Однако поддержку Java можно отключить, для этого достаточно запустить программу matlab. exe с параметром - nojvm. В этом случае интерфейс аналогичен интерфейсу MATLAB 5.3. программирование matlab отладка интерфейс
2. Программирование в среде MATLAB
Изначально MATLAB был реализован на Фортране, и, хотя современные версии пишутся на С, язык MATLAB или М-язык конструкциями и отчасти синтаксисом напоминает Фортран. М-язык Является языком высокого уровня и предоставляет достаточные возможности для реализации разнообразных вычислений, задач обработки данных и т.д. Этот язык сконструирован для решения математических задач и содержит специальные средства для эффективного выполнения математических операций.
2.1 Команды ввода - вывода
В MATLAB поддерживается работа с внешними данными, подготовленными в различных форматах. Такая работа осуществляется при помощи набора эффективных команд. Для записи и считывания информации разработан специальный формат mat-файла, избавляющий пользователя от необходимости вникать в детали хранения данных. Более того, при помощи функций из библиотеки С можно создавать приложения с доступом к mat-файлам. Также имеется набор команд для форматного ввода и вывода информации, для записи бинарных файлов и для работы с некоторыми типами стандартных файлов.
2.1.1 Команды load и save
Мощными и удобными в работе являются команда save для сохранения информации и команда load для ее считывания. По умолчанию данные записываются в стандарте mat-файла. Схематически обращение к команде save выглядит следующим образом: save [ИМЯ] [-ПАРАМЕТРЫ] [ПЕРЕМЕННЫЕ]
В квадратных скобках даны необязательные параметры, при отсутствии которых запись производится согласно системным назначениям. Когда имя файла ИМЯ не указано, то данные будут сохранены в двоичном файле matlab.mat. Если расширение файла пропущено, то данные запишутся в файл ИМЯ.mat. Список величин, подлежащих записи, задается параметром ПЕРЕМЕННЫЕ, при отсутствии которого сохраняются все данные из рабочей области.
Дополнительные ПАРАМЕТРЫ могут принимать следующие значения: · ascii - сохранение в виде ASCII-файла с мантиссой из восьми цифр;
· ascii-double - сохранение в виде ASCII-файла с шестнадцатизначной мантиссой;
· append - дозапись в существующий файл.
При сохранении информации в двоичном коде для записи вещественных чисел используется 8 байт, а для целочисленных переменных могут применяться следующие форматы: int8 (однобайтное целое число от -128 до 127), intl6 (двухбайтное целое число) и int32 (четырехбайтное целое число).
Назначения параметров для команды load аналогичны описанным ранее: load [ИМЯ] [-ПАРАМЕТРЫ] [ПЕРЕМЕННЫЕ]
Из файла ИМЯ считываются только переменные, перечисленные в списке ПЕРЕМЕННЫЕ, а отсутствие списка вызовет считывание всех величин, сохраненных в файле ИМЯ.
Данные из ASCII-файла с именем NAME.ext можно считать по команде load NAME.ext
Сами данные должны быть организованы в виде массива с одинаковым числом элементов во всех строках, иначе при считывании данных будет выведено сообщение об ошибке. По прочтении данные будут помещены в массив с именем NAME.
Обращаться к командам load и save можно так же, как к функциям.
Использование вызова функции удобнее, если аргумент-строка формируется из нескольких частей. Например, можно предложить следующий фрагмент для считывания и последующей обработки данных дневных наблюдений за июнь, записанных в файлах Junel.dat, June2.dat и т.д.
To же самое, но с потерей эффективности (работает интерпретатор), можно реализовать при помощи следующего фрагмента: » for n=l:30. s=[«load June» int2str(n)».dat»].eval(s).
% Обработка данных end
Записать и считать переменные с общей частью в имени можно при помощи знака «*», например, чтобы сохранить все переменные, начинающиеся с сочетания abc, достаточно команды
» save abc*
2.1.2 Форматные операции ввода-вывода
Для операций ввода-вывода с использованием форматов данных и работы с бинарными файлами применяются команды, напоминающие стандартные функции языка С.
Перед началом записи или чтения нужный файл следует открыть при помощи команды
FI=fopen ("NAME". "FLAG")
Имя файла NAME должно содержать путь, если файл берется из каталога, не указанного в списке каталогов Path Browser. Строковая переменная " FLAG" определяет тип файла и способ работы с ним: " t" - текстовый файл, " b" - бинарный файл, " г" - чтение, V - запись, " г " - чтение и запись одновременно, " а" - добавление в конец файла. Например, для чтения бинарного файла следует задать флаг " rb", для записи текстового - "wt". Полученный в результате выполнения операции fopen числовой идентификатор FI используется в качестве параметра для функций fread и fwrite. Если открыть файл не удалось, то FI=-1. Чтобы закрыть файл, надо выполнить команду fclose(FI). Список команд ввода-вывода приведены в таблице 2.1.
Таблица 2.1
Имя Назначение
Fopen Открытие файла
Fclose Закрытие файла
Fread Считывание данных из файла
Fwrite Запись данных в файл f scanf Считывание форматированных данных из файла
Fprintf Запись данных в файл или вывод на экран
Fgetl Считывание строки из файла без служебных символов
Fgets Считывание строки из файла со служебными символами dlmread Чтение данных с разделителями из текстового файла textread Чтение форматированных данных из текстового файла
Команда fread применяется для чтения бинарных файлов: [AXOUNT]=fread (FI.SIZE."PREC"."SKIP")
Здесь А - имя матрицы, куда заносятся считываемые данные, a COUNT - число прочитанных элементов. Если дополнительный параметр SIZE отсутствует, то считывается весь файл, целое число N в качестве SIZE задает считывание N элементов и формирование вектора-строки, а при указании в качестве SIZE вектора [М, N] формируется матрица размера [M.N], причем параметр N может принимать значение inf. Параметр "PREC задает число бит для записи чисел. Например, текстовая строка "float64" указывает, что данные следует записывать в формате двойной точности, по 8 байт на число, а четырехбайтовый формат записи целых чисел задается строкой "integer*4". Перечень допустимых форматов можно получить по справке help fread. Дополнительный параметр "SKIP" определяет число байтов, которое должно быть пропущено после считывания очередного элемента.
Команда fwrite используется для записи бинарных файлов: COUNT=fwrite (FI, PARA."PREC."SKIP")
Здесь FI - идентификатор файла, PARA - имя записываемой переменной, а назначение остальных параметров то же, что и для команды fread.
Если же при чтении не определить структуру матрицы или указать иной формат для чтения, то результатом будет вектор-строка из элементов, число которых и сами значения определяются форматом считывания.
Для считывания части данных используется функция f seek (FI, NUM." FLAG"), служащая для перемещения на целое число NUM позиций, причем положительное NUM означает продвижение к концу файла, а отрицательное - к началу файла. После открытия файла указатель установлен на первый байт. После считывания очередного числа указатель переместится на столько байтов, каков формат чтения. Текущее положение выводится по команде ftell (FI). Для проверки достижения конца файла служит команда feof (FI). Для возврата в начало файла можно использовать функцию frewind (FI).
Бинарные файлы являются просто потоками байтов, а для работы с текстом, разбитым на строки, используются текстовые файлы. Такие файлы могут содержать как текст, так и числовую информацию, которую для записи предварительно следует перевести в строковые переменные при помощи команд num2str и int2str. Для чтения информации из текстовых файлов применяются функции fgetl, fgets и fscanf. Для записи служит функция fprintf, причем если файловый идентификатор равен единице или отсутствует, то вывод идет на экран. Для чтения и записи применяются форматные спецификации. Спецификации при вводе и выводе описаны в таблице 2.2.
Таблица 2.2
Код Описание
% d Чтение целого числа (при выводе - переменная double)
% u Чтение положительного целого числа (при выводе - переменная double)
% f Чтение вещественного числа (при выводе - переменная double)
% s Чтение строки с пробелами (при выводе - переменная типа cellstr)
% q Чтение строки (при выводе - переменная типа cellstr)
% c Чтение символов, разделенных пробелами (при выводе - переменная типа cellstr)
2.1.3 Команды для работы со стандартными файлами
Для считывания аудио- и видеофайлов в стандартах au, wav и avi имеются соответственно команды auread, wavread и aviread. Аналогично для записи используются команды: auwrite, wavwrite и avi file. Это позволяет применять MATLAB для обработки и подготовки звуковой и видеоинформации.
В MATLAB поддерживается работа с данными электронных таблиц Lotus 123 и Excel. Для считывания и записи файлов в стандарте Lotus 123 используются команды wklread nwklwrite, а для считывания таблиц Excel имеется команда xlsread.
Кроме того, в MATLAB существует возможность работы с данными в формате hdf (Hierarchical Data Format). Этот машинно-независимый формат разработан для хранения научных данных.
2.2 Объектно-ориентированное программирование
Современное объектное программирование основано на введении новых типов данных (классов) и определении операций для них. В системе MATLAB существуют следующие стандартные классы: числовые массивы (double), двумерные разреженные матрицы (sparse), строки или массивы символов (char), структуры или массивы записей (struct), массивы ячеек (cell). Кроме того, некоторые расширения MATLAB используют свои классы.
В MATLAB тип переменной или соответствующий класс не объявляется и не описывается, а определяется автоматически при создании объекта. Например, при задании матрицы А=еуе(5) создается объект класса double, а по команде As=sparse(A) производится преобразование матрицы А в разреженную матрицу As, то есть создается новый объект класса sparse.
Объекты нового класса создаются при помощи специальной m-функции - конструктора класса, имя которой совпадает с названием класса. Для нового класса также нужно определить методы обработки объектов, написав соответствующие функции. Конструктор класса и функции обработки должны размещаться в каталоге, имя которого начинается с символа «@», а далее идет имя класса. Каталог класса является подкаталогом для каталога, описанного в пути доступа. Объекты класса реализуются в виде структур, поля которых видны только для методов, работающих с данным классом. При этом возможно доопределение существующих встроенных операторов, например, чтобы задать операцию умножения для объектов нового класса, в каталоге класса следует написать функцию mtimes.
Так, в каталоге symbolic находятся три подкаталога: @char, @sym, @symlibs. В подкаталоге @sym содержится конструктор класса - файл sym.m и множество других файлов, реализующих операции с символьными переменными.
При вызове конструктора динамически создается объект. Если конструктор вызывается без аргументов, то создается шаблон объекта, обычно с пустыми полями. Если на вход конструктора подается объект того же класса, то конструктор обычно возвращает сам введенный объект. Для проверки принадлежности объекта OBJ классу CLASS служит команда 1sa (0BJ.CLASS)
Функция class (MATLAB различает большие и малые буквы) определяет класс объекта при вызове class(OBJ) и переводит структуру S в объект класса CLASS при обращении class (S.CLASS). Команды работы с классами описаны в таблице 2.3.
Таблица 2.3
Команда Назначение
Class Определение класса или создание объекта
Isa Определение принадлежности объекта к классу isobject Выявление принадлежности объекта к какому-нибудь классу methods Вывод списка методов для данного класса inferiorto Указание подчиненности класса по отношению к некоторым классам superiorto Указание старшинства класса по отношению к некоторым классам
При работе с объектами учитываются иерархия (старшинство) и наследование, когда объекты одного класса приобретают свойства других классов. При простом наследовании (один класс-родитель) дочерний объект включает все поля родительского объекта, и при работе с ним можно обращаться к методам родительского класса, кроме того, добавляются специфические для дочернего класса поля. При этом методы нового класса не могут применяться к объектам родительского класса. Для реализации множественного наследования (несколько классов родителей) применяется команда class (S, CLASS, PARENTL, PARENT2….), здесь из структуры S создается объект класса CLASS, наследующий свойства классов PARENT1, PARENT2.
В дополнение к наследованию поддерживается объединение частей в одно целое или агрегирование, то есть использование объектов в качестве полей для других объектов.
Чтобы использовать для объектов нового класса знаки основных математических операций, создается в каталоге функции с именами, которые отвечают за операции сложения, матричного умножения и т.д. Список имен математических операций можно получить по команде help*.
2.3 Отладка
Если в процессе выполнения программы возникает ошибка, то MATLAB выводит диагностическое сообщение и номер строки, в которой, по мнению пакета, произошла ошибка. Эта информация полезна, но может быть довольно приблизительной, поэтому желательно в процессе отладки программы иметь доступ к переменным для контроля вычислений и просмотра данных.
Для отладки программ и m-функций могут быть полезны следующие простые рекомендации: Удалите подавляющие вывод данных на экран точки с запятой или замените их запятыми. Тогда анализ промежуточных результатов может указать причину неверной работы.
Расставьте по тестируемому тексту операторы keyboard. При выполнении этих операторов MATLAB приостановит работу, выведет приглашение, и в режиме интерпретатора можно будет анализировать промежуточные результаты (выводить содержимое интересующих переменных, переопределять величины).
Превратите m-функцию в файл script. Закомментируйте описания в начале файла и выполните полученный файл.
Кроме того, в MATLAB имеются специальные возможности для тестирования программ: набор команд отладки и средства редактора-отладчика medit. В этом случае отладка заключается в расстановке точек останова, прогоне программы от точки к точке и просмотре данных. Командный режим отладки является универсальным, поскольку одинаков для различных вычислительных систем, но для среды Windows режим отладки с использованием редактора medit выглядит нагляднее и проще.
2.3.1 Отладка в командном режиме
Если отладку проводить при помощи команд среды MATLAB, то для установки и снятия точек останова применяются команды dbstop и dbclear. Каждая из этих команд имеет несколько вариантов применения, в частности команда dbstop еще и задает режимы отладки, a dbclear отменяет назначения. Команды отладки приведены в таблице 2.4.
Таблица 2.4
Команда Описание
Dbstop Определить точку останова
Dbclear Удалить точку (точки) останова
Dbcont Продолжить выполнение
Dbstep Выполнить команду отладки
Dbquit Завершить отладку dbstack Список точек останова
Полный список команд отладки с перечислением вариантов обращения можно посмотреть в системе справки (help debug), документации MATLAB или книгах.
2.3.2 Редактор medit и отладка
Редактор-отладчик medit обеспечивает удобную среду для подготовки и отладки m - файлов в MATLAB. Файл редактора medit.exe находится в директории \bin и может быть вызван из командного окна MATLAB (пункты New и Open меню File, запуск команды edit) или запущен как обычная программа. Редактор-отладчик предоставляет доступ к текстам и данным, в нем можно редактировать m-файлы, вызывать для просмотра и изменения матричные переменные, организовывать отладку программ и функций.
Для просмотра данных из рабочей области следует вызвать Workspace Browser и выбрать (щелкнуть мышкой) нужную переменную. В редакторе откроется новый документ и появится таблица (матрица) с данными, которые можно просмотреть и переопределить. Эта возможность пока предоставляется для скалярных, векторных и матричных величин, так что многомерные массивы и структуры придется просматривать, запуская из командной строки вывод самой переменной или какой-то ее части.
Если редактор medit вызван из командного окна, то в процессе вычислений редактирование становится невозможным. Чтобы в среде Windows подготавливать код (файлы сценариев и функций) параллельно вычислениям, можно запустить редактор medit автономно от MATLAB, но в этом случае просмотр данных будет невозможен.
Рассмотрим отладку с использованием средств редактора-отладчика. Назначения пунктов меню Debug приведены в таблице 2.5.
Step In F11 Построчное исполнение с заходом в вызываемые функции
Single Step F10 Построчное исполнение
Continue Выполнение до следующей точки останова
Quit Debugging Завершить отладку
Для отладки m-функции вызовем из командного окна редактор medit и считаем нужный файл. Чтобы указать точку останова в тексте функции, установим курсор на нужной строке и выполним пункт Set/Clear Breakpoint или щелкнем по отвечающему этому пункту значку. После расстановки точек останова запустим отлаживаемый файл. Пакет MATLAB выполнит все команды до первой точки и сделает паузу. Ниже можно просмотреть значения переменных. Пунткты указатели из меню откладки Debug (Таблица 2.6).
Таблица 2.6
Stop If Error Остановка при ошибке
Stop if Warning Остановка при предупреждающем сообщении
Stop if NAN or Inf Остановка при появлении нечисловой или бесконечной переменной
2.4 Разработка mex-файлов
Для ускорения вычислений в MATLAB можно использовать mex-файлы - написанные на С или Фортране и откомпилированные процедуры. Тексты на языке MATLAB (файлы с расширением.m) машинно-независимы, а подготовленные для одной платформы mex-файлы (Matlab EXTERNAL) должны быть откомпилированы заново при переходе к другой среде. Для каждой из платформ подготовленные mex-файлы имеют свое расширение, например: dll для Windows, mexlx для Linux, mexsol для Solaris, mexalp для Alpha.
Вызываются mex-файлы как обычные m-файлы, причем если интерпретатору встретилось некоторое имя функции, то вначале ищется mex-файл с этим именем в каталогах, определенных списком MATLAB search path, и только при его отсутствии начинается поиск т-файла.
Программирование мех-файлов заключается в написании процедур на С или Фортране и подготовке переходного блока для получения данных из среды MATLAB и возвращения результата. MATLAB оперирует с массивами, поэтому все переменные - скаляры, векторы, матрицы, строки, массивы ячеек, структуры и объекты - реализованы в виде массивов. В программе на С массив MATLAB должен быть объявлен типом MXARRAY, в нем будут содержаться размерности, сами данные, сведения об их типе (вещественные или комплексные), индексы ненулевых элементов для разреженных (sparse) матриц, число полей и их имена для структуры и объекта. Заметим, что из m-файла при помощи имеющегося в MATLAB компилятора lcc можно приготовить текст на языке С.
При подготовке мех-файлов следует определить используемый компилятор, для чего надо выполнить команду
» мех - setup
Если на машине установлено несколько компиляторов, то MATLAB предложит выбрать, какой из них будет использоваться далее для компиляции. Например, если на машине установлен только компилятор Borland C/C , то будет предложен следующий выбор: Select a compiler: [1] Borland C/C version 5.02 in C:\BC5
[2] Lcc С version 2.4 in C:\MATLABR12\sys\lcc
[0] None
Compiler: Здесь lcc - собственный компилятор MATLAB. Для компиляции текстов на Фортране также следует определить соответствующий компилятор.
В комплекте поставки MATLAB имеются примеры оформления мех-файлов. Так, в подкаталоге \extern\examples\mex находятся файлы на С (yprime.c) и Фортране (yprimef.f, yprimefg.f). Чтобы запустить компиляцию примера на С, надо перейти в подкаталог с примером и вызвать команду мех. Например, чтобы откомпилировать функцию yprime.с, необходимо выполнить следующие команды: cd([matlabroot «\extern\examples\mex»]) mex yprime.c
Взаимодействие интерпретатора с mex-файлом осуществляется следующим образом. Пусть func - m-функция, которая должна быть реализована в виде мех-файла. Обращение [C.D] - func (A, B) указывает MATLAB, что параметры А, В являются входными, а параметры С, D - выходными. Заголовок принимающей функции на языке С должен иметь имя MEXFUNCTION и оформляться следующим образом:
#include void MEXFUNCTION ( int nlhs. MXARRAY *plhs[]. int nrhs. const MXARRAY *prhs[])
Переменные pihs и prhs есть векторы, содержащие указатели на выходные и входные параметры. Чтобы воспринять входные данные, следует обратиться к функции MXGET и использовать указатели prhs[0], prhs[l] и т.д. В случае скалярной переменной можно работать непосредственно с ее значением, получить которое позволяет функция MXGETSCALАГ. Для оформления возвращаемых параметров нужно использовать функцию MXCREATE.
Для компиляции mex-функции следует запустить команду тех. При обнаружении компилятором ошибки будет выведено диагностическое сообщение и указан номер ошибочной строки. В случае нормального завершения компиляции появится файл с именем исходного файла и расширением dll.
При выполнении mex-задания используются параметры, перечисленные в файле параметров mexopts, например mexopts.bat для Windows. Параметры можно также указывать в командной строке.
Из мех-функций можно обращаться и к другим командам MATLAB; для этого имеется специальная функция MEXCALL MATLAB с пятью параметрами. Первые четыре обеспечивают интерфейс и аналогичны параметрам функции MEXFUNCTION, а пятый содержит имя вызываемой команды.
В среде Windows скомпилированный машинный код mex-файла находится в файле динамической библиотеки (Dynamic Link Library) с расширением.dll. Для отладки mex-функций можно использовать среду системы, в которой компилируется функция, например Developer Studio для Visual C Microsoft. Параметры команды мех (Таблица 2.7).
Таблица 2.7
Параметр Назначение
-с Компиляция без редактирования связей
-h Справка по команде тех
-g Включение отладочных символов в тех-фунццию
-I PATH Указание пути (PATH) для компилятора
-О Оптимизация мех-функции
-output NAME Указание имени (NAME) создаваемой тех-функции
-v Печать установок компилятора и редактора связей
Более подробно программирование и отладка mex-функций описаны в фирменном руководстве Application Program Interface Guide.
Вывод
В курсовой работе рассмотрена среда MATLAB, детально изучены основные команды и операционная программа в среде MATLAB. Изученные и использованные при написании u-файлов, команды ввода, команды вывода, команды LOAD и SAVE, команды для работы с файлами. Рассмотрены основные принципы объектно-ориентированного программирования в среде MATLAB, изучены основные возможности отладки в среде MATLAB. Среда MATLAB представляет собой очень удобную математическую среду, позволяющую работать с матричными файлами. В MATLAB несложно запрограммировать различные процедуры, обратные матрицы и построенные графики, сложные функции.
Список литературы
1. Говорухин В. Компьютер в математическом исследовании. Учебный курс / В. Говорухин, В. Цибулин. - Спб.: Питер, 2001. - 624 с.
2. Дьяконов, В.П. Matlab 6. Учебный курс / В.П. Дьяконов. - СПБ.: Питер, 2001. - 592 с.
3. Гультяев, А. Визуальное моделирование в среде Matlab: учебный курс / А. Гультяев. - СПБ.: Питер, 2000. - 432 с.
4. Потемкин, В.Г. Matlab 5 для студентов / В.Г. Потемкин. - М.: Диалог-МИФИ, 1998. - 287 с.
5. Мартынов, Н.Н. Matlab 5.x. Вычисления, визуализация, программирование / Мартынов Н.Н., Иванов А.П. - М: Кудиц-образ, 2000. - 336 с.