2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Создание независимого приложения в Matlab 7.01
Сообщение08.01.2007, 18:58 


08/01/07
1
Как можно сделать независимое приложение в Matlab 7.01 так, чтобы оно запускалось на другом компьютере, на котором ни matlab, ни компилятор не установлен?

Заранее спасибо!

 Профиль  
                  
 
 
Сообщение13.02.2007, 00:07 


04/01/07
90
Однажды дернул меня черт сделать подобное в Matlabe 6.5. Потел над прогой месяца 6-7, получилось почти все что хотел, посыпался винт и все потерял :cry: . Но осталось множество впечатлений, которыми могу поделиться.

1. Независимое приложение я писал в Delphi потому как лучше в нем работаю. Но сожалел что не знаю С++, так как Matlab четко ориентирован на него и компилирует все функции через код Си.

2. Проще всего необходимые матлабовские функции скомпилировать в DLL, которую затем подключать к оболочке, сделанной по-человечески в Delphi, например.

3. При подключении DLL-ки к интерфейсной программе важно понять в каком виде Matlab хранит переменные. Это ссылка на запись, в которой хранится размерность массива и ссылка на сам массив.

4. При переносе программы на другой компьютер не стоит скупиться на место на диске. Перенесите все матлабовские DLL-ки какие найдете (в моем случае это было около 80-ти Мб). Если хоть какой-то функции он не находит - вылетает без предупреждения в самый неожиданный момент.

Ну вот пожалуй и все. Добавлю только, что геморой это не слабый. Хотя может с седьмым по-другому.
Успехов.

 Профиль  
                  
 
 компиляция внутренним компилятором MatLab
Сообщение02.10.2007, 16:29 


02/10/07
3
уважаемые,
подскажите пожалуйста пошагово как сделать dll-ку из m-файла в MatLab-e

просто написав функцию типа
=====================
function [a]=adding(b,c)
a=b+c;
=====================
и запустив

mcc -l adding.m

я конечно получаю файл adding.dll
вот только вызывая его после этого строкой

a=adding(b,c) где b и c конечно же уже определены я получаю
сообщение
---------------------------------------------------------------
Mex file entry point is missing. Please check the (case-sensitive)
spelling of mexFunction (for C MEX-files), or the (case-insensitive)
spelling of MEXFUNCTION (for FORTRAN MEX-files).
??? Invalid MEX-file 'C:\my_doc\matlab\adding.dll': The specified module could not be found.
---------------------------------------------------------------

где собака порылась?
может чего-то не так делаю. подскажите?

кстати в догонку еще одни вопрос.
если я обычную функцию в матбале откомпилирую и сохраню как dll-ку то будет ли она быстрее работать?

 Профиль  
                  
 
 
Сообщение02.10.2007, 19:28 
Экс-модератор
Аватара пользователя


23/12/05
12047
xalexis писал(а):
если я обычную функцию в матбале откомпилирую и сохраню как dll-ку то будет ли она быстрее работать?

По поводу всего предыдущего не скажу - просто не делал dll-ки, меня обычно устраивал код и так, а вот про скорость где-то читал (возможно, даже где-то в help-е), что да, можно получить значительное ускорение в работе, особенно, если компилируемые функции содержат много циклов.

 Профиль  
                  
 
 
Сообщение03.10.2007, 00:07 


02/10/07
3
ну раз говорите скорость должна увеличиться то точно надо делать dll-ку.
подскажите плиз!

 Профиль  
                  
 
 
Сообщение03.10.2007, 10:12 
Экс-модератор
Аватара пользователя


23/12/05
12047
xalexis писал(а):
ну раз говорите скорость должна увеличиться то точно надо делать dll-ку.

Проблемы со скоростью? - Со встроенными функциями, типа eig() Вы не выгадаете в скорости. Основные причины замедления работы в MATLAB с которыми я сталкивался:
1) динамическое изменение длины массива - можно побороть, если Вам известна конечная длина массива: просто изначально инициализируйте массив нужного Вам размера, например используя функции zeros() или ones()
2) прорисовка сложных графиков в большом количестве - но тут Вам создание dll вряд ли поможет
3) обилие циклов - постарайтесь использовать работу с массивами вместо циклов везде, где это возможно

Если грамотно построить код, то потом а) может отпасть острая необходимость в дальнейшем ускорении; б) создание dll уже не даст того эффекта.

 Профиль  
                  
 
 
Сообщение03.10.2007, 11:06 


02/10/07
3
с первыми двумя - проблем нет.
переменные создаются заранее и в процессе их размер не менятеся.
а вот с этим.
Цитата:
обилие циклов - постарайтесь использовать работу с массивами вместо циклов везде, где это возможно

как-то пока не сростается

а в частности
код
===========================================
data1=double(data1);
[X,Y]=meshgrid(1:1:size(data1,1),1:1:size(data1,2));

for k=1:z;
sh_x=vect(1)*k-1;
sh_y=vect(2)*k-1;
i=ceil(shift_x-sh_x);
j=ceil(shift_y-sh_y);
di=abs(i-(shift_x-sh_x));
dj=abs(j-(shift_y-sh_y));
[XI,YI]=meshgrid(1+di:1:size(data1,1),1+dj:1:size(data1,2));
[si,sj]=size(XI);
ZI = interp2(X,Y,data1(:,:,20),XI,YI);

int_data(i:i+si-1,j:j+sj-1) = int_data(i:i+si-1,j:j+sj-1) + double(ZI);

end
===========================================

работает в три раза медленнее кода

