Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/767: Рейтинг темы: голосов - 767, средняя оценка - 4.97
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
31.08.2013, 02:10
Студворк — интернет-сервис помощи студентам
Маньяки... 350 метров, чтобы график построить?! Существует способ иметь внутри exe старый вариант Matlab C++ Math Library, при этом можно не устанавливать и не запускать никаких инсталляторов, а просто положить нужные dll'ки рядом с exe файлом.
Кому интересно, можете заглянуть сюда: Matlab C++ Math Library. Там я использую набор файлов из Matlab 6.5, где есть около 400 матричных функций и всё это в архиве занимает 8,5 Мбайт! По ссылке на тему можно найти исходники в репозитории svn и посмотреть как это сделано.
Этой информации нет в нескольких известных книжках по теме. Я использую численную библиотеку Matlab как дополнение к SMath Studio, где теперь доступны больше сотни Matlab функций. Причем стоить заметить, что функции у меня вызываются из C# кода через специальный посредник, написанный на C++/CLI.

Ничто не мешает использовать мой приём в любой exe программе. Там есть некоторые тонкости, которые зависят от того, где вы делаете вычисления: в dll или exe. Если вы будете хранить движок матлаба внутри и при инсталляции распаковывать в определенное место, то нужно сделать так, чтобы dll'ки матлаба могли найти друг друга при загрузке. У меня это сделано без модификации переменной окружения path.

Ещё могу добавить, что можно заставить работать 32разрядный неуправляемый код, даже если он вызывается из управляемого кода на 64-разрядной машине. Поэтому эту старую RTL можно использовать и сейчас. Всё прекрасно работает и не нужно никаких левых сотней мегабайт в довесок.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2013, 02:10
Ответы с готовыми решениями:

Matlab gui открытие exe файла в программе
Такая роблема, когда откраваешь в .m файле то он запускает эти exe, но когда этот файл сам в exe он их уже не открывает, они в одной папке,...

Создание exe файла
Здравствуйте хочу узнать возможно ли в VBA создать exe файл, что бы каждый раз не открывать программу через Excel ?

Создание exe файла
У меня есть консольное приложение, и чтобы его запустить я захожу в Visual Studio 2010 выбираю проект и жму f5. Как мне сделать exe файл...

164
 Аватар для lomt
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
31.08.2013, 13:41  [ТС]
Так это не компелирование программы через Матлаб для standalone использования получается, а прикручивание функций Матлаба через библиотеки в другие проги на других языках. С таким же успехом можно было вообще всё писать на Python, который ту же матлабовскую библиотеку юзает. А вот
Цитата Сообщение от уни Посмотреть сообщение
Маньяки... 350 метров, чтобы график построить?!
это конечно сильное заявление!
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
31.08.2013, 15:28
Когда вы "компилируете" такого рода m-файл, то вы неявно делаете то же самое. Никакого тайного смысла сия операция не предполагает. Просто компилятор matlab делает некоторую работу за тех, кто в ней ничего не понимает, а именно, связывает функции, которые используются в m-файле, со своими библиотеками. Вы можете проделать те же операции самостоятельно, если понимаете что к чему. Я-то как раз таки понимаю что к чему, так как читаю документацию: MATLAB C/C++ Graphics Library User's Guide.

Я о том, что можно использовать дистрибутив их старой библиотеки размером в 8,5 метров и получить практически те же результаты для простых применений, которые могут быть получены с дистрибутивом в 300 метров. Разница существенная для отдельно взятого приложения. Если я хочу использовать, к примеру, функцию fft2() из их библиотеки или численный решатель жёсткого ОДУ ode15s(), то накой чёрт мне нужны эти 300 метров в довесок? Оно прекрасно работает и со старой библиотекой.

Причём я графическими возможностями Matlab RTL в своём плагине к SMath Studio не пользуюсь, т.к. они там не нужны. У Смоленцева (книжка 2006 г.) неплохо описано подключение этой библиотеки, но он просто перевёл хороше руководство, но своего ничего не добавил. Те же примеры работы с численными решателями ОДУ в C++ программе у него отсутствуют (идут не далее одного примера из руководства).
Миниатюры
Создание exe файла в MatLab  
1
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
31.08.2013, 16:09
Скомпилировал я одну демку из стандартных примеров Matlab 6.5:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
function flames
%FLAMES creates an animation of the MathWorks logo rising through flames
 
