Документация
Можно использовать компилятор MinGW-w64, чтобы создать файлы MEX и автономный механизм MATLAB ® и приложения MAT-файла. Чтобы установить компилятор, используйте меню Add-Ons, описанное в, Получают Дополнения. Ищите MinGW или выберите из Features. Для получения дополнительной информации см. статью File Exchange «Поддержка MATLAB Компилятора C/C++ MinGW-w64».
Создание yprime.c Пример
Можно протестировать компилятор MinGW ® путем создания примера yprime.c . Скопируйте исходный файл в перезаписываемую папку.
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')
Если вам только установили компилятор MinGW в вашей системе, команда mex автоматически выбирает MinGW. Перейдите к следующему шагу. Однако, если у вас есть несколько C или компиляторы C++, используйте mex -setup , чтобы выбрать MinGW.
mex -setup
Создайте файл MEX.
mex yprime.c
MATLAB отображает “Создание с” сообщением, показывающим, какой компилятор использовался, чтобы создать файл MEX.
yprime(1,1:4)
Папка установки MinGW не может содержать пробел
Не устанавливайте MinGW в месте с пробелами в пути. Например, не используйте:
C:\Program Files\mingw-64
Вместо этого используйте:
C:\mingw-64
Обновление файлов MEX, чтобы использовать компилятор MinGW
Если вам создали исходные файлы MEX с различным поддерживаемым MATLAB компилятором, вы можете должны быть изменить код, чтобы создать с компилятором MinGW. Например:
- Файлы библиотеки ( .lib ), сгенерированные Microsoft ® Visual Studio ® , не совместимы с MinGW.
- Объектная очистка не возможна, когда исключение выдается с помощью функции mexErrMsgIdAndTxt от файлов MEX C++, приводя к утечке памяти.
- Неперехваченное исключение в файлах MEX C++, скомпилированных с MinGW, заставляет MATLAB отказывать.
- Файлы MEX с переменными, содержащими большие объемы данных, не могут быть скомпилированы, когда компилятор исчерпывает память.
Похожие темы
- Дополнения
- Поиск и устранение проблем и Ограничения при компиляции Файлы MEX C/C++ с MinGW-w64
Внешние веб-сайты
- Поддерживаемые и совместимые компиляторы
- https://www.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c++-compiler
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2019 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Способы подключения к базе программной среды MatLab и возможности MatLab Compiler Текст научной статьи по специальности «Компьютерные и информационные науки»
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Евстропов Василий Александрович, Швец Сергей Викторович
Статья посвящена исследованию возможности написания дополнительного модуля к программному продукту MatLab, позволяющего использовать графическую визуализацию при работе. Исследованы способы подключения к программной среде MatLab и методы написания с использованием различных языков программирования. Изучены основные функциональные возможности MatLab Compiler.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Евстропов Василий Александрович, Швец Сергей Викторович
Технология использования MATLAB-программ в средах визуального программирования C/C++
Технология создания приложений на языке с++, использующих библиотеку функций Matlab
Использование распределенных вычислений для повышения эффективности обучения адаптивной нейро-нечеткой сети
Исследование возможности создания модуля визуализации и его подключения к базе программной среды MatLab
Динамически загружаемые библиотеки: структура, архитектура и применение
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Methods of the Connection Options to the Base of Matlab and Potentials of Matlab Compiler
The article is dedicated to the possibility of creating an additional module to the program package MatLab, that allows using the graphical visualization while working. Ways to connect to the MatLab program package, and methods of creating a variety of programming languages have been explored. Study of the basic functionality of the MatLab Compiler has been carried out.
Текст научной работы на тему «Способы подключения к базе программной среды MatLab и возможности MatLab Compiler»
СПОСОБЫ ПОДКЛЮЧЕНИЯ К БАЗЕ ПРОГРАММНОЙ СРЕДЫ MATLAB И ВОЗМОЖНОСТИ MATLAB COMPILER
В. А. Евстропов, С. В. Швец
Хакасский государственный университет им. Н. Ф. Катанова
Статья посвящена исследованию возможности написания дополнительного модуля к программному продукту MatLab, позволяющего использовать графическую визуализацию при работе. Исследованы способы подключения к программной среде MatLab и методы написания с использованием различных языков программирования. Изучены основные функциональные возможности MatLab Compiler.
Ключевые слова: SCADA-система, способы подключения к MatLab, модуль MatLab.
Современные условия конкурентной среды делают необходимым использование информационных технологий для повышения качества и эффективности принимаемых управленческих и технологических решений.
Для развития предприятий и повышения качества продукции требуется совершенствование систем сбора, обработки и хранения информации, причём эти системы существенно разнятся в зависимости от вида деятельности. Из всего многообразия видов деятельности предприятия наиболее значимыми и подлежащими оптимизации можно выделить финансово-экономическую деятельность и производственный процесс.
Требования к информационным системам (ИС) финансово-экономической деятельности для различных областей, как правило, единообразны.
Производственная деятельность более специфична в силу использования различного сырья, технологий, способов его обработки, выпуска конечной продукции, и поэтому необходимо контролировать технологические цепочки на всех этапах. Даже незначительные сбои могут привести к авариям и финансовым потерям, вследствие чего контроль нужно осуществлять непрерывно и в реальном времени, что требует от ИС надёжности и высокого качества [1].
Необходимость и способы интеграции в среду MatLab
В настоящее время разработано достаточно большое количество отраслевых и производственных автоматизированных систем управления (АСУ), реализующих автоматизированный сбор и обработку информации, необходимой для принятия решений по управлению объектом.
В связи с решением сложных вычислительных задач в программных средах появляется необходимость использования возможностей уже существующих информационно-алгоритмических ресурсов (ИАР), таких как пакеты решения оптимизационных задач, дифференциальных уравнений, символьных вычислений и т. п. При этом возникает необходимость предоставления прозрачного доступа к подобным ресурсам на основе существующих технологий распределённых вычислений.
Под ИАР понимается типизированный ресурс, предоставляющий внешний интерфейс, соответствующий его типу и функциональности. Реализация такого унифицированного интерфейса позволяет интегрировать ресурс в распределённую вычислительную среду и многократно использовать его как готовый компонент [2]. Однако большинство существующих в настоящее время программных пакетов, предназначенных для научных расчётов, не имеют готовых реализаций пользовательских интерфейсов, позволяющих работать с ними как с компонентами, в рамках известных технологий распределённых вычислений. Тем не менее, взаимодействие внешних программ с такими программами, как правило, может быть реализовано посредством предоставляемого программного интерфейса (API) или иного подобного механизма, например, путём ввода и вывода данных через файлы. Такие возможности используются для создания специфических программных адаптеров, позволяющих предоставлять доступ к каждому ресурсу в соответствии с его определённым типом. Согласно терминологии разрабатываемой в настоящее время платформы IARnet, подобные адаптеры называются агентами удаленного доступа. Задачей агентов доступа является обеспечение унифицированного интерфейса для интеграции ИАР в распределённую вычислительную среду, скрывая в то же время присущие лишь ему особенности взаимодействия с конкретным ресурсом [3].
Довольно часто у оператора возникает необходимость произвести математические операции. Программный пакет MatLab позволяет решать сложные задачи, но в данном пакете возможность создания удобного пользовательского интерфейса реализована не полностью. В связи с этим необходимо создание дополнительного модуля MatLab, который должен работать наиболее удобным образом (в данном случае для удобства работы со SCADA-системой — в оконном режиме, с функциями советчика). Для управления технологическими процесса-
ми подобный модуль должен работать в реальном времени. Для программного пакета MatLab работа в реальном времени обеспечивается операционной системой, в нашем случае в виду имеется операционная система семейства Windows.
Специфика интегрирования MatLab позволяет пользователям Windows-приложений наиболее эффективно использовать инструменты данного пакета программ для решения оптимизационных задач любой размерности, надёжных результатов расчётов; визуализации различных геометрических поверхностей, создания интеллектуальных систем управления проектами.
В дополнение к обширным встроенным вычислительным возможностям MatLab, как современная инженерная система, имеет собственную среду разработки. Программы и скрипты, записанные в m-файлах, являются основным средством разработки проектов пользователем в границах данного программного пакета. Также MatLab содержит довольно развитые инструменты отладки: точки останова, пошаговое выполнение, отображение текущих значений переменных. Более того, в последних версиях появились дополнительные средства (Directory Reports, M-Lint Code Checker), необходимые для повышения производительности кода и его анализа.
Язык MatLab, на котором написана значительная часть самого пакета, является высокоуровневым языком программирования, вобравшим в себя конструктивы Pascal, Basic, Fortran, С. Здесь поддерживаются 15 базовых типов данных, универсальных для всех современных средств разработки (символьные, численные, логические). Специфическими для MatLab являются структуры и клеточные массивы (матрицы, элементами которых могут быть данные произвольных типов).
В MatLab можно использовать и объектно-ориентированный подход. Пакет предоставляет возможности для создания классов с поддержкой механизмов наследования, агрегирования, инкапсуляции данных. Помимо внутренних классов MatLab, введена полная программная поддержка классов языка Java, что существенно расширяет возможности MatLab, в частности, даёт возможность интегрировать MatLab с другими системами [4].
Возможности MatLab Compiler
Указанных средств, ввиду жесткой привязки программы на языке MatLab к самому пакету, недостаточно для создания высокопроизводительных приложений. Поэтому программный продукт включает в себя MatLab Compiler, позволяющий любую программу на языке MatLab преобразовать в исполняемый модуль, подключаемую библиотеку С и С++ (DLL для среды Windows), надстройку Microsoft Excel и COM-объект (для создания двух последних необходимы модули Builder for Excel и Builder for COM соответственно). Все названные приложения не требуют MatLab или его компонентов для своей работы.
Компилятор MatLab выполнен в виде консольной утилиты, на вход которой подаются m-файлы, а на выходе генерируется исходный код на C/C++.
MatLab Compiler может формировать следующие виды кода:
— Код на C/C++, комбинируемый с другими модулями, необходимый для создания автономных прикладных систем (независимых приложений). Эти приложения не требуют MatLab во время выполнения; они могут исполняться, даже если MatLab не установлен в системе. Но, чтобы создавать исполняемые модули, MatLab Compiler требует наличия MatLab C/C++ Math Library (математической библиотеки MatLab), которая включает в себя базовые математические и аналитические средства MatLab. Компилятор также требует MatLab C/C++ Graphics Library, чтобы создавать независимые приложения, использующие вызов графических функций MatLab.
— Разделяемые С-библиотеки (динамически подключаемые библиотеки, или DLL для Microsoft Windows 95/98/NT/2000) и статические C++-библиотеки. Они могут использоваться без MatLab, но при наличии в системе MatLab C/C++ Math Library.
Одним из наиболее важных инструментов является внешний интерфейс, т. е. функция для взаимодействия с внешними приложениями и операционной системой. Возможности MatLab позволяют обращаться к DLL, внешнему коду на языках C и Fortran, COM-объектам, а также осуществлять обмен по протоколу DDE.
Для подключения к среде достаточно написать обычную динамическую библиотеку (DLL) с использованием специального интерфейса. При этом следует помнить об основных недостатках использования динамических библиотек, таких как:
1) недоступность использования пространства имён;
2) большой, по размерам, программный код в случаях:
— реализации динамической загрузки библиотек;
— реализации взаимодействия модулей посредством классов — за счёт использования неявных структур (декскрипторов).
Кроме того, MatLab использует специфичные dll. Их специфика заключается в том, что, помимо собственно файла динамической библиотеки (.dll), необходим ещё и файл формата .ctf. Этот файл содержит сжатый архив
m-файлов, являющийся набором функций пользователя, а также функции MatLab, которые используются приложениями пользователя.
Чтобы создать dll-библиотеку MatLab, для интеграции нужно настроить среду, посредством которой будет создаваться модуль (линкер). Для начала нужно установить среду выполнения MCR (MatLab Component Runtime). Это набор dll-библиотек для полной поддержки языка MatLab. Для настройки линкера в командном окне MatLab используется команда mbuild -setup. Программа mbuild определяет местоположения компилятора ANSI C или C++ и копирует данные о его расположении в каталог, который содержит пользовательские профили. Впоследствии, когда MatLab Compiler обращается к mbuild для вызова компилятора C и C++, записанные данные используются для его поиска. Также программа mbuild определяет расположение библиотек, которые могут использоваться для создания приложения. В качестве примера таких библиотек можно привести MatLab C/C++ Math Library, MatLab C/C++ Graphic Library, а также библиотеку ANSI C или C++. После настройки среды можно приступать непосредственно к созданию программы.
Компилятор программного пакета MatLab распознает только функции; следовательно, каждый сценарий должен начинаться с function (желательно заканчиваться end) и быть отдельным m-файлом.
Помимо вышеуказанного, необходимо также использовать DLL инъекцию. DLL инъекция позволяет выполнять программу в адресном пространстве уже запущенного процесса. Многие используют инфицирования для написания вирусов, выполнения вредоносных действий для системы и т. п. В нашем случае приём будет использоваться для нового модуля [5].
Когда существовали одни лишь символьные терминалы, ввод и вывод осуществлялся довольно просто: программы использовали scanf для ввода и printf для вывода. Графический пользовательский интерфейс (GUI) использует более сложные процедуры ввода-вывода. MatLab C Math Library создана таким образом, что может работать как с символьным терминалом, так и с графической оконной средой. Использование printf или подобного рода процедур актуально для текстового вывода, но не удовлетворительно для вывода в графическую среду.
Сама библиотека выводит небольшое число данных; в частности, выводит сообщения об ошибках и предупреждения, при этом не осуществляя никакого ввода. Для поддержки программирования в графических средах библиотека позволяет определить пользователю, каким образом она должна осуществлять вывод.
Библиотека самостоятельно формирует на выход строку символов, а затем вызывает функцию, которая печатает эту строку. Если пользователь хочет изменить, «когда и каким образом» библиотека должна осуществлять вывод, то ему необходимо предоставить свой обработчик печати (Print Handler).
Взамен прямого вызова printf библиотека MatLab вызывает обработчик печати, когда ей необходимо вывести сообщение об ошибке или предупреждение. Print Handler, по умолчанию используемый библиотекой, имеет единственный параметр — const char * (выводимое сообщение) и возвращает void. Print Handler по умолчанию имеет следующий вид:
static void DefaultPrintHandler(const char *s)
Процедура направляет вывод на stdout Си, используя функцию printf.
Если необходимо производить вывод другим способом, то нужно написать свой Print Handler и зарегистрировать для библиотеки. Любой создаваемый обработчик печати должен соответствовать прототипу обработчика по умолчанию. Чтобы зарегистрировать пользовательскую функцию и настроить библиотеку на использование нового обработчика, необходимо вызвать функцию mlfSetPrintHandler, которая имеет единственный аргумент — имя функции-обработчика.
В связи с тем, что генерируемого MatLab исполняемого файла автономного консольного приложения недостаточно для разработки современного программного продукта, необходимо создание технологии использования кода на языке MatLab (предварительно переведённого на язык Си с применением функций MatLab C Math Library) в визуальной среде программирования. В качестве важного дополнения отметим, что существует способ создания программ на языке MatLab таким образом, чтобы прилагать наименьшие усилия по их использованию для создания автономного приложения на C/C++.
Данная технология может быть использована для проектирования SCADA-системы в среде Borland C++ Builder.
Необходимо отметить, что данная технология требует серьёзного развития и расширения в силу возможного эффективного применения для быстрого создания приложений, использующих большой объём математических вычислений. Необходимо также оптимизировать употребление математической C++-библиотеки MatLab для создания автономных приложений. Данная технология создала базу для разработки специального программно-
го средства, которое может позволить быстро и удобно создавать приложения прямо в Borland C++ Builder, используя исходный код на языке MatLab.
1. Мамиконов, А. Г. Методы разработки автоматизированных систем управления / А. Г. Мамиконов. — М., 1973.
2. Сухорослов, О. В. Разработка распределённой информационно-алгоритмической среды для решения декомпозируемых вычислительных задач: дис. канд. техн. наук / О. В. Сухорослов. — М., 2005.
3. http://www.gridclub.ru/ (Институт прикладной математики им. М. В. Келдыша РАН, Москва).
4. MatLab. Язык технических вычислений. — URL: http://www.exponenta.ru/educat/free/matlab/gs.pdf.
© Евстропов В. А., Швец С. В., 2013
Документация
Можно использовать компилятор MinGW-w64, чтобы создать файлы MEX, MATLAB ® взаимодействуйте через интерфейс к библиотеке C++, и автономному движку MATLAB и приложениям MAT-файла. Для получения дополнительной информации см. «Поддержку MATLAB Компилятора C/C++ MinGW-w64».
Установите компилятор MinGW-w64
Чтобы установить компилятор, используйте меню Add-Ons.
- На вкладке MATLAB Home, в разделе Environment, нажимают Add-Ons > Get Add-Ons.
- Ищите MinGW или выберите из Features.
Создание yprime.c Пример
Можно протестировать MinGW ® компилятор путем создания yprime.c пример. Скопируйте исходный файл в перезаписываемую папку.
copyfile(fullfile(matlabroot,'extern','examples','mex','yprime.c'),'.','f')
Если вам только установили компилятор MinGW в вашей системе, mex команда автоматически выбирает MinGW. Перейдите к следующему шагу. Однако, если у вас есть несколько C или компиляторы C++, используйте mex -setup выбрать MinGW.
mex -setup
Создайте файл MEX.
mex yprime.c
MATLAB отображает “Создание с” сообщением, показывающим, какой компилятор использовался, чтобы создать файл MEX.
yprime(1,1:4)
Папка установки MinGW не может содержать пробел
Не устанавливайте MinGW в месте с пробелами в пути. Например, не используйте:
C:\Program Files\mingw-64
Вместо этого используйте:
C:\mingw-64
Обновление файлов MEX, чтобы использовать компилятор MinGW
Если вам создали исходные файлы MEX с различным компилятором, который поддерживает MATLAB, вы можете должны быть изменить код, чтобы создать с компилятором MinGW. Например:
- Библиотека ( .lib ) файлы сгенерированы Microsoft ® Visual Studio ® не совместимы с MinGW.
- Объектная очистка не возможна, когда исключение выдается с помощью mexErrMsgIdAndTxt функция от файлов MEX C++, приводящих к утечке памяти.
- Неперехваченное исключение в файлах MEX C++, скомпилированных с MinGW, заставляет MATLAB отказывать.
- Файлы MEX с переменными, содержащими большие объемы данных, не могут быть скомпилированы, когда компилятор исчерпывает память.
Похожие темы
- Дополнения
- Получите и управляйте дополнениями
- Поиск и устранение проблем и Ограничения при компиляции Файлы MEX C/C++ с MinGW-w64
Внешние веб-сайты
- Поддерживаемые и совместимые компиляторы
- https://www.mathworks.com/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compiler
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.
Создание функций MatLab в виде разделяемой библиотеки dll
Для начала необходимо настроить компилятор среды Matlab. Это можно сделать либо из cmd, либо из самой среды командой mbuild –setup. При ее выполнении появится строка:
Please choose your compiler for building standalone MATLAB applications: Would you like mbuild to locate installed compilers [y]/n?
При подтверждении появится список установленных в системе компиляторов, поддерживаемых средой MatLab. Если выберете n, то появится список всех поддерживаемых компиляторов данной версии программы. Стоит отметить, что чем выше версия Matlab – тем больше поддерживаемых компиляторов.
Select a compiler:
[1] Borland C++Builder version 6.0 in C:\Program Files\Borland
[2] Lcc C version 2.4 in C:\MATLAB6P5\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Выбираем компилятор, который будет использоваться, и подтверждаем свой выбор. Я использую 3-ий.
Следующий шаг написание m-файла.
Пример 1 – Создание функции без параметров.
Создадим m-функцию с названием dataplotdll .m:
- function dataplotdll ( )
- %открываем файл для чтения
- fid = fopen ( ‘C:\dlldata.txt’ , ‘r’ ) ;
- %Читаем 200 значений
- [ s ] = fscanf ( fid, ‘%f ‘ , [ 1 , 200 ] ) ;
- %строим график
- plot ( s ) ;
- grid
- xlabel ( ‘Time’ ) ;
- title ( ‘Testing DLL Program for Plotting a Response’ ) ;
- ylabel ( ‘Response’ ) ;
- -B sgl указывает на необходимость использования графики
- -t — указывает на трансляцию из m-кода в C/C++ код
- -W libhg: dataplotlib – создает обертки функций
- -T link: lib dataplotdll.m — указывает тип создаваемого объекта. В нашем случае это будет библиотека.
Создаем пустой консольный проект. Я использую для этого VS2008, в других студиях следующие действия делаются по аналогии. Стоит отметить, что при использовании Builder могут возникнуть проблемы с использованием заголовочных файлов MatLab, так как строки в этих файлов имеют большую длину. Чтобы исключить эту проблему, необходимо воспользоваться текстовым редактором, поддерживающим длинные строки, и разбить их для уменьшения длины.
В папку с проектом консоли необходимо скопировать следующие файлы из директории MATLABверсия\extern\include\:
libmatlb.h; libmatlbm.h; libsgl.h; matrix.h; mex.h; mwutil.h; tmwtypes.h,
, а так же скопировать из папки с m-файлом:
dataplotlib.dll; dataplotlib.lib; dataplotlib.h
Все h-файлы необходимо подключить к проекту.Создаем main.cpp и подключаем к проекту.
В main.cpp пишем текст программы:
- #pragma comment(lib,»dataplotlib.lib»)
- #include
- #include
- #include
- #include
- #include «dataplotlib.h»
- double data_array [ 200 ] ;
- #define PI 3.14159
- FILE * fp ;
- int main ( )
- int i ;
- //Пишем в файл результат вычисления функции
- fp = fopen ( «c:\\dlldata.txt» , «w» ) ;
- for ( i = 0 ; i < 200 ; i ++ )
- data_array [ i ] = 10 * sin ( ( 2 * PI / 200 ) * i ) ;
- fprintf ( fp, » %f » , data_array [ i ] ) ;
- >
- fclose ( fp ) ;
- // Следующая функция вызывается для инициализации dataplotdll.
- dataplotlibInitialize ( ) ;
- //Вызываем m-функцию
- mlfDataplotdll ( ) ;
- //Завершаем работу с библиотекой
- dataplotlibTerminate ( ) ;
- return EXIT_SUCCESS ;
- >
После компиляции проекта скопируйте dataplotlib.dll, а так же файлы FigureMenuBar.fig и FigureToolBar.fig (необходимы для отображения меню и интструментов работы с графиком) в директорию с получившимся exe-файлом.
Пример 2. Создание функции с параметрами.
Изменим предыдущий пример следующим образом:
- function dataplotdll ( x,str )
- plot ( x ) ;
- grid
- xlabel ( ‘Time’ ) ;
- title ( str ) ;
- ylabel ( ‘Response’ ) ;
То есть в функцию передаем координаты точек и название графика.
Компилируем m-файл как в примере 1:
mcc -B sgl -t -W libhg: dataplotlib -T link: lib dataplotdll.m
Создаем новый пустой консольный проект. Копируем в директорию с проектом консоли файлы из MATLABверсия\extern\include\:
libmatlb.h; libmatlbm.h; libsgl.h; matrix.h; mex.h; mwutil.h; tmwtypes.h,
библиотеки libmatlb.lib и libmx.lib из \MATLABверсия\extern\lib\win32\ваш компилятор\, а так же из папки с m-файлом:
dataplotlib.dll, dataplotlib.lib, dataplotlib.h
Все h-файлы подключаем к проекту. Создаем main.cpp следующего содержания:
- #pragma comment(lib,»libmatlb.lib»)
- #pragma comment(lib,»libmx.lib»)
- #pragma comment(lib,»dataplotlib.lib»)
- #include
- #include «dataplotlib.h»
- int main ( )
- //Объявляем переменные для работы
- mxArray * x = NULL ;
- mxArray * title = NULL ;
- double arrays [ 4 ] = < 0 , 1.25 , 2 , 10 >;
- //Создаем строку
- title = mxCreateString ( «example» ) ;
- //Создаем матрицу 1 на 4
- x = mxCreateDoubleMatrix ( 1 , 4 ,mxREAL ) ;
- //Копируем данные
- memcpy ( mxGetPr ( x ) , & arrays [ 0 ] , 4 * sizeof ( double ) ) ;
- //Инициализируем библиотеку
- dataplotlibInitialize ( ) ;
- //Вызываем функцию
- mlfDataplotdll ( x,title ) ;
- //Завершаем работу библиотеки
- dataplotlibTerminate ( ) ;
- //Освобождаем память
- mxDestroyArray ( title ) ;
- mxDestroyArray ( x ) ;
- return EXIT_SUCCESS ;
- >
После компиляции проекта скопируйте dataplotlib.dll, а так же файлы FigureMenuBar.fig и FigureToolBar.fig в директорию с получившимся exe-файлом.
Пример 3 Создание функции возвращающей значение
Изменим предыдущий пример следующим образом:
Компилируем m-файл как в примере 2, но без ключа -B, так как графика здесь не нужна:
mcc -t -W libhg: dataplotlib -T link: lib dataplotdll.m
Создаем новый пустой консольный проект. Копируем в директорию с проектом консоли файлы из MATLABверсия\extern\include\:
libmatlb.h, libmatlbm.h, libsgl.h, matrix.h, mex.h, mwutil.h, tmwtypes.h,
библиотеки libmatlb.lib и libmx.lib из \MATLABверсия\extern\lib\win32\ваш компилятор\, а так же из папки с m-файлом:
dataplotlib.dll; dataplotlib.lib; dataplotlib.h
Все h-файлы подключаем к проекту. Создаем main.cpp следующего содержания:
- #pragma comment(lib,»libmatlb.lib»)
- #pragma comment(lib,»libmx.lib»)
- #pragma comment(lib,»dataplotlib.lib»)
- #include
- #include
- #include
- #include «dataplotlib.h»
- int main ( )
- //Объявляем переменные для работы
- mxArray * x = NULL ;
- mxArray * y = NULL ;
- double arrays [ 4 ] = < 1 , 2 , 3 , 4 >;
- int count ;
- double * result ;
- //Создаем матрицу 1 на 4
- x = mxCreateDoubleMatrix ( 1 , 4 ,mxREAL ) ;
- //Копируем данные
- memcpy ( mxGetPr ( x ) , & arrays [ 0 ] , 4 * sizeof ( double ) ) ;
- //Инициализируем библиотеку
- dataplotlibInitialize ( ) ;
- //Вызываем функцию
- y = mlfDataplotdll ( x ) ;
- //Считываем количество значений
- //mxGetM вернет 1, так матрица 1 на 4
- count = mxGetN ( y ) ;
- result = new double [ count ] ;
- //Копируем данные
- memcpy ( result, mxGetPr ( y ) , count * sizeof ( double ) ) ;
- //Завершаем работу библиотеки
- dataplotlibTerminate ( ) ;
- for ( int i = 0 ; i < count ; i ++ )
- std :: cout
- //Освобождаем память
- mxDestroyArray ( y ) ;
- mxDestroyArray ( x ) ;
- delete [ ] result ;
- system ( «PAUSE» ) ;
- return EXIT_SUCCESS ;
- >
Надеюсь данные примеры помогут в освоении использования Matlab в своих проектах.
Статья написана с использованием материалов книги Джифенга Ксу «Взаимодействие Matlab с ANSI C, Visual C++, Visual BASIC и Java».