============================================
data1=double(data1);
for k=1:z;
sh_x=vect(1)*k;
sh_y=vect(2)*k;
for i=1:size(int_data,1);
ii=i+sh_x-shift_x;
if (ii>=2 & ii<=x-1);
iir=round(i+sh_x-shift_x);
iif=floor(i+sh_x-shift_x);
iic=ceil(i+sh_x-shift_x);
for j=1:size(int_data,2);
jj=j+sh_y-shift_y;
if (jj>=2 & jj<=y-1);
jjr=round(j+sh_y-shift_y);
jjf=floor(j+sh_y-shift_y);
jjc=ceil(j+sh_y-shift_y);

ad_x1y1=data1(iif,jjf,k);
ad_x1y2=data1(iif,jjc,k);
ad_x2y1=data1(iic,jjf,k);
ad_x2y2=data1(iic,jjc,k);
ad_y1=ad_x1y1+(ii-iif)*(ad_x1y2-ad_x1y1);
ad_y2=ad_x2y1+(ii-iif)*(ad_x2y2-ad_x2y1);

ad=ad_y1+(jj-jjf)*(ad_y2-ad_y1);

int_data(i,j) = int_data(i,j)+ ad;
%int_data(i,1+ceil(shift_y-sh_y):(ceil(shift_y-sh_y)+size(ad,2))) = int_data(i,1+ceil(shift_y-sh_y):(ceil(shift_y-sh_y)+size(ad,2)))+ double(ad);
end
end
end
end
%[num2str(k),' cycles out of ',num2str(z),' is done']
end
=======================

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

где собака порылась?

 Профиль  
                  
 
 
Сообщение04.10.2007, 12:52 
Экс-модератор
Аватара пользователя


23/12/05
12047
xalexis писал(а):
хотя первый использует всего один цикл и две стандартные функции
а второй делает поэлементный перебор массива и использует для этого 3 вложенных цикла.

где собака порылась?

попробуйте прогнать через профайлер - посмотрите, где теряется время; думаю, что теряете на meshgrid()

 Профиль  
                  
 
 
Сообщение05.10.2007, 05:05 


05/10/07
2
отработал тему с dll в Matlab 6.5/ хочется отметить, что в Matlab dll - всего лишь расширение файла, никакого отношения к динамическим библиотекам она не имеет и называется MEX функцией. компилится она командой ( mcc -x filename ). тут mcc - Matlab C Compiler - драйвер который управляет процессом компиляции, дополнительно нужно установить и настроить необходимый компилятор командой ( mex -setup ). если говорить про ( -x ) - это пользовательский ключ который указывает на операцию с MEX. реально, в mexopts.bat валяется его длинная интерпретиция, у кого есть желание можете пользоваться профессионально и сконфигурить батник.

 Профиль  
                  
 
 exe-файлы из MatLab
Сообщение20.03.2008, 18:48 


02/08/07
92
Здравствуйте!!!

Меня интересует, можно ли генерировать exe-файлы из MatLab, как это делается, например, из Delphi?

С уважением,

Dmitry

 Профиль  
                  
 
 
Сообщение20.03.2008, 20:00 


22/04/07
89
Питер
Код:
doc mcc

 Профиль  
                  
 
 
Сообщение25.03.2008, 08:54 


25/03/08
1
Здравствуйте!
Уважаемые пользователи, подскажите пожалуйста можно ли создать exe файл в Matlab способный работать на ПК без самого Matlab.
doc mcc
это конечно хорошо, но может кто-нибуть ответить можно ли в matlab 2006a сделать независимый exe. Т.к. получается сделать сделать только работающий на ПК, где matlab уже установлен. Программа сделана через GUIDE и содержит *.m и *.fig файлы.

 Профиль  
                  
 
 
Сообщение25.03.2008, 11:08 


04/02/08
325
Буково
Сделайте статическую линковку библиотек.

 Профиль  
                  
 
 Re: компиляция внутренним компилятором MatLab
Сообщение23.03.2011, 19:32 


23/03/11
2
исходя из doc mcc
я написал: mcc -t -T link:lib onestepahead
Очень хотелось получить DLL, пригодную для использования совершенно другой программой
но в ответ получаю:
"impossible to open _lib2067.def"

Действительно, такого файла у меня нет.

Подскажите, пожалуйста, что делать!
Может у кого-нибудь есть этот файл?

Его можно поискать, например: в ":\MATLAB_6p5\extern\include\"

А вообще-то должен ещё где-то быть официальный склад матлабовских файлов...
Подскажите где.

 Профиль  
                  
 
 Re:
Сообщение24.03.2011, 15:55 


29/03/10
20
Владимир_81 в сообщении #108680 писал(а):
Здравствуйте!
Уважаемые пользователи, подскажите пожалуйста можно ли создать exe файл в Matlab способный работать на ПК без самого Matlab.
doc mcc
это конечно хорошо, но может кто-нибуть ответить можно ли в matlab 2006a сделать независимый exe. Т.к. получается сделать сделать только работающий на ПК, где matlab уже установлен. Программа сделана через GUIDE и содержит *.m и *.fig файлы.


Я использую:
mcc - И -sgl {имя файла}
получается exe файл.
Для нормальной работы на другом компе без матлаба нужны библиотеки Run-Time (реального времени) MCRInstaller.exe. Обычно идет вместе с матлабом.
Т.е. на компе на котором нет матлаба ставят библиотека и запускают программу exe. Для нормальной работы нужны несколько файлов (если не ошибаюсь сам exe и ctf, но это можно установить экспериментальным путем). По крайней мере у меня так работает.
Аналогично я делаю для программирование в Delphi, делаю программу в matlabe, делаю exe и в delphi выполняю программу эту exe.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group