Научная статья на тему 'Технология создания приложений на языке с++, использующих библиотеку функций Matlab'

Технология создания приложений на языке с++, использующих библиотеку функций Matlab Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
679
169
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОМПИЛЯТОР MATLAB / MATLAB COMPILER / КОМПИЛЯТОР C++ / C++ COMPILER / MICROSOFT VISUAL C / БИБЛИОТЕКА ФУНКЦИЙ / LIBRARY OF FUNCTIONS / ЛАБОРАТОРНЫЙ ПРАКТИКУМ / ЧИСЛЕННЫЕ МЕТОДЫ / NUMERICAL METHODS / LABORATORIAL PRACTICAL WORK

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Нгуен Зуи Тхаи, Сосинская Софья Семеновна

Рассматривается технология создания библиотеки функций, реализованной в ходе разработки программы лабораторного практикума в системе MATLAB для использования в Microsoft Visual C++. Библиотека содержит ряд функций численного анализа, пригодных для решения различных задач, и создается с помощью компилятора MATLAB. Подробно описан процесс создания библиотеки, тип данных mwArray. В качестве иллюстрации использования созданной библиотеки приводятся этапы создания лабораторного практикума по численным методам как приложения в системе Microsoft Visual C++.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Нгуен Зуи Тхаи, Сосинская Софья Семеновна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

THE TECHNOLOGY OF CREATING APPLICATIONS ON C++ USING MATLAB FUNCTIONS LIBRARY

The technology of creating library of functions implemented in the course of development laboratorial practical work in the system MATLAB for using in Microsoft Visual C++ is considered. The library contents a number of functions for solving different tasks and is created by the compiler MATLAB. Progress of creating library and data type mwArray is described in detail. As an example, make stages of creating laboratorial practical work like application in system Microsoft Visual C++ is shown.

Текст научной работы на тему «Технология создания приложений на языке с++, использующих библиотеку функций Matlab»

ш

УДК 004.4422 Нгуен Зуи Тхаи,

аспирант кафедры технологии машиностроения, Иркутский государственный технический университет, тел.: +79246256668, e-mail: [email protected] Сосинская Софья Семеновна, к. т. н., доцент кафедры технологии машиностроения Иркутский государственный технический университет, тел.: +79149153062, e-mail: [email protected]

ТЕХНОЛОГИЯ СОЗДАНИЯ ПРИЛОЖЕНИЙ НА ЯЗЫКЕ С++, ИСПОЛЬЗУЮЩИХ БИБЛИОТЕКУ ФУНКЦИЙ MATLAB

Nguyen Duy Thai, S.S. Sosinskaya

THE TECHNOLOGY OF CREATING APPLICATIONS ON C++ USING MATLAB FUNCTIONS LIBRARY

Аннотация. Рассматривается технология создания библиотеки функций, реализованной в ходе разработки программы лабораторного практикума в системе MATLAB для использования в Microsoft Visual C++. Библиотека содержит ряд функций численного анализа, пригодных для решения различных задач, и создается с помощью компилятора MATLAB. Подробно описан процесс создания библиотеки, тип данных mwArray. В качестве иллюстрации использования созданной библиотеки приводятся этапы создания лабораторного практикума по численным методам как приложения в системе Microsoft Visual C++.

Ключевые слова: компилятор MATLAB, компилятор C++, Microsoft Visual C, библиотека функций, лабораторный практикум, численные методы.

Abstract. The technology of creating library of functions implemented in the course of development laboratorial practical work in the system MATLAB for using in Microsoft Visual C++ is considered. The library contents a number of functions for solving different tasks and is created by the compiler MATLAB. Progress of creating library and data type mwArray is described in detail. As an example, make stages of creating laboratorial practical work like application in system Microsoft Visual C++ is shown.

Keywords: MATLAB Compiler, C++ Compiler, Microsoft Visual C, library of functions, laboratorial practical work, numerical methods.

Введение и постановка задачи

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

Maple и MATLAB. Основными областями применения MATLAB являются математические расчеты, моделирование, анализ данных и визуализация, научная и инженерная графика, разработка приложений, включая графический интерфейс пользователя.

Несмотря на мощный технический язык, система MATLAB имеет некоторые недостатки [7, 8]: во-первых, язык MATLAB является интерпретируемым языком сценариев, то есть машинный код не создается, поэтому программа, написанная на языке MATLAB, может быть запущена только на платформе MATLAB, так как не имеет межплатформенных возможностей; во-вторых, m-файл, подготавливаемый MATLAB, представляет собой текстовый файл, который можно легко прочитать, что говорит о плохой защищенности алгоритмов.

