1.Matlab生成独立程序
MATLABCOMBuilder及创建详解

MATLABCOMBuilder及创建详解MATLAB COM Builder及创建详解1. COM生成器(COM Builder)简介COM(Component Object Model,组件对象模型)是以组件为发布单元的对象模型,是一系列面向对象技术和工具的集合。
由于COM是建立在二进制级别上的规范,所以组件对象之间的交互规范不依赖于任何特定的开发语言。
使用该集合,软件开发人员可以用不同厂商提供的组件集成他们自己的应用程序。
从6.5版开始,MATLAB提供了COM生成器。
COM生成器提供了实现MATLAB 独立应用的一种新途径。
它能把MATLAB开发的算法做成组件,这些组件作为独立的COM对象,可以直接被C++Builder、Visual Basic或其他支持COM的语言所引用。
下面详细介绍如何利用COM Builder生成器实现对nnT oolKit工具包的封装。
2.创建nnToolKit的COM组件用MATLAB COM生成器创建COM组件是一个简单的过程,只需要4个步骤,即创建工程、管理M文件和MEX文件、生成组件、打包和分发组件。
(1) 创建nnToolKit工程(MATLAB6.5环境下)在MATLAB命令行中输入命令comtool,打开“MATLAB COM Builder”对话框,它是MATLAB COM生成器的主要工作环境。
在“File”菜单中选择“New Project”选项,将弹出“New Project Setting”对话框,如下(图1)所示。
在“Component name”文本框中输入组件名nnT oolKit(DLL 文件),该组件名输入后,生成器自动在“Class name”文本框中产生一个同名的类名nnToolKit。
“Project version”文本框中为版本号,默认为1.0。
“Project directory”文本框为在编译和打包模型时,工程和相关文件的存放位置,这里为“D:MATLAB6p5worknnT oolKit”。
MATLAB入门指南

MATLAB入门指南MATLAB是一款功能强大的数值计算软件和编程环境,广泛应用于科学、工程和数据分析领域。
本文将为初学者提供一份MATLAB入门指南,以帮助他们快速掌握基本概念、使用技巧和常见功能。
第一部分:MATLAB基础1. MATLAB的介绍MATLAB是由MathWorks开发的高级编程语言和环境,其主要用于数值计算、数据可视化和算法开发。
它与其他编程语言相比,有着简单易学的语法和丰富的内置函数库。
2. MATLAB的安装与设置在使用MATLAB之前,您需要先下载和安装MATLAB软件。
安装过程通常是简单的,只需按照提示一步一步执行即可。
安装完成后,您可以根据需要进行一些个性化设置,如选择默认工作目录和字体大小。
3. MATLAB的基本命令和运算符MATLAB的基本命令和运算符与其他编程语言类似,包括数学运算符(加减乘除、幂运算等)、逻辑运算符(与或非等)和比较运算符(等于、大于、小于等)。
您可以使用MATLAB作为计算器来进行简单的数学计算,如计算平方根、三角函数等。
4. MATLAB的变量和数据类型在MATLAB中,您可以使用变量来存储和操作数据。
MATLAB支持多种数据类型,包括数值、字符、逻辑和结构等。
您可以使用赋值语句将数据存储在变量中,并使用变量进行计算和操作。
5. MATLAB的数组和矩阵操作MATLAB以矩阵为基础进行计算,因此对于初学者来说,了解如何创建、操作和计算矩阵是至关重要的。
您可以使用MATLAB提供的函数来创建矩阵,并使用索引和运算符对矩阵进行操作。
第二部分:MATLAB编程和算法1. MATLAB的脚本文件和函数MATLAB提供了编写脚本文件和函数的能力,以便在单个文件中组织代码。
您可以使用脚本文件来一次性执行一系列MATLAB命令,而函数则可以封装一段可重复使用的代码块。
2. MATLAB控制结构MATLAB提供了多种控制结构,如条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)。
Matlab编写的程序生成EXE可执行文件的方法

