Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/767: Рейтинг темы: голосов - 767, средняя оценка - 4.97
 Аватар для уни
368 / 146 / 17
Регистрация: 06.03.2010
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Сообщений: 328
Записей в блоге: 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
Закрытая тема Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru