Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в среде Matlab.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
104.59 Кб
Скачать

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.