С другой стороны, на данный момент Visual Studio является самым популярным средством разработки приложений на платформе Windows. СистемаVisual Studio использует не только высокую эффективность языка С++, но и дружественный интерфейс, удобство визуального программирования. Переход на C++ Visual Studio требует разработки и отладки программ выполнения матричных операций, численного анализа и инженерных расчетов.

Было бы заманчиво объединить широкую гамму возможностей, предоставляемых современными визуальными средствами создания приложений на языке C/C++, с мощными математическими библиотеками, которые можно сформировать из функций систем MATLAB. Использование эффективного математического кода MATLAB совместно с возможностями визуальных сред разработки приложений позволило бы программисту-

математику решать широкии круг прикладных задач [6]. Рассматриваемая технология позволяет сократить время исполнения программы и время разработки программы [9].

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

Использование созданной библиотеки иллюстрируется применением ее для решения задач лабораторного практикума [10], ориентированных на использование методов решения систем линейных уравнений, интерполирования табличной функции полиномами, численного интегрирования и др.

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

Компилятор MATLAB

Компилятор MATLAB используется для преобразования программ MATLAB в приложения и библиотеки, которые могут работать независимо от самой системы. Можно компилировать m-файлы, MEX-файлы. Компилятор MATLAB поддерживает все особенности системы, включая объекты и функции, и используется для создания автономных C/C++-приложений на различных платформах (Windows, Unix и Macintosh) и динамически подключаемых библиотек, или dll, на Windows.

Пакет MATLAB®Builder для .NET есть расширение пакета MATLAB®Compiler. Он используется для преобразования функций MATLAB в один или более классов .NET, которые составляют компонент .NET, или пакет. Каждая функция MATLAB преобразуется в метод некоторого класса и может быть вызвана из приложения .NET. Приложения, использующие методы, созданные при помощи .NET Builder, при своей работе не требуют установленной системы MATLAB. Однако должна быть установлена MCR - среда исполнения для компонентов MATLAB® (MATLAB Component Runtime).

На рис. 1 показаны возможности пакета MATLAB Compiler и его расширений для создания соответствующих компонентов.

Рис. 1. Возможности пакета MATLAB Compiler и его расширений

Инсталляция и конфигурирование MATLAB Compiler

Компилятор MATLAB устанавливается вместе с MATLAB. Для этого следует выбрать установку компоненты MATLAB Compiler. Для работы компилятора MATLAB требуется, чтобы в системе был установлен внешний ANSI C- или C++-компилятор, поддерживаемый MATLAB. Для MATLAB R2010b (версия 7.14) можно использовать один из следующих 32-разрадных C/C++ компиляторов:

• Lcc C версия 2.4.1 (включен в MATLAB) -компилятор С, но не С++;

• Microsoft Visual C++ (MSVC).

Среда выполнения компоненты MATLAB, библиотека MCR

Эта среда, называемая MCR (MATLAB Component Runtime), содержит автономный набор общедоступных библиотек MATLAB и все необходимое для работы созданного компилятором приложения или компонента. Среда MCR обеспечивает полную поддержку всех особенностей языка MATLAB.

Создание библиотеки совместного использования

Библиотекой совместного использования называется динамически компонуемая библиотека (Dynamic Link Library). Обычно эта библиотека представляет собой фрагмент кода, хранимый в файле с расширением dll. Код может быть использован другими программами, но сама по себе библиотека программой не является.

При создании библиотеки DLL компилятором MATLAB создается сама DLL и остальные файлы: файл обертки, заголовочный файл, файл библиотеки импорта и список экспорта.

Для создания библиотеки можно использовать среду разработки Deployment Tool или исполнить команды mcc, mbuild. Среда разработки

ш

Deployment Tool позволяет легко создавать необходимые компоненты MATLAB. Однако иногда нужны более широкие возможности управления процессом построения автономных приложений и библиотек. В этом случае можно использовать две утилиты, mcc и mbuild, с их опциями. Ниже на рис. 2 показана процедура создания библиотеки «matlablib» с помощью среды разработки Deployment Tool. Библиотека «matlablib» содержат разные функции, определенные в m-файлах и используемые в компилируемой программе. Перечислим некоторые функции:

• [x, fx, i]=fseq_solve_equation_iteration(f, a, b, x0, eps) - функция, позволяющая решать нелинейные уравнения методом простой итерации;

• [x, dx]=fseq_sys_equations_gauss(A, B) -функция, позволяющая решать системы линейных уравнений;

• [yy, c]=fseq_interpolation_spline(x, y, xx) -функция, позволяющая вычислять коэффициенты кубического сплайна и его значения в заданных точках интерполирования;

• [apha,beta,msum,devl]=fseq_approximation_f ormula1(x, y) - функция, позволяющая вычислять коэффициенты аппроксимированной функции по первой эмпирической формуле;

