![]() |
|
![]() ![]() ![]() |
|
Эйнштейн |
|
|||
Unregistered |
Люди! Помогите пожайлуста соединить С++ и Матлаб!! Или может есть какие нибудь ссылки!!! Заранне пасиба!
|
|||
|
||||
Гость_Oleg |
|
|||
Unregistered |
В инсталлированном Матлабе есть *.h и *.dll файлы для связи. Наверное и в описании что то есть.
|
|||
|
||||
эй |
|
|||
Unregistered |
Люди! Помогите пожайлуста соединить С++ и Матлаб!! Или может есть какие нибудь ссылки!!! Нужно достать из С функции Матлаба. Заранне пасиба! |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Можно поконкретнее? Я "доставал" функции Matlab'a из C и "соединял" С и Matlab. Это можно сделать несколькими способами в зависимости от того, какая конкретно задача решается, какие функции надо достать. И на каждый способ есть свои ограничения.
Итак, что конкретно нужно сделать? |
|||
|
||||
эй |
|
|||
Unregistered |
Поконкретнее:
необходимы функции для обработки сигналов и изображений. |
|||
|
||||
Waters |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 16.11.2003 Репутация: нет Всего: нет |
Вот пример вызова функции "eig" Матлаба (вычисление собст. значений и векторов). Может помочь понять передачу параметров.
wbr |
||||
|
|||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Пример реальный, работает. Только я бы рекомендовал еще обратить внимание на класс mwArray. C ним работать удобнее именно в С++. Тип mxArray - это лучше для чистого С. Чуть попозже дам пример.
Сразу оговорюсь, что все эти извращения с mxArray и mwArray годятся только для тех функций, для которых имеются готовые сишные прототипы в, соответственно, MATLAB C Math Library и MATLAB C++ Math Library. Их не так много, как хотелось бы, но их там есть ![]() Если нет, то можно выкрутиться компиляцией своих m-файлов в С/С++, что, к сожалению, очень редко проходит. Так, например, бесполезно компилировать m-файл, содержащий вызов матлабовской функции fmincon. Матлабовский компилятор для этого весьма слабоват и не понимает ООП, когда речь заходит о переводе в С++. В таких "тяжелых" случаях я выкручивался использованием Matlab в режиме ActiveX сервера. Как это делать, написано в доке. Там просто объявляешь рабочую область под Matlab, вызываешь его ядро и гоняешь туда-сюда переменные: в ядро загоняешь исходные даные, а обратно вынимаешь результат. Пример тоже позже выложу. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Итак, примеры. Сразу оговорюсь, что я делал все под Borland C++ Builder 5 и Matlab 6. Чтобы BCB понимал, что от него требуется, надо добавить в опции проекта Include path и Libraries path. На моем компе это
e:\matlabr12\extern\include\;e:\matlabr12\extern\include\cpp\ e:\matlabr12\extern\lib\win32\;e:\matlabr12\extern\lib\win32\borland\bc54\ а в Conditionals/Defines вместо написанного там по умолчанию _DEBUG записать: BORLAND;IBMPC;MSWIND Кроме того, к проекту нужно явно подключить (например, прямо в менеджере проекта) нужные *.lib из матлабовской поставки (т.е. из той самой директории <MATLAB>\extern). Какие именно библиотеки - это определяется тем, какие функции нужны. Подробности - в доке (файл cppmath_ug2b.pdf). У меня понадобились: libmatpb55.lib - этот обязательно, так как компилятор версии 5.5 libmat.lib libmatlb.lib libmmfile.lib libmx.lib Ну и конечно не забыть #include "matlab.hpp". Ниже небольшой участок кода. В комментариях пишу, что это значило бы на Matlab-скрипте.
|
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Теперь пример с использованием Matlab Engine. Он выручает, когда нет готового С/С++ прототипа для функции, которую надо вызвать из С/С++.
Нижеприведенные фрагменты кода показывают саму идею. Более простой пример есть в доке (файл apiext.pdf). В показанном примере мы вызовем некую определенную пользователем функцию, хранящуюся в m-файле (он должен находиться в директории <MATLAB>/work !!!).
NB! Для Matlab 6.5 группа операторов mxSetName(B, "B"); memcpy((char *) mxGetPr(B), (char *) b, m*n*sizeof(double)); engPutArray(ep, B); заменяется на один вот такого формата: PutVariable(const char *name, const mxArray *mp); |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
З.Ы. надеюсь, это действительно кому-то поможет, в свое время потратил много сил, пока дрюкался со "скрещиванием" С++ и Matlab'a
![]() |
|||
|
||||
Unregistered |
|
|||
Unregistered |
2 podval
Скажите, вам не приходилось вызывать из своих программ матлабовский компенент, строящий 3d-поверхность? (Хотелось бы его "вставить" в свой проект...) wbr. |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: нет Всего: 62 |
Нет, не приходилось, да и если бы пришлось, я бы лучше построил поверхность теми средствами, которые предоставляет среда разработки на С++. В борландовском C++ Builder, например, очень приличный TChart. В Matlab'e, конечно, графики выглядят красиво. Но вызвать этот график можно двумя путями:
1) воспользоваться Matlab Engine engEvalString(ep, "surf(A);"); Однако большой недостаток использования Matlab Engine в том, что он долго запускается. Строку ep = engOpen(NULL))) мне приходилось вешать на обработчик события FormShow() главной формы, чтобы было впечатление, что это как бы вся програма долго загружается в память. Все-таки матлабовское ядро - тяжеловатая вещь, долго грузится, и написано оно на Java (отсюда кросс-платформенность), и работает в режиме интерпретатора. 2) скомпилировать в *.exe матлабовский файл с вызовом функции построения графика. Делается подключением Matlab C++ Graphics Library. В руководстве по матлабовскому компилятору пишут, как это сделать. Тоже не лучшее решение, т.к. программу придется всю писать на Matlab, а это значит, что еще не факт, что она скомпилируется. кроме того. полученный *.exe работает весьма хитро: сначала видно, как запускается какое-то окно со вспомогательным консольным приложением, а поверх него твоя прога с какой-то там графикой. Выглядит смешно. Вобщем, графики лучше делать тем, что есть. |
|||
|
||||
Guest |
|
|||
Unregistered |
Интересно, а как TCart юзать, если он при увеличении числа точек, или при выборе surface орет что не поддерживает данную фичу и просит позвонить куда-то там? ( у меня Visual Component First Impression)
|
|||
|
||||
ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
А где можно скачать Matlab С++ Math и Matlab Compiler? Подскажите пожалуйста...очень хочу, может есть где бесплатно качнуть можно?
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
popovda |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 9.6.2006 Где: Москва Репутация: нет Всего: 6 |
Matlab compiler - вещь, насколько я помню, бесплатная, как и RunTime. Это для того, чтобы поставлять библиотеки, если прога в matlab писалась или его использует. Доступны с сайта mathworks.com. Ребята - по матлабу лучше, чем спецы Softline никто не поможет. Их сайт по матлабу: www.matlab.exponenta.ru
-------------------- С уважением, Попов Д.А. |
|||
|
||||
ZakharAV |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 4.10.2009 Репутация: нет Всего: нет |
А сайт этот живой? Я что-то никак достучаться не могу И попутно - два дня бодался - скрещивал Matlab с DEPHI (естественно, извращенным образом - через Cpp) Без особых успехов. Не хватает знаний по самой процедуре - подскажите, где подробно почитать? Matlab Help - на англицком, да и мало там. Это сообщение отредактировал(а) ZakharAV - 28.9.2010, 11:31 |
|||
|
||||
smoke_man |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: нет Всего: 17 |
Все примеры и документацию можно найти на офф. сайте.
Из книг можно почитать Джифенгом Ксу "Взаимодействие Matlab с ANSI C, Visual C++, Visual BASIC и Java". Добавлено через 3 минуты и 18 секунд PS. На данном форуме я писал пример работы с Matlab. Это можно найти тут. -------------------- 0x2b|~0x2b |
|||
|
||||
ZakharAV |
|
|||
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 4.10.2009 Репутация: нет Всего: нет |
Угу, спасибо, Smoke!
|
|||
|
||||
smoke_man |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: нет Всего: 17 |
Не за что!
-------------------- 0x2b|~0x2b |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Математические пакеты | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |