如何将Matlab的M文件变成EXE文件

如何将Matlab的M文件变成EXE文件,第1张

如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程序发布在没有安装MATLAB的电脑上?下面将一步步实现:

一、生成独立可执行的程序(exe文件)步骤

1、安装编译器。可有多种选择,matlab自带了一个LCC,推荐使用VC++60,我基于VS 2003实现。

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;

4、安装<matlab path>\toolbox\compiler\deploy\win32目录下的MCRInstaller。

二、脱离matlab运行可执行程序

MCR是由matlab的运行环境,占用不到300M的对于用不同matlab版本生成的exe文件,MCR版本也会有不同,因此,在程序打包时,最好将相应版本的MCR一起打包。MCR环境的设置文件存放目录如下:

<matlab path> \toolbox\compiler\deploy\win32

文件名为MCRInstallerexe。可将其拷贝到自己的文件夹中,(70以前的版本是mglinstallerexe)。

在MATLAB里运行可执行程序的办法是在前面加一个!,比如:!picshow,后缀名可有可无。

在其它没有安装matlab的机器上运行exe文件前:

首先安装matlab的运行环境。在同一机器上可以并存不同版本的matlab环境(换句话说不同版本不兼容)。

其次是要将“MCRinstallerexe安装目录\runtime\win32”这个路径添加到该计算机的环境变量中,通常是自动加载。

如果没有,也可手动安装,添加的方法是:

右击“我的电脑”“属性”“高级”“环境变量”“添加”指定一个变量名,然后将上述路径复制到里面就可以了。

注:在安装过程中会d出让安装MicrosoftNETFramework可以不用安装。

最后就是将编译生成的相相关文件拷贝到同一目录下,双击即可运行。

问题:目前此方法可完全运行在没有安装MATLAB以及C/C++的电脑上,但是如果是在AMD的CPU可以运行,但是不会出现任何MATLAB编译的界面。

美中不足就是,运行的时候dos的那个黑色地窗口一直存在。下面将实现去除黑屏的办法:

消除运行MATLAB生成的exe程序的dos黑屏的办法

基于MATLAB生成exe文件后,每次运行都存在dos黑屏的问题,现在可以通过以下方法解决:

方法一: 在命令窗口输入:

cd(prefdir)

edit compoptsbat

在打开的文件最后添加以下语句:

AVC环境下:

set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup

BLCC环境下:

set LINKFLAGS=%LINKFLAGS% -subsystemwindows

C Borland:

set LINKFLAGS=%LINKFLAGS% -aa

保存以后,再重新编译m文件,生成的exe文件运行起来就没有dos窗口了

方法二:使用suppress工具:

下载附件中的suppress压缩包后解压,(当然您可以自己去Google然后再下载)会看到一个suppressini文件,用记事本打开,然后将 其中“Name=testexe”中textexe的改为你生成的exe文件名。将suppressexe(有个关盘和显示器的图标),改后的 suppressini放到你生成的exe的同目录下。执行suppressexe或者您自己生成的exe可以了。当然您可以自己修改 suppressexe的名字,改为您自己想要的名字。

其中的方法一在使用后生成的exe再到没有任何安装MATLAB的机子上运行也不会有黑屏了。

方法二的缺点就是要同时存在您生成的exe以及supressexe,必须在同一目录下。

导入simulink

在similink里面有个 From File模块

你把你的m文件名输入到那模块

运行Simulink模型可以使用sim函数,仿真结果可以通过以下几种方式导出:

(1)设置Scope模块的Save data to workspace;

(2)模型中加入Outport模块,并设置模型的Workspace I/O;

(3)使用To Workspace模块项工作区导入数据。

在matlab中,你可以把源文件(即m文件)放在非默认路径的文件夹中,其调用的方法有三种:

假设你的源文件不在默认路径内,而在matlab文件夹内,例如路径为G:\practice\matlab:

(1)在没有打开matlab软件的情况下,你可以直接双击以上路径内的m文件(已编译)的图标,然后matlab软件的current

folder(当前文件夹)就会显示G:\practice\matlab,再看左侧文件夹框内就会显示matlab文件夹内所有的m文件,双击即可打开相应的源文件。

(2)当matlab软件已经打开时,你可以更改current

folder内的默认路径,改为你的源文件所在的路径,然后同上。

(3)打开matlab软件,然后直接把源文件图标拖拽到command

window(命令窗口)中,软件会自动运行你的m文件,并显示执行结果。

希望可以帮到你···呵呵

一、矩阵的表示方法

1、矩阵元素必须在”[]”内;

2、矩阵的同行元素之间用空格(或”,”)隔开;

3、矩阵的行与行之间用”;”(或回车符)隔开;

4、矩阵的元素可以是数值、变量、表达式或函数;