• s=fseq_integral_monte_karla(f, a, b, n) -функция, позволяющая вычислять численное интегрирование по формуле Монте-Карло;

• [x, y, dy]=fseq_solve_diff_equations_runge _kuto(f, a, b, fa, m) - функция, позволяющая решать обыкновенные дифференциальные уравнения методом Рунге - Кутты;

• [x, y]=fseq_optimization_divide2(f, a, b, eps) - функция, позволяющая искать минимальную точку функции в определенном интервале методом половинного деления;

• myfplot(func, a, b) - функция, позволяющая рисовать график функции на отрезке (a, b) ит. д._

4'> Deployment Tool

Fife Edit Project Debug Desktop Window Help matlablib.prj

I

Build

%

Exported Functions

baclcsub.m @ CalcCoeffs.m

cppeval.m ffil fseq_approximc \ fseq_approxim£ Q fseq_approxima fseq_approxirr fseq_epproxirr '-I •••.•,,.. •рргониг a ,!'ц "! Г'Г^м! premte f»2| 'vij I"!:-Iii.H l.jrvjit IT1 [seqjntegraLsimpsop.m ■ fseq_integral_trapez"iijm.FTi ^"l fseqjnterpotationjagrang'e.

ulati

В результате работы компилятора создаются следующие файлы:

• matlablib.cpp (C++ файл библиотечной обертки);

• matlablib.dll (файл общедоступной библиотеки);

• matlablib.exp, maüablib.exports (файлы экспорта, содержат список экспортируемых функций библиотеки);

• matlablib.h (заголовочный файл обертки библиотеки, содержит объявления функций создаваемой библиотеки и функций инициализации среды MCR);

• matlablib.lib (библиотека импорта, содержит описание функций библиотеки dll. Этот файл позволяет компоновщику связать вызовы в приложении с адресами в DLL).

Создание автономного C++-приложения

Для иллюстрации использования созданной библиотеки было создано автономное С++ приложение в среде Visual Studio 2008 [4, 5], которое имеет возможности лабораторного практикума, разработанного ранее в среде MATLAB [10]. При этом создается проект «mymatlab» (рис. 3). В форме приложения «Form1.h» размещены нужные компоненты. Для использования в приложении общедоступной библиотеки, созданной компилятором MATLAB, файл «mymatlab.cpp» должен иметь следующую структуру [2]:

• объявление переменных;

• вызов функции mclInitializeApplication, инициализирующей среду исполнения MCR MATLAB для работы приложения;

• вызов функции matlablibInitialize() инициализации каждой общедоступной библиотеки созданной компилятором MATLAB, которая включается в приложение;

• вызов экспортируемых функций библиотеки при необходимости;

• вызов mclWaitForFiguresToDie(NULL) для отображения рисунка в окне MATLAB;

• вызов функции matlablibTerminate() завершения библиотеки, когда приложение больше не нуждается в ней;

• вызов функции mclTerminateAppHcationO, когда приложение больше не должно вызывать никаких библиотек;

• освобождение переменных, закрытие файлов, выход.

Рис. 2. Создание библиотеки средой разработки Deployment Tool

Solution Explorer - mymatlab

a I £ I ^

Solution 'mymatlab' (1 project)

a- :wi..uj..*mi.i

£)••• Li Header Files (=)•• _J] Forml.h

..... Forml.resX

,h] matlablib.h h°| resource.h h] stdafx.h Ljf Resource Files iif| app.ico jj^J app.rc (=)•■■ Source Files

c*»1 Assemblylnfo.cpp

mymatlab.cpp <>f| stdafx.cpp matlablib.dll g matlablib.lib ReadMe.txt

Рис. 3. Проект «mymatlab»

Тип данных mwArray

Для того чтобы использовать в С++ методы, созданные компилятором, в MATLAB разработаны специальные классы для С++:

• mwArray - используется для передачи параметров ввода/вывода к С++ интерфейсным функциям, созданным компилятором MATLAB;

• mwString - класс строк, используемый mwArray API (MATLAB Application Program Interface) для вывода строковых данных.

Объекты mwArray являются аналогами массивов MATLAB в С++. Класс mwArray обеспечивает необходимые конструкторы, методы и операторы для создания массива и его инициализации, а также для простой индексации. Класс mwArray определен в файле mclcppclass.h.

Подобное описание каждого конструктора, метода, оператора типа данных mwArray , а также процедур преобразования значений между данными типа С++ double и mwArray показано в [1, 2, 3]. В конкретном приложении нужно преобразовать данные типа string в mwArray. При этом используется функция PtrToStringChars(), находящаяся в файле Vcclr.h.

Настройки проекта