Matlab 生成EXE 可执行文件1、M 文件生成可执行文件1.1、R un timeserver 的配置执行这个命令要在命令提示符下进入%matlab%\toolbox\runtime\bin\win32目录。
输入:rtsetup — f %matlab%\bin\win32\matlab.exe — **** 。
这儿**** 代表你输入的 N 个数字或者字母,它将作为未来开发的应用程序的密码用来识别不同的文件是否出自同一程序。
在正常情况下,执行完这居命令以后, dos 不会有任何提示符。
1.2、编写在matlab 中运行的程序1.3、编写配置文件把下面的两个模板文件 matlabrt_template.m,和pathdefrt_template.m文件修改程自己的 matlabrt.m 和 pathdefrt.m文件。
1.4、编译生成p 文件把你要编译的源程序放在 toolbox\local 目录下一个子目录中,然后把这个目录设为matlab的当前目录一一一定要保证这一点。
在matlab中输入如下命令:[LOG, DEPFUNOUT, PCODEOUT] = BUILDP({‘matlabrt ';})如果出现 BUILDP finished but there may be file(s) with either problem symbols or EVAL-like constructs. Check BUILDP log for details. 。
这是很正常的,很多时候都会出现这个提示。
输入:Depfunout{1}把它的内容拷到的 list.txt 中去(如果没有 list.txt 则新建).1.5、打包,发布退出 matlab,打开命令提示符,到 toolbox'runtime'oem下,执行 packega 按照它的提示先后输入 matlab的目录,文件列表名称(list.txt),还有应用程序的名称。
M文件独立运行

很多同学都用过Matlab吧,其强大的计算能力和方便的工具箱让我们在面对数值计算方面的问题可以轻松的应对。
但是这些便捷的前提是我们在机器上安装了matlab,如果没有安装的电脑要使用怎么办呢?下面有几种方法,我们来分别了解下一在这里我来说一下如何生成独立应用程序的步骤,主要是在没有安装matlab的机器上运行程序,希望对于新手来说有一个帮助.我应用的版本是7.1的.在没有安装matlab环境的机器中运行matlab程序的步骤:1.应用matlab编写完成你要实现功能的程序;2.输入命令>>mcc -mv *.m 等待matlab处理文件,matlab会生成好多文件的,慢,需要等待;3.在matlab安装的文件夹中,寻找C:\ProgramFiles\MATLAB71\toolbox\compiler\deploy\win32这个文件夹,然后将这个文件夹中的所有内容复制到你所需要运行matlab程序的机器上,运行MCRInstaller这个程序,将可以matlab的运行库安装到机器上,准备工作完成了,很简单的,可我却弄了很长时间才明白;4.把matlab编译完成的所生成的所有文件,考到你所需要运行matlab程序的机器上;5.运行所生成的*.exe文件,就可以了。
二,资料一:7.3.4 编译后程序的发布无论编译后产生的是可执行文件,还是动态连接库,要使它们能够发布到别的没有安装MATLAB的计算机上使用,必须在目标计算机上安装MCR,不能只是简单地把编译后产生的文件复制到目标计算机上。
可以利用MATLAB命令buildmcr来创建可以发布给最终用户的MCR安装文件。
buildmcr的功能是创建一个包含MCR需要的所有文件的ZIP 压缩文件。
buildmcr有如下两种调用方式:zipfile = buildmcrzipfile = buildmcr(dirname)其中返回值zipfile是产生MCRInstaller.zip的完整路径名。
matlab生成exe应用程序

matlab生成exe应用程序通常编写的matlab程序只能在装有matlab的机械上执行,可是没有安装matlab的如何办呢那个能够利用matlab的自带工具-Deploy Tool。
Matlab的Deploy Tools 能够方便的将matlab工程编译成所支持的类型,例如一样的Windows应用程序,Matlab for .NET/COM ,Matlab for Java,Matlab for Excel 等。
其原理确实是先利用MCC 编译器依照你的m文件生成相应的c语言文件和数据文件,然后在挪用C/C++编译器编译成可执行文件或控件库。
1、安装编译器。
可有多种选择,matlab自带了一个LCC,推荐利用VC++,我基于VS 2020实现。
2、设置编译器。
在matlab命令行输入mbuild –setup和mex –setup,选择安装的c编译器。
3、挪用编译器。
此处利用MATLAB下的一个GUI平台deploytool下完全实现。
在命令窗口输入deploytool即可看到。
具体利用方式请Help。
固然,也能够输入mcc -m filaname,filaname为要转成exe的m文件;注:在以前的版本中,用编译命令mcc -B sglcpp filaname;自2006的版本后,替换为mcc -mfilaname;在Matlab 2007a 中Deploy Tool实际上是一个MCC的前端界面(用MCC的命令行参数一样能够完成编译工作)下面是用Deploy Tool来编matlab工程。
第一创建prj工程,从菜单中定位到“New”-》“Deployment Project” 然后会提示选择类型然后添加文件接着你就能够够编译了第一次编译会让你去选择C/C++编译器,运行mbuild -setup 以后matlab会自动搜索系统所安装的C/C++编译器,然后让你给出选择,matlab自带了LCC编译器,只是能够利用VC的编译器。
Matlab生成.exe可执行程序

Matlab⽣成.exe可执⾏程序
由于在教学过程中需要演⽰Matlab程序,⽽教学机⼜未安装Matlab程序,因此有必要将Matlab程序⽣成.exe可执⾏程序,便于直接执⾏。
在Matlab中提供了Complier,可直接使⽤。
(⼀)什么是MATLAB Compiler?
它能够将你的matlab程序转换为⾃包含(self-contained)的应⽤程序和组件,这样你就可以将程序发放给你的终端⽤户,⽽且终端⽤户⽆需安装
Matlab就可以运⾏这些程序。
Matlab Compiler能够⽣成的应⽤或者组件包括下⾯这⼏类:
1、独⽴的应⽤程序
2、C和C++共享库(动态链接库,在Windows平台上是DLL,在Linux平台下是.so⽂件)
3、Excel插件
4、COM 和.NET对象
(⼆)MATLAB Compiler的构建过程
1、分析依赖关系
2、代码⽣成
3、创建归档⽂件(archive)
4、编译
5、链接
(三)执⾏过程
1、在Matlab的Command窗⼝下,可通过“help mcc”命令查看帮助
2、⽣成可执⾏程序:“mcc -m ××.m”,即可在当前⽬录⽣成××.exe程序
在当前⽬录⽣成可执⾏⽂件:
双击即可运⾏!
3、⽣成动态链接库:“mcc -l ××.m”,即可⽣成动态链接库。
MATLAB程序设计

MATLAB程序设计MATLAB程序设计简介MATLAB是一种用于数学计算、数据分析和可视化的高级编程语言和环境。
它在科学、工程和其他领域中被广泛应用,让用户能够快速开发各种应用程序和算法。
本文将介绍MATLAB程序设计的基本知识和技巧,帮助读者快速上手并编写高效的程序。
基本语法MATLAB的基本语法与其他编程语言类似,包括变量定义、运算符、控制流程等。
以下是一些常用的基本语法:变量定义MATLAB中的变量不需要预先声明类型,直接使用即可。
变量名是大小写敏感的,并且不能使用保留字作为变量名。
matlabx = 5;y = 'Hello MATLAB!';z = [1 2 3 4 5];运算符与其他编程语言一样,MATLAB支持各种数学运算符和逻辑运算符,可以进行加减乘除、比较和逻辑操作等。
matlaba = 5 + 3;b = 7 2;c = (a > b) && (b < 10);控制流程MATLAB提供了各种控制流程语句,如条件语句、循环语句等,可以根据条件执行不同的操作。
matlabif x > 0disp('x is positive');elseif x < 0disp('x is negative');elsedisp('x is zero');endfor i = 1:5disp(i);endwhile x < 10x = x + 1;end函数定义和调用函数是MATLAB程序设计的重要组成部分,可以封装一些常用的操作和算法,并在需要时调用。
以下是函数的定义和调用示例:matlabfunction result = add(a, b)result = a + b;endx = 3;y = 4;z = add(x, y);数据处理和可视化MATLAB提供了丰富的数据处理和可视化工具,可以帮助用户对数据进行分析和展示。
MATLABCoder可以从MATLAB代码生成独立的、可读性强、可移植的CC++代码

MATLABCoder可以从MATLAB代码⽣成独⽴的、可读性强、可移植的CC++代码MATLAB Coder可以从MATLAB代码⽣成独⽴的、可读性强、可移植的C/C++代码。
使⽤MATLAB Coder产⽣代码的3个步骤:准备⽤于产⽣代码的MATLAB算法;检查MATLAB代码的兼容性(有些matlab代码语句并不能⽣成c/c++代码);产⽣最终使⽤的源代码或MEX。
利⽤MATLAB Coder⽣成c++代码,并在vs2008中验证:⼀个简单的例⼦,两数相乘:1、安装matlab2011a或者更新版本;2、简单⽣成⼀个foo.m⽂件;function c = foo(a, b)%#codegen%This function muliplies a and bc = a * b其中,%#codegen可以防⽌出现警告错误3、在命令窗⼝,输⼊mex -setpu,选中⼀个存在的编译器;4、在命令窗⼝输⼊coder(图形界⾯),回车,弹出MATLAB Coder Project对话框;5、在New选项卡Name中输⼊⼀个⼯程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;6、在Overview选项卡中,点击Add files,弹出对话框,选中foo.m打开;7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,在MATLAB Expression 中输⼊5,点击OK;同样变量b也进⾏相应操作,输⼊6;8、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;9、点击More settings,GeneralàLanguage选择C++;Interface选项中去掉所有选项;Close;10、点击Build,进⾏编译;点击View report,弹出Code Generation Report对话框,此时,变量a、b、c会显⽰相应的变量信息;11、利⽤vs2008建⽴⼀个控制台应⽤程序,将⽣成的相关⽂件foo.h、foo.cpp、rtwtypes.h、foo_types.h拷到相关⽬录下并添加到应⽤程序中;12、在foo.cpp⽂件中添加#include “stdafx.h”;13、test.cpp⽂件中代码为:#include "stdafx.h"#include "foo.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){double a = 0.0, b = 0.0, c = 0.0;cin>>a>>b;c = foo(a, b);cout<<"c = "<return 0;}⼀个复杂的例⼦,求⼀个数的n次⽅根:1、两个.m⽂件:nrt.m:function [nth_rt, iterations, hstry] = nrt(varargin)%#codegen %This function will use a Newton Search Technique to find %the nth root of a number, a, to the tolerance, tol. %The square root% nrt(10, 2), or nrt(10, 2, 1e-9)%The "n" root%nrt(10, n), or nrt(10, n, 1e-9)a = varargin{1};n = varargin{2};if nargin ~= 3tol = 1e-9;elsetol = varargin{3};endif a < 0nth_rt = 0;iterations = 0;hstry = 0;else[nth_rt, hstry] = newtonSearchAlgorithm(a, n, tol);iterations = length(find(hstry ~= 0));%iterations = sum(hstry ~= 0);endnewtonSearchAlgorithm.m:function [x, h] = newtonSearchAlgorithm(b, n, tol) %#codegen %Given, "a", this function finds the nth root of a%number by finding where: x^n-a = 0coder.inline('never'); %使其⽣成⼀个单独的c++⽂件notDone = 1;aNew = 0; %Refined Guess Initializationa = 1; %Initial Guesscnt = 0;h = zeros(50, 1);h(1) = a;while notDonecnt = cnt + 1;[curVal, slope] = f_and_df(a, b, n); % squareyint = curVal - slope * a;aNew = -yint / slope; %The new guessh(cnt) = aNew;if (abs(aNew-a) < tol) %Break if it's convergednotDone = 0;elseif cnt > 49 %after 50 iterations, stopnotDone = 0;aNew = 0;elsea = aNew;endendx = aNew;function [f, df] = f_and_df(a, b, n)%Our function is f=a^n-b and it's derivative is n*a^(n-1).f = a^n-b;df = n*a^(n-1);2、在命令窗⼝输⼊coder(图形界⾯),回车,弹出MATLAB Coder Project对话框;3、在New选项卡Name中输⼊⼀个⼯程名nrt.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;4、在Overview选项卡中,点击Add files,弹出对话框,选中nrt.m打开;5、添加三个输⼊,分别为10、2、1e-9;两个输⼊也可以;6、选中Build选项卡,Output type中选择c/c++ Static Library;选中Generate code only;7、点击More settings,General-->Language选择C++;Interface选项中去掉所有选项;Close;8、点击Build,进⾏编译;点击View report,弹出Code Generation Report对话框;9、利⽤vs2008建⽴⼀个控制台应⽤程序,将⽣成的相关⽂件nrt.cpp、nrt.h、newtonSearchAlgorithm.cpp、newtonSearchAlgorithm.h、nrt_types.h、rtwtypes.h拷到相关⽬录下并添加到应⽤程序中;10、分别在nrt.cpp、newtonSearchAlgorithm.cpp⽂件中添加#include “stdafx.h”;11、test.cpp⽂件中代码为:#include "stdafx.h"#include "nrt.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){double varargin_1 = 0, varargin_2 = 0, varargin_3 = 1e-9;cin>>varargin_1>>varargin_2;double nth_rt = 0, iterations = 0;double hstry_data[50] = {0};int hstry_sizes[1] = {0};nrt(varargin_1, varargin_2, varargin_3, &nth_rt, &iterations, hstry_data, hstry_sizes); cout<<"nth_rt = "<cout<<"iterations = "<cout<<"hstry_data = "<for (int i=0; i<50; i++)cout<}cout<<"hstry_sizes = "<return 0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10).编译,链接,生成test_matlab_4.exe文件。注意记得把testaddforcpp.dll放到生成的test_matlab_4.exe的文件夹中。否则exe文件找不到并且无法调用dll。
5).然后打开tool -> option -> Projects and Solutions -> VC++ Directories -> Include files增加matlab头文件目录地址。"C:\Program Files\MATLAB\R2009b\extern\include"。由于最近经常使用matlab,就把头文件目录添加到VC设置中。如果只是偶尔使用matlab,可以把头文件目录加到project -> test_matlab_4 properties -> C++ -> General -> Additional Include Directories中。(这里我们借用以前日志的图片。)
4).输入“testadd.exe 10 15”。注意,testadd.m函数有两个参数,而testadd.exe的输入参数只能通过commandline参数输入,但输入的参数为char型,所以程序里必须对此考虑。
5).验证输出结果。
代码附下testadd.m
function result = testadd(v1, v2)
Matlab
本文主要介绍了如何在matlab环境下,通过mcc命令,把m文件转换为exe文件。
1).在matlab中建立一个m文件,命名为testadd.m。内容后附。
2).在command window输入“mcc -m testadd.m”,等待生成testadd.exe文件。
3).在进入windows下控制台程序,然后进入包含testadd.exe的文件夹。
arguments[0] = mxCreateDoubleScalar(2.0);
arguments[1] = mxCreateDoubleScalar(3.0);
mlxTestaddforcpp(1, &result, 2, arguments);
double *output = mxGetPr(result);
3).在matlab命令行输入mcc -l testaddforcpp.m,生成testaddforcpp.c,testaddforcpp.h,testaddforcpp.lib,testaddforcpp.dll等文件,这里我们主要用到后三个文件(.h .lib .dll)。
4).打开Visual Studio 2005,建立一个Win32 Project,项目名为test_matlab_4
6).然后打开tool -> option -> Projects and Solutions -> VC++ Directories -> Library files增加matlab库文件目录地址。"C:\Program Files\MATLAB\R2009b\extern\lib\win32\microsoft"。如果只是偶尔使用matlab,可以把库文件目录加到project -> test_matlab_4 properties -> Linker -> General -> Additional Library Directories中。(这里我们借用以前日志的图片。)
Visual Studio
本文主要介绍了如何用matlab的mcc命令生成dll,然后再Visual Studio加载调用生成的dll。
1).打开matlab,新建m function,命名为testaddforcpp.m。这里我们简单写一个加法函数。代码后附。
2). matlab中配置编译器。这里我们选择Visual Studio的C/C++编译器。
cout << "result is " << *output << endl;
mxDestroyArray(result);
mxDestroyArray(arguments[0]);
mxDestroyArray(arguments[1]);
testaddforcppTerminate();
mclTerminateApplication();
return 1;
}
if( !testaddforcppInitialize())
{
cout << "Could not initialize the function library." << endl;
return 1;
}
mxArray *result;
mxArray *arguments[2];
if (ischar(v1))
v1 = str2num(v1);
end
if (ischar(v2))
v2 = str2num(v2);
end
result = v1 + v2;
disp(result);
reply = input('Press any key to leave...', 's');
fprintf('Thanks for using!\n');
pace std;
int _tmain(int argc, _TCHAR* argv[])
{
if( !mclInitializeApplication(NULL,0))
{
cout << "Could not initialize the application." << endl;
源代码附下:
testaddforcpp.m文件
function result = testaddforcpp(v1, v2)
result = v1 + v2;
test_matlab_4.cpp文件
#include "stdafx.h"
#include "testaddforcpp.h"
#include <iostream>
7).把头文件testaddforcpp.h添加到test_matlab_4中。test_matlab_4.cpp代码后附。
8).在Configuration Properties -> Linker -> General -> Additional Library Directories中添加C:\Documents and Settings\DKim\My Documents\MATLAB\MATLAB_C_CPP,这是包含testaddforcpp.lib的路径。