Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонюк и др.doc
Скачиваний:
45
Добавлен:
07.11.2018
Размер:
32.99 Mб
Скачать
    1. Написание расширений matlab на языке c

Существует несколько способов взаимодействия системы MATLAB с внешними программами:

  • Во-первых, можно написать расширение MATLAB на обычных языках программирования, таких как С/С++, Fortran и т.п.

  • Наоборот, можно вызвать вычислительное ядро MATLAB из своей программы и получить результат вычислений среды MATLAB в свою программу. В этом случае MATLAB выступает как своего рода вычислительный сервер для внешней программы.

  • Средой MATLAB можно управлять при помощи команд DDE (Dynamic Data Exchange) или ActiveX (OLE) Automation.

  • Наконец, можно просто обмениваться данными со средой MATLAB через MAT-файлы, структура которых описана в документации к системе.

Нетрудно видеть, что предоставляемый набор способов взаимодействия с системой внешних программ является весьма полным и гибким. Практически все эти способы описаны в документации к системе, однако, так как наиболее часто используется первый способ, сосредоточимся на нем.

Обычно, пользователь-программист работает с системой MATLAB непосредственно, кодируя необходимые алгоритмы на встроенном языке MATLAB. Встроенный язык весьма удобен для написания математических алгоритмов – писать и отлаживать на нем программу обычно занимает значительно меньше времени, чем на обычных языках программирования.

Однако, довольно часто эффективность подобных программ оставляет желать лучшего. Как правило, подобная ситуация возникает, когда алгоритм плохо векторизуется, например, при обработке матриц нельзя выразить этот алгоритм, пользуясь векторными операторами языка MATLAB, и приходится писать вложенные циклы, перераспределять память и т.п. В этом случае программа на языке С будет исполняться во много раз быстрее аналогичной программы на языке MATLAB. А ведь довольно часто время счета математической задачи может исчисляться сутками.

Кроме того, иногда возникают ситуации, когда те или иные сложные алгоритмы уже были реализованы на других языках программирования. В этом случае также будет быстрее не переписывать весь алгоритм на языке MATLAB, но написать относительно небольшой «переходник» от MATLAB к уде существующему на языке С модулю и вызвать его из среды MATLAB напрямую.

Для того, чтобы написать модуль, расширяющий набор функций MATLAB, нужно создать обычную динамическую библиотеку (DLL) для Microsoft Windows со специальным набором функций (интерфейсом). Данная библиотека может быть создана при помощи многих компиляторов языка С/С++, однако, наиболее часто используется компилятор разработки компании Microsoft – Visual C++, одной из последних версий которого (5.0) мы и воспользуемся для подготовки наших примеров.

В документации по системе MATLAB для подобных расширений употребляется термин MEX-файл (Matlab EXtension), и сама MATLAB по этому расширению имени файла может определить, что данный модуль является ее расширением. Хотя, специально назначать MEX в качестве расширения имени файла необязательно, MATLAB может прекрасно работать и со стандартным расширением подобных динамических библиотек – DLL.

Папка \matlab\extern на диске, на котором установлена система, содержит все необходимые файлы-заголовки для программ на С (каталог \matlab\extern\include), а также несколько примеров модулей (\matlab\extern\examples), реализующих некоторые расширения системы, которые приведены целиком в виде исходных текстов программ на С.

Кроме того, имеется папка \matlab\extern\src в которой приведен исходный текст некоторых вспомогательных функций, весьма облегчающий отладку модулей расширения MATLAB.