Перед запуском приложения необходимо настроить свойства конфигурации в свойстве страниц проекта. При этом необходимо выполнить следующие изменения:

• выбор проекта mymatlab —> Properties —

> Configuration Properties —> General —> Common Language Runtime support: Замена поддержки общеязыковой исполняющей среды (Common Language Runtime support) из Pure MSIL Common La-naguage Runtime Support (/clr:pure) на Common La-naguage Runtime Support (/clr);

• выбор проекта mymatlab —> Properties —

> Configuration Properties —> Linker —> General —> Additional Library Directories: Добавление каталогов C:\Program Files\MATLABYR2010b\ex-ternYlibYwin32Ymicrosoft и E:\Compiler\mymatlab\ mymatlab (каталог, в котором сохраняется библиотека совместного использования);

• выбор проекта mymatlab —> Properties —> Configuration Properties —> Linker —> Input —> Additional Dependencies: Добавление библиотек: mclmcrrt.lib и matlablib.lib;

• выбор проекта mymatlab —> Properties —

> Configuration Properties —> C/C++ —> General —> Additional Include Directories: Добавление каталогов: C:\Program FilesY Yext rnYinclude и E:\ Com-pilerYmymatlabYmymatlab;

• выбор проекта mymatlab —> Properties —

> Configuration Properties —> C/C++ —> Code Generation —> Runtime Library: Выбор Multithreaded Debug DLL (/MDd).

После выполнения вышеуказанных изменений можно приступать к разработке и выполнению приложения.

Интерфейсы лабораторного практикума

Для создания приложения нужно только поместить на формы все визуальные компоненты, с помощью которых осуществляются ввод данных и вывод результатов. Важно, чтобы вводимые данные были преобразованы в тип данных mwArray или mwString с помощью команды SetData(). На рис. 4-7 показаны интерфейсы лабораторного практикума на языке С++.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Рис. 4. Интерфейс «Решение систем линейных уравнений»

ш

Рис. 5. Интерфейс «Численное интегрирование»

Рис. 6. Интерфейс «Интерполирование функций»

Результаты решения задач приведены на рис. 5 и 6. При этом в ходе выполнения программы вызываются графические окна MATLAB.

Заключение

Использование библиотеки, созданной компилятором MATLAB, является удобной технологией для разработки визуальных приложений С++. Эта библиотека может применяться при разработке других приложений, в которых используются функции, включенные в ее состав. Кроме того, рассматриваемая технология позволяет расширять библиотеку, добавляя в неё новые функции путем повторной компиляции. Единственное замеченное ограничение - данные перед использованием в скомпилированных функциях должны быть преобразованы в тип mwArray.

БИБЛИОГРАФИЧЕСКИМ СПИСОК

1. MATLAB Compiler User's Guide. Sixth printing. Revised for Version 3.0 (Release 13). 2002. 274 с.

2. Н. К. Смоленцев. Создание windows-приложений с использованием математических процедур MATLAB. - М.:ДМК-Пресс, 2008. -456с.:ил.

3. М. Л. Подкур, П. Н. Подкур, Смоленцев Н. К. Программирование в среде Borland C++ Builder с математическими библиотеками MATLAB C/C++. - М.:ДМК-Пресс, 2006. -496с.:ил.

4. Б. И. Пахомов. C/C++ и MS Visual C++ 2008 для начинающих. - СПб.: БХВ-Петербург. 2009. - 624 с.: ил. + Дистрибутив (на DVD).

5. Пауэрс Л. Microsoft Visual Studio 2008 / Л. Пау-эрс, М. Снелл: Пер.с англ. - СПб.: БХВ-Петербург. 2009. - 1200 с.: ил. - (В подлиннике).

6. П. Н. Палухин, В. В. Поддубный. Технология использования MATLAB программ в средах визуального программирования С\С++ // Вестник Томского государственного университета, 2003, № 280. - С. 309-318.

7. Zhang Liang, Wang Jian-yang, etc. Mixed Programming for MATLAB with C/C++, post & telecom press, pp. 7-8, Nov 2008.

8. Luhe Hong, Jianli Cai. The application guide of mixed programming between MATLAB and other programming languages. pp 185-189.

9. Zhang Bao Li, Chen Juan, etc. The mix program trend between VC and MATLAB in view of different MATLAB version. Journal of Changchun University of Technology (Natural Science Edition), April 2008, vol. 29, No. 2, pp. 174-177.

10.Нгуен Зуи Тхаи. Разработка лабораторного практикума по численным методам в системе MATLAB. IV Всероссийская научно-практическая конференция «Научная инициатива иностранных студентов и аспирантов российских вузов», Томск, 2011г., 153-156 с.

i Надоели баннеры? Вы всегда можете отключить рекламу.