%   Copyright (c) 1984-2000 by The MathWorks, Inc.
% $Revision: 1.4 $
 
figure('Menubar','None','NumberTitle','Off','Name','Demo','UserData',1);
set(gcf,'DoubleBuffer','On','Renderer','Painters','Resize','Off');
menu1 = uimenu('Label','&File');
menu2 = uimenu(menu1,'Label','E&xit');
 
%Only function calls are allowed in the C/C++ Graphics Library callbacks 
set(menu2,'Callback','set(gcf,''UserData'','''');');
 
X=[];
load flames.mat X
 
[a,b] = size(X);
x = ones(a,b)*.01;
x(end,:) = 201;
x(end-1,:) = 140;
x(end-2,:) = 60;
theImage = image(x);
set(theImage,'CDataMapping','Direct');
colormap([hot(200);[0 0 0]]);
axis off;
axis image;
set(gca,'YLim',[1 size(x,1)-2]);
set(gca,'Units','Pixels','Position',[15 15 1.5*a+30 1.5*b+30]);
theSize = get(0,'ScreenSize');
set(gcf,'Units','Pixels','Position',...
   [(theSize(3)-(1.5*a+60))/2 (theSize(4)-(1.5*b+60))/2 (1.5*a+60) (1.5*b+60)],...
   'Color',[0 0 0]);
animate_it(theImage,X);
 
%All figures must be closed for a C/C++ Graphics Library
%application to exit
close all;
 
function animate_it(theImage,theLogo);
%The algorithm used takes the last image used and based on a pixel-by-pixel
%basis deterime the next image. It uses the following rule for pixel X: that
%the new pixel value is based on the old value plus the two pixels below and 
%the two pixels two down and one to the right and left. Add in a bit of 
%randomness, normalize the matrix to one, and where ever the picture
%is 1, set that pixel to one.
 
X = get(theImage,'CData');
 
[a,b] = size(X);
 
%Pre-allocation of matricies speed up loops
theZeros = zeros(a,1);
theZeros2 = zeros(1,b);
theOnes = ones(1,b);
theRand = rand(a,b);
theLogical = [theLogo(1:end,:)];
 
%This loop causes the logo to rise.
for i = 1:a-1
   if ~isempty(get(gcf,'UserData'))
      theRand = [theRand(3:end,:);theRand(1:2,:)];
      movedUp = [X(2:end,:);theOnes];
      movedUp2 = [movedUp(2:end,:);theOnes];
      upAndLeftAndRight = ([movedUp2(:,2:end),theZeros]) + ...
         ([theZeros,movedUp2(:,1:end-1)]);
      theTemp = theRand .* X;
      X = theTemp + theTemp + movedUp + upAndLeftAndRight + movedUp2 ;
      X = X ./ max(max(X));
      X([zeros(a-i-1,b);theLogo(1:i+1,:)]==1) = 1;
      set(theImage,'CData',X.*201);
      drawnow;
   end
end
 
%This while loop just keeps cycling the flames until the window is
%closed.
while ~isempty(get(gcf,'UserData'))
   theRand = [theRand(3:end,:);theRand(1:2,:)];
   movedUp = [X(2:end,:);theOnes];
   movedUp2 = [movedUp(2:end,:);theOnes];
   upAndLeftAndRight = ([movedUp2(:,2:end),theZeros])+ ...
      ([theZeros,movedUp2(:,1:end-1)]);
   theTemp = theRand .* X;
   X = theTemp + theTemp + movedUp + upAndLeftAndRight + movedUp2 ;
   X = X ./ (max(max(X)));
   X(theLogical==1) = 1;
   set(theImage,'CData',X.*201);
   drawnow;
end
Весь набор файлов проекта, включая скомпилированный exe, занимает 200 Кбайт. Плюсуем сюда 8,5 Мбайт, итого около 9 Мбайт будет дистрибутив этой программки. Сравните это с 350 метрами. По правде сказать, получившиеся c-файлы исходника при автоматизированной трансляции не так с ходу понятны, но это только если вы транслируете m-файл. Ничто не мешает доработать файлы проекта для своего использования.
Изображения
 
1
 Аватар для lomt
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
31.08.2013, 18:27  [ТС]
Довольно занятно, а главное информативно, будем разбираться!

Цитата Сообщение от уни Посмотреть сообщение
Когда вы "компилируете" такого рода m-файл, то вы неявно делаете то же самое. Никакого тайного смысла сия операция не предполагает. Просто компилятор matlab делает некоторую работу за тех, кто в ней ничего не понимает, а именно, связывает функции, которые используются в m-файле, со своими библиотеками. Вы можете проделать те же операции самостоятельно, если понимаете что к чему. Я-то как раз таки понимаю что к чему, так как читаю документацию: MATLAB C/C++ Graphics Library User's Guide.
Я за вас очень рад, но как-то уж больно вы резки в речях
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
31.08.2013, 23:24
Ну резок немного, бывает. Что касаемо упомянутой мною библиотеки Matlab 10-летней давности, то с сожалением должен сказать, что на просторах сети очень трудно найти кого-то, кто ей бы пользовался. Кроме того, при компиляции современными компиляторами нужно немного допиливать проект, чтобы сборка прошла успешно, так как немного всё устарело. Это касается использования функций, где параметрами выступают тоже функции, типа решателей ОДУ.

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

Для людей, которых интересуют численные расчёты в неуправляемом пространстве на C++, эта библиотека должна быть на первых местах в инструментарии. Она покрывает большую часть типичных численных расчётов, кроме того синтаксис программы получается максимально приближен к тому, что мы видим в m-файлах.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
02.09.2013, 11:43
А можно создать приложение без установки MCR (MATLAB Component Runtime)?
0
 Аватар для lomt
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
02.09.2013, 12:16  [ТС]
Цитата Сообщение от msekr Посмотреть сообщение
А можно создать приложение без установки MCR (MATLAB Component Runtime)?
Как раз об это и холиварил уни в последних постах, советую почитать.
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
02.09.2013, 12:53
Но это же только в Matlab 6.5? А в новых всё так плохо?
0
 Аватар для lomt
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
02.09.2013, 12:56  [ТС]
НУ примеры да, но общий подход для поздних версий схож, я думаю. А вообще лучше дождаться ответа Уни, так как он с этим разобрался.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
02.09.2013, 14:54
Я разобрался только с Matlab 6.5, так как не хотел устанавливать MCR из новых версий. Они слишком много занимают. Практически столько же как Matlab 6.5 целиком. Для моего приложения в 100 КБайт просить пользователя устанавливать несколько сот мегабайт как-то не очень хорошо.

Тут вопрос в том, а что именно вам нужно от Matlab'а и в каком окружении? Если это какие-то новые фичи из новых версий, то пользуйтесь уж тем что есть, а если вы хотите как я получить доступ из C++ к нескольким сотням матричных численных функций, то существует способ попроще, без установок, без Matlab'а и дополнительным размером в 8,5 Мбайт всего.

Пробовать то же самое для новых версий я тоже буду, но попозже, когда до меня дойдёт очередная книжка Смоленцева и Ко, где .Net уже используется. По идее там должно быть попроще. Надеюсь, что код в новых версиях выполняется всё равно в неуправляемом пространстве, а .Net библиотеки - лишь обёртки для него. Иначе использование новых версий для тех, кто ждёт быстродействия, бессмысленно. Это ещё одна причина, по которой я использую старую библиотеку.
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
02.09.2013, 15:09
А вот и новая книжка Смоленцева. Посмотрим что там можно сделать. Мне интересна та часть, где описано программирование под .Net. По идее на C# программировать должно быть проще, чем на C++, но, если вычисления выполняются в управляемом пространстве, то они будут медленнее в несколько раз, чем те же в неуправляемом.

Что касается MCR, если там нет какой-то хитрой регистрации, должно быть достаточно положить рядом с программой те dll, которые она требует. Для этого нужно установить MCR, скопировать куда-нить его файлы, а потом удалить его из системы. Ну, а далее нужно подсовывать программе dll'ки, пока она не заработает. Это упрощённый подход такой. Тут ещё нужно отделять понятия "программы". Программа может быть как приложение, написанное на C#, и как "обработчик" m-файла. Второй случай сложнее.
0
0 / 0 / 1
Регистрация: 23.07.2013
Сообщений: 36
02.09.2013, 18:11
И звени пожалуйста, может очень глупый вопрос.

А для MATLAB R2013a. Делать так как ты показал на инструкции?
0
 Аватар для lomt
454 / 280 / 13
Регистрация: 13.11.2012
Сообщений: 588
Записей в блоге: 1
02.09.2013, 18:28  [ТС]
Тут всё очень просто на самом деле, в случаи Уни, он уменьшал объём своей программы подключением отдельных функций Матлаб в свой сишный код, не ставя громоздкий MCR.Для 2013a попробуй сначала сделать, как я описал в начальном сообщение темы, с новыми библиотеками уни такие же операции пока не делал...
0
0 / 0 / 1
Регистрация: 23.07.2013
Сообщений: 36
03.09.2013, 23:26
Попробую, спасибо.
0
0 / 0 / 0
Регистрация: 18.03.2011
Сообщений: 47
01.10.2013, 20:51
Зосима,lomt, вот в программе строчка есть "msgbox({Answer1,Answer2,Answer3},'Ответ ');"
можно как-нибудь вместо текста чтобы выводился график через plot()??
чтобы после конвертирование в exe файл,после введения данных и вычисления выводился график?
0
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
06.10.2013, 12:55
Хотелось бы ещё раз задать вопрос Уни. Я скомпилировал m-файл в программе Matlab 6.5, получил .exe файл. Он прекрасно работает. На системе, где не установлен Matlab я его запустил, стал добавлять, согласно выведенному сообщению, необходимые .dll файлы. Добавил их штук 15-20. Затем, когда добавил все dll-ки, при вызове полученной независимой программе DOS-окно стало схлопываться, т.е. открываться на доли секунды и закрываться. Но с помощью программы Camtasia я расшифровал надпись на схлопывающемся окне и понял, что программа запрашивает ещё файлы license.dat и demo.lic. Файл license.dat в Matlab я нашёл. А demo.lic не смог найти. На этом всё и закончилось. Не могли бы подсказать, что далее можно было бы сделать здесь?
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
06.10.2013, 13:26
Для начала, нужно проверить будет ли работать программа с RTL библиотекой Matlab 6.5. Для этого на целевом компьютере нужно установить Matlab C++ Math and Graphics Run Time Library 2.1. Дистрибутив идёт вместе с Matlab 6.5 в папке C:\MATLAB6p5\extern\lib\win32. Файл: mglinstaller.exe (~8.5 Мб).
Этот файл нужно скопировать на целевой компьютер и запустить там. Библиотеку нужно установить по какому-то пути, например, на диск C:\MATLAB6p5\. Установщик выводит приглашение с комментариями.

После этого, как написано в комментариях, нужно добавить в системную переменную path целевого компьютера папку C:\MATLAB6p5\bin (или C:\MATLAB6p5\bin\win32, я уже не помню). Вот теперь можно запускать вашу программу. Она найдёт RTL библиотеку по пути в переменной path.

Это стандартный вариант, который предлагает MathWorks. Есть второй вариант, когда эту библиотеку можно расположить рядом с программой. Он немного сложнее. Попробуйте сначала стандартный путь, а потом я расскажу, если нужно, как можно обойти лишние телодвижения.
1
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 15
06.10.2013, 13:45
Спасибо, Уни. Но с mglinstaller мне всё понятно. Просто я хотел чисто версию portable из m-файла сделать, т.е. без mglinstaller и mcrinstaller. Но видать это пока нереально. А может какие-нибудь есть портативные версии mglinstaller или mcrinstaller?
0
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 327
Записей в блоге: 1
06.10.2013, 13:49
Использование mglinstaller - это и есть портативность, просто нужно немножко подумать и разместить все файлы из пакета рядом в папке с программой. Вот и всё. При запуске программа обнаружит пакет по текущему пути и никаких других действий не нужно.
Сам этот пакет можно вставить архивом в ресурсы и распаковывать при запуске программы. Либо можно поискать программы, которые умеют это делать. Я сам не пользовался, но знаю, что есть программы, которые могут упаковать всё, что нужно, для создания портативной версии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.10.2013, 13:49
Помогаю со студенческими работами здесь

Создание exe файла
Привет всем. Как создать програму на C++ Builder 6, которая может создать любой (для примеру) exe файл.... тоесть ми запсукаем програму,...

Создание exe файла
Не знаю в эту тему или нет , но написано на Вин Апи , при преобразовании проекта в ехе фаил с помощью, VS2013 x64 Cross Tools Command...

Создание .exe файла
Здравствуйте, у меня в программе постоянно идёт работа с json файлами, которые находятся в папках skills и date. Например, в методе...

Создание exe файла
Может это конечно из области фантастики) но хочу сделать из базы данных с расширением .accdb .exe файл, если это возможно. Что бы...

Создание exe файла
Подскажите какую то статтю, где описано создание exe файла для Unity. Зарание спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru