- •Программирование в среде Matlab Работу подготовил студент группы мп-31 Самсоненко Егор Введение
- •1. Работа в среде matlab
- •1.1 Командное окно
- •1.2 Система меню
- •1.3 Интерфейс matlab
- •2. Программирование в среде matlab
- •2.1 Команды ввода – вывода
- •2.1.1 Команды load и save
- •2.1.2 Форматные операции ввода-вывода
- •2.1.3 Команды для работы со стандартными файлами
- •2.2 Объектно-ориентированное программирование
- •2.3 Отладка
- •2.3.1 Отладка в командном режиме
- •2.3.2 Редактор medit и отладка
- •2.4 Разработка mex-файлов
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, и только при его отсутствии начинается поиск т-файла.
Программирование mех-файлов заключается в написании процедур на С или Фортране и подготовке переходного блока для получения данных из среды MATLAB и возвращения результата. MATLAB оперирует с массивами, поэтому все переменные – скаляры, векторы, матрицы, строки, массивы ячеек, структуры и объекты – реализованы в виде массивов. В программе на С массив MATLAB должен быть объявлен типом mxArray, в нем будут содержаться размерности, сами данные, сведения об их типе (вещественные или комплексные), индексы ненулевых элементов для разреженных (sparse) матриц, число полей и их имена для структуры и объекта. Заметим, что из m-файла при помощи имеющегося в MATLAB компилятора lсс можно приготовить текст на языке С.
При подготовке mех-файлов следует определить используемый компилятор, для чего надо выполнить команду
» mех – 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 имеются примеры оформления mех-файлов. Так, в подкаталоге \extern\examples\mex находятся файлы на С (yprime.c) и Фортране (yprimef.f, yprimefg.f). Чтобы запустить компиляцию примера на С, надо перейти в подкаталог с примером и вызвать команду mех. Например, чтобы откомпилировать функцию yprime.с, необходимо выполнить следующие команды:
cd([matlabroot «\extern\examples\mex»]) mех yprime.c
Взаимодействие интерпретатора с mex-файлом осуществляется следующим образом. Пусть func – m-функция, которая должна быть реализована в виде mех-файла. Обращение [C.D] – func (A, B) указывает MATLAB, что параметры А, В являются входными, а параметры С, D – выходными. Заголовок принимающей функции на языке С должен иметь имя mexFunction и оформляться следующим образом:
#include <math.h> 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. Параметры можно также указывать в командной строке.
Из mех-функций можно обращаться и к другим командам MATLAB; для этого имеется специальная функция mехСаll MATLAB с пятью параметрами. Первые четыре обеспечивают интерфейс и аналогичны параметрам функции mexFunction, а пятый содержит имя вызываемой команды.
В среде Windows скомпилированный машинный код mex-файла находится в файле динамической библиотеки (Dynamic Link Library) с расширением.dll. Для отладки mex-функций можно использовать среду системы, в которой компилируется функция, например Developer Studio для Visual C++ Microsoft. Параметры команды mех (Таблица 2.7).
Таблица 2.7
Параметр |
Назначение |
-с |
Компиляция без редактирования связей |
-h |
Справка по команде тех |
-g |
Включение отладочных символов в тех-фунццию |
-I PATH |
Указание пути (PATH) для компилятора |
-О |
Оптимизация mех-функции |
-output NAME |
Указание имени (NAME) создаваемой тех-функции |
-v |
Печать установок компилятора и редактора связей |
Более подробно программирование и отладка mex-функций описаны в фирменном руководстве Application Program Interface Guide.