5、矩阵的尺寸不必预先定义。

二、矩阵的运算

1、算术运算

MATLAB的基本算术运算有:+(加)、-(减)、(乘)、/(右除)、\(左除)、^(乘方)、’(转置)。运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。

(1)矩阵加减运算假定有两个矩阵A和B,则可以由A+B和A-B实现矩阵的加减运算。运算规则是:若A和B矩阵的维数相同,则可以执行矩阵的加减运算,A和B矩阵的相应元素相加减。如果A与B的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。

(2)矩阵乘法假定有两个矩阵A和B,若A为mn矩阵,B为np矩阵,则C=AB为mp矩阵。

(3)矩阵除法在MATLAB中,有两种矩阵除法运算:\和/,分别表示左除和右除。如果A矩阵是非奇异方阵,则A\B和B/A运算可以实现。

A\B等效于A的逆左乘B矩阵,也就是inv(A)B,而B/A等效于A矩阵的逆右乘B矩阵,也就是Binv(A)。对于含有标量的运算,两种除法运算的结果相同。对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系,一般A\B≠B/A。

(4)矩阵的乘方一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。

(5)矩阵的转置对实数矩阵进行行列互换,对复数矩阵,共轭转置,特殊的, *** 作符’共轭不转置(见点运算);

(6)点运算在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有、/、\和^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。

2、关系运算

MATLAB提供了6种关系运算符:&lt;(小于)、&lt;=(小于或等于)、&gt;(大于)、&gt;=(大于或等于)、==(等于)、~=(不等于)。关系运算符的运算法则为:

(1)当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0;

(2)当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成;

(3)当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。

3、逻辑运算

MATLAB提供了3种逻辑运算符:&(与)、|(或)和~(非)。逻辑运算的运算法则为:

(1)在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示;

(2)设参与逻辑运算的是两个标量a和b,那么,a&b a,b全为非零时,运算结果为1,否则为0。a|b a,b中只要有一个非零,运算结果为1。~a当a是零时,运算结果为1;当a非零时,运算结果为0。

(3)若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同维的矩阵,其元素由1或0组成;

(4)若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素由1或0组成;

(5)逻辑非是单目运算符,也服从矩阵运算规则;

(6)在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。

扩展资料:

1.获取矩阵元素

可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。

也可以采用矩阵元素的序号来引用矩阵元素。

矩阵元素的序号就是相应元素在内存中的排列顺序。

在MATLAB中,矩阵元素按列存储。

序号(Index)与下标(Subscript)是一一对应的,以mn矩阵A为例,矩阵元素A(i,j)的序号为(j-1)m+i。

其相互转换关系也可利用sub2ind和ind2sub函数求得。

2.矩阵拆分

利用冒号表达式获得子矩阵:

(1)A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。

(2)A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。

此外,还可利用一般向量和end运算符来表示矩阵下标,从而获得子矩阵。end表示某一维的末尾元素下标。

利用空矩阵删除矩阵的元素:

在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。

3、特殊矩阵

(1)魔方矩阵魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。对于n阶魔方阵,其元素由1,2,3,…,n2共n2个整数组成。MATLAB提供了求魔方矩阵的函数magic(n),其功能是生成一个n阶魔方阵。

(2)范得蒙矩阵范得蒙(Vandermonde)矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积。可以用一个指定向量生成一个范得蒙矩阵。在MATLAB中,函数vander(V)生成以向量V为基础向量的范得蒙矩阵。

(3)希尔伯特矩阵在MATLAB中,生成希尔伯特矩阵的函数是hilb(n)。使用一般方法求逆会因为原始数据的微小扰动而产生不可靠的计算结果。MATLAB中,有一个专门求希尔伯特矩阵的逆的函数invhilb(n),其功能是求n阶的希尔伯特矩阵的逆矩阵。

(4)托普利兹矩阵托普利兹(Toeplitz)矩阵除第一行第一列外,其他每个元素都与左上角的元素相同。生成托普利兹矩阵的函数是toeplitz(x,y),它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x,y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵。

(5)伴随矩阵MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。

(6)帕斯卡矩阵我们知道,二次项(x+y)n展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。函数pascal(n)生成一个n阶帕斯卡矩阵。

参考资料:

百度百科——帕斯卡矩阵

百度百科——MATLAB

参考代码:

>> s=0; for i=1:10, s=s+i^i; end, s

s =

  10405e+010

我是在命令窗口里面直接写的,如果要保存成脚本文件,只要第一行即可(注意去掉命令提示符)。

以上就是关于如何将Matlab的M文件变成EXE文件全部的内容,包括:如何将Matlab的M文件变成EXE文件、如何使用matlab仿真的结果快速导入生成应用硬件程序、MATLAB中,如何让自己编写的程序,变成源文件程序!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10098612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存