C语言实现MATLAB 6.5的M文件

合集下载

MATLAB 9.8 基础教程 第7章 M文件与MLX文件

MATLAB 9.8 基础教程 第7章 M文件与MLX文件

所有数据。在运行过程中,产生的所有变量均是工作区变量,这些变量一旦生成,就一直保持
在工作区中,除非执行clear命令将它们清除。
运行一个脚本文件等价于从命令行窗口中顺序运行文件里的语句。由于脚本文件只是一串命
令的集合,因此,只需像在命令行窗口中输入语句那样,依次将语句编辑在脚本文件中,然后
在MATLAB命令行窗口输入该命令文件的名字就会顺序执行命令文件中的命令。
>> type std
则显示内容如下:
பைடு நூலகம்
function y = std(varargin)
函数定义行
%STD Standard deviation.
H1行
以下注释行都是帮助文本
% For vectors, Y = STD(X) returns the standard deviation. For matrices,
7.1.3 函数M文件
函数M文件是第一个可执行语句以function开始的M文件,每一个函数文件都定义一个函数,它可 以接受参数、也可以返回参数。函数文件内定义的变量是局部变量,只在函数文件内部起作用, 当函数文件执行完后,这些内部变量将被清除。在一般情况下,用户不能靠单独输入其文件名来 运行函数文件,而必须由其它语句来调用。事实上,MATLAB提供的标准函数大部分都是由函数 文件定义的。
第7章 M文件与MLX文件
7.1 M文件
当用户要运行的命令较多或需要反复运行多条命令时,若在MATLAB命令行窗口中直接从键盘逐行 输入命令会显得比较麻烦,这时建立一个M文件则可以较好地解决这一问题。
7.1.1 M文件的建立与运行
M文件可以用任何程序建立和编辑,且在MATLAB提供的M文件编辑器窗口实现。

数学建模中的MATLAB程序在C语言下的实现

数学建模中的MATLAB程序在C语言下的实现

数学建模中的MATLAB程序在C语言下的实现薛申芳(邢台学院数学系,河北邢台054001)摘要:数学建模中的大量编程计算可通过MATLAB来完成,但M ATLA B受其自身功能限制,存在着执行速度慢、不能脱离MAT LAB平台运行等缺点,而C语言正好可以补充M ATLAB的不足之处,以前关于这方面的研究大多是在MAT-LAB6.X版本的基础上所做的,随着MATLAB7.X版本的推出,很多内容已经略显陈旧,通过在新的MA TLAB7.1和V isua l C++6.0平台上就它们之间的结合问题的探讨,对同一个问题的解决,在M ATLAB和C语言两个平台上的运行速度、代码编写复杂程度和是否可独立于平台单独运行等方面的比较,研究它们之间的优缺点,并就各类不同问题的求解应如何对它们进行结合做了阐述.关键词:数学建模;MATLAB;C语言中图分类号:TQ018文献标识码:A文章编号:1672-4658(2006)04-0091-041引在数学建模中,最常用的编程工具是MATLAB.它具有以下特点:(1)编程简捷,接近数学表示和人类思维;(2)计算结果的可视化功能强大方便;(3)具有强大且开放的工具箱.用M ATLA B编写程序所需时间往往比使用其他编程语言缩短许多,形成的程序代码简捷,易于扩展和移植,是当今世界上使用最为广泛的数学软件.MAT LAB语言是一种比通常高级语言更贴近用户的语言,这些特点使其在解决复杂数学计算和新算法的研究中具有优势.但M AT-LAB是一种解释性语言,它开发的程序不能脱离M ATLA B 环境,存在执行效率较低、交互性差、源程序不能脱离其环境运行等不足.对于数学建模要做的大量演示来说,使用起来很不方便.V isual C++是一种面向对象的可视化编程设计语言,是W indo w s平台下主要的应用程序开发环境之一,它几乎可以开发W indo w s应用的各个方面,并直接与系统及底层硬件交换数据,开发的系统具有容易维护升级、界面友好、代码效率高、执行速度快等优点,能用于底层直至面向用户的软件的快速开发,但缺乏对大量数据处理与分析、数据可视化方面的性能.M ATLAB和VC互有长处,将M ATLAB和VC相结合不仅能大大缩短建模时间,而且能有效提高模型演示的跨平台性,实现混合编程可以为数学建模提供强大的技术支持.2联合编程的接口和实现M ATLA B和C语言的联合编程大体可分为两类:一类是需要MAT LAB后台支持的混合编程;一类是独立于M ATLA B运行的编程方法,下面就这两类编程中M ATLAB 和C语言的接口问题做一下比较.2.1需要MATLAB后台支持的混合编程接口方法2.1.1引擎(Eng i ne)方式引擎(Eng i ne)是指一组M atl ab提供的接口函数(En-g i ne A P I函数),支持C语言.M atl ab Eng i ne采用C\S的计算方法,MATLAB做为服务器,C应用程序作为前端客户机.可实现的控制功能有(1)打开/关闭一个M atlab对话;(2)向M a tlab环境发送命令字符串;(3)从M atlab环境读取数据;(4)向M atl ab环境写入数据等.引擎程序可以在M ATLA B环境下编译和连接,也可以在V i sua l C++6.0的I DE中编译和连接.编译引擎的标准做法是在M atlab窗口中执行mex命令,该命令用于将C程序编译为DLL(动态联接库文件)或exe(可执行文件)程序.对于初次使用m ex一般要运行编译器的配置,即打入命令m ex-se t up.mex命令在执行时如果没有特殊说明,它会找到文件mexopts.bat作为自己的配置文件,而该文件是为生成m ex程序专用的,编译eng ine程序不能用这个配置文件.生成eng ine程序所需配置文件位于% matlab%\bi n\w i n32\mexopts,其中有若干.bat文件,对于VC第21卷第4期邢台学院学报Vo.l21.No.4 2006年12月J OURNAL OF XI NGTAI UN I VERS I TY Dec.2006①②[收稿日期]2006-05-11[作者简介]薛申芳(1957-),男,河北威县人,毕业于中国矿业大学,博士,副教授,主要从事信息技术、卫星自主导航的研究及数学教学工作.电话:(0319)7300877,,,,,,,言++6.0来说,对应的文件是m svc60eng m atopts.bat,用文本编辑器将其打开,找到/set M SVCD ir=%m atlab%0这一行,将后面的%m atl ab%修改为用户的VC安装目录.在调用en-g i ne的程序中必须加入头文件#inc l ude/eng i ne.h0.在MAT LAB6.5编程环境下,进入要编译的文件所在的目录,执行命令>>m ex-f m svc60engma t opts.bat exa m ple.c命令执行完毕,会生成examp l e.exe文件,可以双击运行它.Eng i ne方法不能脱离M atlab环境,如果想把程序拿到另外一台计算机上运行,则要求这台计算机也要安装同样版本的M atl ab,这种实现方式对机器依赖性太强,应用起来很不方便.2.1.2编译器方式利用M atl ab的C++Co m pil er将M文件编译为C源码,然后在C++编译器中调用.这种方法用到m cc.m cc的命令参数很多,可以用(m cc-?)在M ATLAB下显示出其所有参数及作用,通过设置不同参数可以实现很多功能:(1)将.m文件翻译为.c文件并编译为m ex程序供M a tl ab调用(m cc-x fun);(2)将.m文件翻译为.c文件并编译为m ex程序,同时将其直接和间接调用的所有.m文件进行编译,并且在生成的C代码中以注释的形式包含所有.m代码供M a tlab执行(m cc-x-h-A fun1fun2f un3,);(3)将.m文件翻译为C代码不进行编译(m cc-t-L c fun);(4)将.m文件翻译为C++代码不进行编译(m cc-t-L cpp fun).2.1.3生成可执行程序利用M atl ab的C++Co m p il e r,将M atlab函数编译成脱离M atl ab环境的可执行程序,在V C++中调用.这种方法与编译器方式类似,只是m cc命令的参数不同.它不仅能将.m文件编译为.exe文件,还可以将其编译为.d ll的m ex程序.当用m cc生成m ex程序时,m cc会以m ex程序格式生成C代码并调用m ex命令将其编译为.dll文件;当m cc用来生成独立运行的可执行程序时,m cc会生成W i n32应用程序格式的代码,并调用mbu ild命令将其编译为.exe 程序.因此使用m cc命令之前必须将m ex和m bu il d命令都配置好.如一MAT LAB程序exa m ple1.m,首先用m cc将其转化为C++文件:>>m cc-B cpp exa m ple1形成四个文件,分别为examp l e1_ma i n.c,exa m ple1_m cc _co m ponent_da ta.c,ex a mp le1.ct,f m ccExc l udedF iles.tx t.通过执行>>m cc-m g exa m ple1直接形成一个可执行文件examp l e1.exe,连带生成一个examp l e1.pdb,上面的四个文件也将一同生成.如果m文件中调用了多个MATLAB函数,应该在m cc 命令行上加-h,这样m cc将自动搜索所有必要的.m文件,并将其转化为.hpp或.cpp文件.VC中设置的具体步骤为:(1)设置V C头文件和库文件的搜索路径.打开菜单T oo l s->Options,在选项中选择D irecti ons,添加路径为% ma tl ab%\exte rn\i nc l ude%m atl ab%\exte rn\i nc l ude\cpp%m atl ab%\exte rn\li b\w i n32%m atl ab%\exte rn\li b\w i n32\M icrosoft\m svc60;(2)在VC中建立工程,将m cc生成的test.cpp和test. hpp复制在VC工程目录下,将exa m ple1.cpp加入C++工程中;(3)添加接口函数代码,程序中首先包含3个头文件:#i ncl ude/st da f x.h0#i ncl ude/m a tlab.hpp0#i ncl ude/test.hpp0此时可以在test.cpp中查看函数test的调用格式,并在VC程序中用相应格式调用,注意调用的参数类型为mwA rray,并且test.m函数必须有输入参数和输出参数;(4)编写消息处理函数;(5)设置工程选项.选择菜单P ro ject->Setti ng s,打开工程设置对话框,在C/C++属性页中选择分类为G en-era,l在预处理程序定义中加入M SVC IB M PC M S W I ND;选择分类为Code G eneration,在U se run-ti m e li brary列表中选择D ebug M ultithreaded在L i nk属性页中选择分类为Input,在对象/库模块中添加库文件:li b mm file.li b li bma tl b.li b lib mx.li b li b m a t.li b li b m atp m.li b sg.l li b li b mwsg l m.li b(用空格分隔),忽略库里填m svcrt.li b.完成上述设置后就实现了M atlab与VC++的连接.引擎方式中m ex是编译C/C++文件,而编译器方式中m cc是编译.m文件.利用M a tlab的C++Co m p iler将用M atlab函数编译成脱离M a tlab环境的可执行程序,在V C++中调用,这种方法简单、方便,但运行时要出现一个控制台窗口.另外,函数的输出参数难以直接和连接V C++函数中.2.2独立于MATLAB运行的接口方法有以下几类在C中用M ATLAB提供的C/C++M ath L i brary直接调用C++函数.M atlab C/C++M athL i brary(数学函数库)是M a tlab为C和C++语言提供的两个用子阵列运算的数学函数库,与M EX文件和M atlab引擎应用程序相比,它具有以下明薛申芳:数学建模中的MATLAB程序在C语言下的实现显的优点:(1)执行速度快;(2)内存需求小;(3)可以发布给没有M a tl ab的用户使用.但是,正是由于基于M atlab C/C ++数学函数库编写的应用程序的独立可执行性,导致了它们具有以下的缺点:(a)用户不能在基于M atlab C++数学函数库的应用程序中使用M atlab的函数Eva l()和In-Put();(b)用户不能在基于M atlab C++数学函数库的应用程序中调用M a tl ab的图形句柄系统函数;(c)用户不能在基于M atl ab C++数学函数库的应用程序中调用M atlab 工具箱的函数;(d)用户不能在基于M a tl ab C++数学函数库的应用程序中访问S i m uli nk;(e)M atlab中的一些语法在C语言和C++语言中得不到支持,例如/:0和/[]0.由于以上优缺点,基于M a tlab C++数学函数库编写的应用程序非常适合应用于需要进行大规模计算并且没有图形输出的场合,用户也可以使用第三方的图形系统来显示M atlab C++数学函数库的计算结果.利用M atco m软件将M文件编译为CPP源代码,同时编译为EXE或DLL产生的CPP源代码可以在C++编译器中调用.M a tcom是一个十分有用的翻译器,可以把M文件翻译成C++源文件,并编译为脱离MATLAB环境可独立运行的程序.比较流行的为M atco m4.5版本,编译环境是VC++.它的运行过程一般为:打开MATCO M程序,在file菜单中选着open项,选择要编译的.m文件,再在fil e菜单中选着co mpil e to exe或co mpil e to dl,l即可编译生成.exe或.dll文件.通过对.m在M ATLA B中的执行过程和经过M ATCOM 编译成.exe文件后执行的情况来比较两者的区别,发现(1)其运行速度明显加快;(2)可以脱离M ATLA B环境执行,不需要M ATLA B后台的支持,其独立运行性良好;(3)对于特别复杂的图形不能支持,需要调用M ATLAB图形库,否则将出现编译错误.图1、图2是一个.m文件在M ATLAB下运行,和通过M ATCOM编译后生成的.exe文件运行时的截图间的比较.图1在M ATLA B中运行的结果图2形成的.exe文件运行的结果3在数学建模中的应用下面我们通过一个卫星定轨方面的模型实例,具体说明M ATLAB和C语言结合起来在数学建模中的应用.(1)问题:假设卫星只受地心引力的作用,地球为圆形球体,由地面站测得卫星发射成功后在地心惯性坐标系中的初始位置和速度分别为:X=(r,v)r0=(7120.64,176.842.112.678)和v0=(-0.172005,3.16871,6.78577)试确定卫星飞行轨道.(2)数学模型:由问题可知,卫星轨道满足开普勒方程[1]d2rdt2=-LRr3(1)其等价于方程组X=f(X,t)(2)其中X=(r,v),r=(x,y,z),v=(v x,v y,v z),f(X,t)=(v, -Lrr3).把(2)式离散化,得X K=X K-1+f(X K-1,t K-1)T(3)利用(3)式和初始时刻的位置和速度,就可以求出以后各时刻的位置和速度,从而确定卫星轨道.(3)M ATLA B程序(m ox i ng.m)m iu=398601.19;%引力常数rs=[7120.64,176.842,112.678];%初始位置vs=[-0.172005,3.16871,6.78577];%初始速度x0=[rs,vs];%初始位置和速度r=sqrt(x0(1)^2+x0(2)^2+x0(3)^2);%初始卫星-地心距离T=1;%采样周期为1秒m=6100;%迭代次数,即时间推进次数f o r k=1B m;x=x0+[vs,-m i u/r^3*rs]*T;%由前一时刻位置和速度得到下一时刻的位置和速度向量邢台学院学报2006年第4期X (k)=x (1); Y (k)=x (2); Z(k)=x (3);x0=x ;r=sqrt(x0(1)^2+x0(2)^2+x0(3)^2);rs=x0(1B 3); %x0的前三个元素为位置向量v s=x0(4B 6); %x0的后三个元素为速度向量endp l o t 3(X,Y,Z)再利用MAT CO M 4.5对mox i ng .m 文件进行co m pli e to exe ,编译形成m ox ing .ex e ,mox i ng .cpp ,mox i ng .h ,m ox i ng ,m ox ing .r ,g -m ox i ng .cpp ,g-mox i ng .ob j 等文件,其中m ox-i ng .ex e 是可执行文件(其执行结果见图3、图4),m ox i ng .cpp ,m ox i ng.h ,g-mox i ng .cpp 是生成的C 语言源代码,可以将它们放在VC++6.0中进行编译和处理,制作自己需要的可执行文件.其中m ox ing .h 是头文件,m ox i ng .cpp ,g-m ox ing .cpp 为主文件.m ox i ng .h 文件内容:ifnde f __m ox i ng_h #de fi ne __m ox ing_h #end if //__m ox i ng_h m ox i ng .cpp 文件内容:略g -m ox i ng .cpp 文件内容:#i nclude /m atli b .h 0#pragma hdrstop #i nclude /mox i ng .h 0intm a i n() {beg i n_scopeiniM t (MATCOM _VERS I ON );#i nclude /mox i ng .cpp 0ex iM t ();re t urn 0;end_scope}图3 在MATLAB 中运行结果图4 形成文件m ox i ng .exe 运行结果由于.ex e 文件在任意W I N DOW S 系统下可独立执行的特点,使的本例的演示工作变的更加简单和方便;同时如果用C 语言去做本例编程的话,通过对两者代码的比较,可以看出用C 语言编程将是一件十分复杂的事情.4 结论M ATLA B 和C 语言的这几种接口方法,各自有自己的优缺点.需要M ATLAB 后台支持的方法可以实现更多的功能,满足用户的更多需要,但执行速度慢、需要M ATLAB 大平台的支持,对程序的应用和推广带来了很大的不便;可独立运行的方法能更好的应用和推广,但其功能有限,特别是缺乏对大型图形库的支持,使得其应用范围有限.在应用中应该根据其需要进行选择.如果建模中算法复杂,不要求实时性,且对图形库要求较高,则采用M ATLA B 平台支持的方法较好;如果作为模型演示,要求速度快,效率高,且对图形库的要求比较低,则采用独立与M ATLAB 平台的方法比较好.5 结束语当然M ATLA B 和C 语言的接口还有其他方法,比如可以利用M ideva 软件将.m 文件编译为.EXE 或.DLL 文件.而且随着一些新的可跨平台、功能更强大的编程语言的出现,如J AVA 、NET 等,M ATLAB 与它们的联合编程也将会逐步应用于数学建模中,它们之间的接口问题也值得研究.参考文献:[1]刘林.航天器轨道理论[M ].北京:国防工业出版社,2000.[2]向海涛,郑加.M atlab 与VC ++结合的桥梁)))M i deva[J].计算机工程与应用,2002,38(5):132-134.[3]辛菁,刘丁,杨延西.基于MATCO M 的VC 与MATLAB 集成应用研究[J].现代电子技术,2002,(7):52-54.[4]张培强.MATLAB 语言[M ].合肥:中国科学科技大学出版社,1995.[5]刘志俭.M atl ab 应用程序接口用户指南[M ].北京:科学出版社,2000.薛申芳:数学建模中的MATLAB 程序在C 语言下的实现。

MATLAB程序设计M文件程序控制结构程序调试程序举例

MATLAB程序设计M文件程序控制结构程序调试程序举例
x=input('Please input x=:');
y=input('Please input y=:');
[rho,the]=tran(x,y);
rho
the MATLAB中,函数能够嵌套调用,即一种函数能够调用别旳函数, 甚至调用它本身。一种函数调用它本身称为函数旳递归调用。
例6 分别建立命令文件和函数文件,将华氏温度f转换为 摄氏温度c。
21.1111
x=
21.1111
(5). 函数文件旳其他有关概念
①局部变量和全局变量:
局部变量只存在于单个函数工作空间,全局变量 经过global定义,可穿行于不同函数工作空间, 涉及基本工作空间workspace。
函数文件旳内部变量是局部旳,与其他函数 及MATLAB内存相互隔离; 而假如在若干函数中把某一变量定义为全局 变量,那么这些函数将公用这个变量,全局 变量旳作用域是整个MATLAB旳工作区,即 全程有效,全部函数都能够对其存取和修改。
if (nargin == 1) tol = max(size(x)) * max(s) * eps;
程序部分
end
r = sum(s > tol);
(2)命令m文件建立及其运营
建立 涉及下列环节: 进入m文件编辑器 输入程序 定义文件名,保存程序
命令M文件旳运营方式: 直接在命令窗口输入该文件旳文件名 在m文件编辑器中打开该文件后点击工具条中
② M文件模式
将matlab语句构成旳程序存储成以m为扩展名 旳文件,然后再执行该程序文件,这种工作模式 称为程序文件模式。
程序文件不能在命令窗口下建立,因为命令窗口 只允许一次执行一行上旳一种或几种语句。

C语言环境中调用Matlab程序指南

C语言环境中调用Matlab程序指南

C语言环境中调用Matlab程序指南甄梓宁znzhen@Matlab在计算方面功能强大、编写简单,但是要运行Matlab程序必须装有Matlab并且用户界面也不够完善,因此除了计算的其他部分采用C等更规范完备的语言进行编写是较好的选择。

本文就对如何在C程序中调用Matlab程序作说明。

在C程序中调用Matlab程序有两大类方法。

第一种是调用Matlab引擎,第二种是将m文件打包成dll文件在C语言环境下调用。

前者虽然易于实现,可以实时监控程序的运行,但是独立性差,需要安装完整版Matlab,且每次调用都会启动MATLAB.exe进程;后者则实现复杂,调试麻烦,但只需安装MCR(Matlab Component Runtime),耗费资源较少。

关于MCR,请见第四章的说明。

至于两种方法需要在C环境中如何配置请见第五章。

而反过来若要在Matlab下调用C程序则一般使用Matlab自带的mex工具,在此不作介绍。

一、调用Matlab引擎调用Matlab引擎可以在WIN32、MFC中使用,它的原理实际上相当于打开一个精简版的Matlab然后往里面输命令。

下面是调用Matlab中的加法程序add.m的例子。

先在Matlab的work目录下创建add.m文件并编写程序如下:function s = add (a, b)s = a+b;在C程序中,首先打开精简版的Matlab:(所需头文件,引用库等见第五章)Engine *ep = engOpen (NULL);编译运行后,会自动打开一个命令行监控窗口,输入pwd就可以看到当前的工作目录,于是需要先将工作目录转换至存放add.m的目录:engEvalString (ep, ”cd ..\\..\\work”);engEvalString是往Matlab里输命令的函数,显然我们的目标是成功运行:engEvalString (ep, ”s=add(a,b)”);当然,目前Matlab中并没有a和b两个变量,因此需要在C中初始化这两个变量并转换成Matlab基本变量类型mxArray,才能将它们输入到Matlab中。

matlab实验

matlab实验

实验一 MATLAB基本操作一、实验目的1、了解MATLAB应用程序环境2、掌握MATLAB语言程序的书写格式和MATLAB语言程序的结构。

3、掌握在MATLAB应用环境下编写程序4、掌握MATALB调试过程,帮助文件5、掌握MATLAB语言上机步骤,了解运行一个MATLAB程序的方法。

6、本实验可在学习完教材第一章后进行。

二、主要仪器及耗材PC电脑,MATLAB6.5软件三、实验内容和步骤1、MATLAB语言上机步骤:(1)、进入系统在C盘或其他盘上找到MATLAB或MATLAB6.5,然后双击其图标打开文件夹。

然后进行编辑源程序->编译->连接->执行程序->显示结果(2)、常用命令编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。

2、有下面的MATLAB程序。

(1)数值计算功能:如,求方程 3x4+7x3 +9x2-23=0的全部根p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根(2)绘图功能:如,绘制正弦曲线和余弦曲线x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x));(3)仿真功能:如,请调试上述程序。

3、熟悉MATLAB环境下的编辑命令,具体见附录一。

三、实验步骤1、静态地检查上述程序,改正程序中的错误。

2、在编辑状态下照原样键入上述程序。

3、编译并运行上述程序,记下所给出的出错信息。

4、按照事先静态检查后所改正的情况,进行纠错。

5、再编译执行纠错后的程序。

如还有错误,再编辑改正,直到不出现语法错误为止。

四、实验注意事项1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。

分析讨论对策成功或失败的原因。

2、总结MATLAB程序的结构和书写规则。

五、思考题1、matlab到底有多少功能?2、MATLAB的搜索路径3、掌握使用MATLAB帮助文件实验二 MATLAB 矩阵及其运算一、 实验目的1、了解矩阵的操作,包括矩阵的建立、矩阵的拆分、矩阵分析等2、了解MATLAB 运算,包括算术运算、关系运算、逻辑运算等3、掌握字符串的操作,了解结构数据和单元数据。

matlab课件M文件程序设计基础

matlab课件M文件程序设计基础
另外,abs函数还可求②复数矩阵的模, ③实数的绝对值
多行字符串数组直接创立 AB=[S1;S2]
要求:S1和S2长度相同,以保证各行长度相等
例补9 length(a) length(A) ab=[a;A,‘ ’] %补2个空格 ab(1,1) ab(2,1) ab=[a;A] %出现错误因长度不同,不能组合
入参数和返回参数。 function y = subfun( t )
➢ 函数名最好要和函数文
件名一致,通过函数文 件名调用函数
➢ 函数文件内部定义的函 数,通过函数名调用
if
sum(t)>0 y=abc(t);
函数文件
else
subfun.m
y=cba(t);
End
例:subfun.m
subfun(-7:4)
➢ 该文本文件可以用任何文字处理软件对进编辑, 也可以用“type filename.m〞形式在命令工作空 间翻开
➢MATLAB是解释性编程语言,逐句解释运行程序
➢MATLAB的各种工具箱都是用M文件组成,除内 嵌(built-in)M文件以外,用户可以对其进行修改和扩 充,进行二次开发
➢M 文 件 编 辑 器 是 MATLAB 自 带 的 , 是 一 个 Windows 的 标 准 界 面 , 主 要 有 file,edit,view,debug,breakpoint和text等菜单栏,上机时 参考P17第一章第4节M文件编辑器
例补1:无穷大inf
y=1/0 %无穷大 inf
1/y
%0
➢常用永久变量列表
永久变量 ans eps
Inf或inf pi i或j
Nan或nan nargin nargout realmax realmin

VC中调用matlab配置方法

VC中调用matlab配置方法

ATLAB提供了许多方法与VC程序的通信:MATLAB引擎(ENGINE)模式,采用了客户机/服务器(CLIENT/SERVER)的计算形式,通过MA TLAB应用程序接口(API)中有关函数,在VC 环境中调用MATLAB函数,但此种方法需要MATLAB环境后台支持,因此系统必须安装MATLAB;MA TLAB本身提供的MCC工具编译,编译m文件生成VC++或c语言,直接在VC中使用;MATLAB的MEX工具将m文件编译成DLL,供VC调用。

MATLAB现具有的MA TLAB Add—in(其包装了MCC、MEX)更方便了第二、三种方法的应用,现本系统的实现就是以第三种为基础的。

2.1 MA TLAB与VC实现互连为了在开发时实现对MA TLAB的具体功能的调用,应首先在操作系统中安装MATLAB工具软件,之后并运行此工具软件,依次执行“mex –setup;mbuild –setup;cd(prefdir); mccsavepath;”命令。

之后运行VC开发工具,从VC++菜单中依次打开“Tools->Customize->Add-ins and Macro Files”,选中MA TLAB Add—in宏,可以看到工具栏中多了一个。

现在VC就可以利用它来得到m文件所对应的c、c++文件。

2.2 开发工具VC运行环境设置开发时,须对VC的开发环境变量进行设置。

通过“Tools->Options->Directories”找到的“Directories”项中添加环境变量。

添加头文件和库文件搜索路径有(本计算机的文件搜索路径为):F:\MATLAB6P5\EXTERN\INCLUDEF:\MATLAB6P5\EXTERN\INCLUDE\CPP同时将MA TLAB的链接库添加到VC中。

从“Tools->Options->Directories”中“Show directories for:”下拉框里选择“Library files”,然后再在“Directories”项中添加环境变量。

第二讲 M文件及函数的编写

第二讲 M文件及函数的编写

case{2,4,6}
disp(‘even numbers’)
otherwise
disp (‘ mistake!’)
end2021/5/27
14
M文件及函数的编写
分支语句和C语言的区别:
当开关表达式的值等于某表达式,执行该语句 后结束该结构,不用 break otherwise 语句,不是 default 程序的执行结果和各个case顺序无关
3. 交互式输入Байду номын сангаас
(1) 用户输入提示命令input
M文件及函数的编写
input 命令用来接收用户从键盘输入数据、 字符串或表达式,并接收输入值。其常用格 式: >> R=input (‘How many apples’)
运行此命今后,将给出文字提示,并等待键盘 输入。
>> R=input(‘what is your name ?’,’s’)
新建M文件 一般过程 编写指令
调试运行
M文件及函数的编写
用户在编制此类文件时,只需把所要执行的命令 按行编辑到指定的文件中,程序运行时, MATLAB按行执行这些指令。
2021/5/27
4
几点规则:
M文件及函数的编写
● 建立好的书写风格,保持程序的可读性。
● m为文件的扩展名,在低版本的MATLAB中 还要注意文件名不超过8位,文件名和变量的命 名规则相同。
2.在command window中调用:num=my_fact(11)
M20A21T/5/2L7 AB函数为:prod(1:1000)
24
使用tic和toc函数, 测试一下该函数的运行效率。 显式程序运行的时间。
tic; num=my_fact(500); toc

matlab M文件的建立与调试

matlab  M文件的建立与调试

三、m文件的分类
可以存取的M文件— 称命令文件(程序文件、脚本文件)
可调用M文件 — 称函数(function)文件
1、程序文件 以.m格式进行存取,包含一连串的MATLAB指令和 必要的注解。与在命令窗口逐行执行文件中的所有指 令,其结果是一样的。没有输入输出参数。 程序运行时只需在命令窗口中键入其名称即可
第二章
2.1 变量与赋值 2.2矩阵的初等运算 2.3元素群运算
基本语法
2.4逻辑判断及流程控制 2.5基本绘图方法 2.6M文件及程序调试
2.6 M文件及程序调试
一、M文件简介
• 用户如想灵活应用matlab去解决实际问题,充分 调用matlab的科学技术资源,就需要编辑m文件 • 包含matlab语言代码的文件称为m文件,其扩展名 为m。
• keyboard —
当keyboard在m文件中出现时,它停止 文件的执行并控制键盘,用于修改程序。
a=input('a=');
pause(2) b=input('b=');
A='press any key to continue..'; disp(A) pause c=input('c='); keyboard d=b*b-4*a*c; disp(A) pause x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)]
主要特征: (1)、用clear,close all等语句开始,清除工作空间原有的 变量与图形,以避免其它已执行的程序残留数据对本程序 的影响。 (2)、前几行通常是对此程序的说明。这些注释行必须以 % 开始,以便计算机执行时不予理会。(注释部分) (3)、程序的主体 如果程序中有全局变量,即在主程序与主程序中共有 的变量,应在程序中的起始部分注明。语句为: global 变量名 (4)、整个程序按Matlab 标示符的要求其文件名,并加 上.m后缀。

matlab编写M文件(函数)

matlab编写M文件(函数)

matlab编写M文件(函数)matlab的命令编辑窗口(Command Window)界面主要是用来调用系统命令、调用自定义函数(m文件里定义的函数)或编写一些较小的代码。

在遇到需要用到比较多的代码才能摆平的需求时,在命令编辑窗口每一行都有提示输入符号,用起来不是很方便(如前所述而且命令编辑窗口主要是用来调用命令之用),此时我们不得不求助于matlab的m文件来编写代码。

所以,记录一下经自行探索其编写方式后的入门过程:版本:MATLAB 7.9.0(R2009b)1.新建m文件打开matlab软件-->file-->new-->Function m-file经过此步骤之后,matlab会弹出一个新的编辑窗口,并生成少许代码如下:[plain]view plaincopyprint?1.function [ output_args ] = Untitled( input_args )2.%UNTITLED Summary of this function goes here3.% Detailed explanation goes here4.5.6.7.8.end这些代码是一个m-函数的模板。

function:表示编写的是一个函数。

output_args: 表示编写此函数的返回值(不同于C语言的是需要被返回的值无需使用return语句,只要将outp_args相应的参数拿到代码中赋值即可,同一般变量的使用),各返回值间用逗号隔开。

input_args: 此函数的输入参数,各参数之间用逗号隔开。

Untitled: 这是您所编写函数时所定义的函数名。

注意:函数名和m文件名需要保持一致。

如刚所创建的m文件在工作空间时命名为“RungeKuttaCalculate.m”则相应的函数名也需要为“RungeKuttaCalculate”,否则会引起报错。

%: 是matlab的注释语句的注释符,相当于C语言中的行注释符"//",在这里你可以描述此函数的功能,参数含义和返回值含义,使其含义更加明确。

matlabM文件PPT课件

matlabM文件PPT课件
以文件名存入
然后在MATLAB命令窗口调用该函数:
[s,p]=fcircle(10)
MATLAB
系统文件——s函数
用于描述系统运动的专用函数,是特殊的 m 文件。 完整函数调用的命令格式:
s 函数有3类: 由simulink结构图自动创建 可用c语言程序设计mex文件直 接定义
用函数m文件编写
MATLAB
注意问题:
+ 1. 函数m文件第一行必须以单词function作为引 导词,表示该M文件是一个函数文件,必须遵循 如下形式: function [输出参数]=函数名(输入参数)
+ 2. 函数名的命名规则与变量名相同,m文件的文 件名必须是<函数名> .m。
+ 3.函数执行后,只保留最后的返回结果,不保留 任何中间过程。程序中的变量均为局部变量, 不保存在工作空间中,其变量只在函数运行期 间有效,随函数调用的结束而从工作空间消除。
文件的分类
M文件有两类:命令文件(脚本文件)和函数 文件。它们的扩展名均为.m。
①命令文件:将用户在MATLAB环境下直接输入的多条语 句或者命令,存 放为 .m 后缀的文件,在命令行键入文 件名,来替代在命令窗口输入多条语句,一次执行成批 命令。
②函数文件:它是有特定书写规范的M文件。如果M文件 第一行包含function, 则此文件为函数文件。每个函数 文件都定义一个函数。用来扩充Matlab的应用范围和满 足用户不同的实际需求。
MATLAB
2)函数帮助信息行 函数信息行:给出函数的帮助信息,帮助信息
要从%开头,并放在一行的开头,用help+函数名 可查询到;
3)函数体----是函数的功能实现部分 4)注释

第4章MATLAB中M文件和程序设计课件

第4章MATLAB中M文件和程序设计课件
第4章MATLAB中M文件和程序设计
4.2 命令文件和函数文件
二、函数文件
函数文件的使用比命令文件更加灵活,能够更好的实现复杂问题的功能模块划 分。函数文件如同一个“黑箱子”,调用者仅仅需要把输入变量传递给函数, 就会得到函数的输出变量,即函数的运行结果。 对函数文件有如下的描述:
➢函数文件要在第一行用function关键字来显式的定义; ➢函数文件有输入变量和输出变量; ➢函数文件的名字和第一行所定义的函数名相同; ➢可以用比函数定义中数目少的输入变量和输出变量
case value_2 commands_2
┅ case value_n
commands_n otherwise
commands_ow end
第4章MATLAB中M文件和程序设计
4.1 程序控制语句
【说明】 ➢表达式exp_const的值和哪一个case语句后的测试值相等,就执行那个 case语句下的语句组。如果exp_const和所有测试值都不相等,就执行 otherwise后的语句组commands_ow。 ➢switch后的exp_const表达式可以为标量或者字符串。对于标量形式,用关 系运算符“= =”比较,对于字符串形式,用函数strcmp比较。 ➢case语句后的value_n值可以是标量、字符串,也可以是细胞数组。如果是 细胞数组,Matlab会把表达式exp_const的值和 细胞数组中的每个元素比较,只要有一个元素和 exp_const值相同,比较结果就为相等。
➢命令文件是用“.m”为扩展名的文件,只要命令文 件在搜索路径上,在命令窗口键入文件名就可以 运行命令文件。
例4.2.1:编写命令文件求解小于1000且为2的整数次幂的正整 数。
第4章MATLAB中M文件和程序设计

第五章 MATLAB的M文件编程PPT

第五章  MATLAB的M文件编程PPT






>>s
观察结果,如图5-5。

图5-3代码编辑框 图5-5 显示结 图5-4保存文件
5.1.2 M文件的打开

上面已经创建了一个M文件,名为test.m。打开M文件的方法: 【File】/【Open】/找到对应的M文件即可 通过edit mfiles命令编辑某个已经存在的M文件,其中mfiles为用户需要编辑的文 件名(可以不带扩展名),如edit test.m 单击工具栏上的 也可以打开对应的M文件 打开M文件的方法很多,这里只介绍常用的几种。

5.1.3 M文件的基本内容

下面介绍一个简单地M文件的实例 【例5-1】简单函数M文件示例 本例以一个求n的阶乘的函数M文件为例,简单介绍M文件的基本单元。代码如下: fact.m function f = fact(n) % Compute a factiorrial value. % usually denoted by N! % Put simple,Fact(N) is PROD(1:N). f=prod(1:n); %注释 %函数体或脚本主体 %函数定义行,脚本式M文件无此行 %H1行
(2) M脚本文件的基本结构



由%号起首的H1行(The first held text line),包括文件名和功能简述。
以%开头的在线帮助文本(Help text)区:H1行及其之后的所有连续注释行构成整个在 线帮助文本。它涉及文件中关键变量的简短说明。 编写和修改记录:该区域文本内容也都以%开头;标志编写及修改该M文件的作者、日期 和版本记录。它可用于软件档案管理。 程序体(附带关键指令功能注解)。注意:在M文件中,由%号引领的行或字符串都是 “注解说明”,在MATLAB中不被执行。

MatlabM文件编程

MatlabM文件编程

函数文件例3 函数文件例3:多个输出参数
function[avg,stdev,r]=ourstats(x) % ourstats多输入输出参数示例 ourstats多输入输出参数示例 % 该函数计算处理矩阵,得到相应的均值、标准差和矩阵的秩 [m,n]=size(x); if m==1 m=n; end % Average avg=sum(x)/m; % Sandad deviation stdev=sqrt(sum(x.^2)/mstdev=sqrt(sum(x.^2)/m-avg.^2); % Rank r=rank(x);
M文件调试
M文件的调试
可以在文件编辑器中进行
M语言的文件编辑器不仅仅是一个文件编辑器,还是 一个可视化的调试开发环境
可以在命令行中结合具体的命令进行
M文件调试
应用程序的错误
语法错误
包括词法或者文法的错误
运行时的错误
指程序运行过程中得到的结果不是用户需要的结果
程序的调试是在程序无法得到正确结果时进行程 序修正的唯一手段
(2)M文件模式
将MATLAB语句构成的程序存储成以m为扩展名的 MATLAB语句构成的程序存储成以m 文件,然后再执行该程序文件,这种工作模式 称为程序文件模式。
M语言文件可以分为主程序文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。 M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。 MATLAB提供了meditor编辑器编辑M文件 注意: (1)不可用汉字命名(若用汉字命名虽然可以打开M文 件,但是编译运行时会出错); (2)文件名不可与MATLAB内置函数 重名; (3)文件名不可以以数字命名。
在函数文件中可以包含多个函数,其中第一个函数称为主函数, 在函数文件中可以包含多个函数,其中第一个函数称为主函数, 其函数名与文件名相同, 函数文件中的其他函数称为子函数, 其函数名与文件名相同,在M函数文件中的其他函数称为子函数, 它只能由这一函数文件中的主函数或其他子函数引用

MATLAB 的M文件

MATLAB 的M文件

函数文件的基本格式
(1)函数定义行: function[返回参数列表]=函数名(输入变量) (2)%H1行及帮助文档:解释此函数的功能 (3)函数主体及注释 (4)空行:也占位置,也有行号
例题:6-1
● function y= average( x) ● % AVERAGE Mean of vector elements. ● % AVERAGE(X),Where X is a vector, is the mean of vector elements. ● % Nonvector input results in an error. ● [m,n]=size(x); ● if (~((m==1)|(n==1))|(m==1&n==1)) ● error('Input must be a vector') ● end ● y=sum(x)/length(x);
永久变量(persistent)只能在函数M文件中定义和使用, 且只允许定义它的函数存取。
脚本文件过程中产生的变量均为全局变量,保存在内 存工作空间。函数文件中产生的变量如果不是特别声明均 为局部变量。
4、函数参数
1)确定函数参数个数 对一些不知道输入输出参数个数的函数,调用时不能确定要
提供多少参数,需测试确定,避免调用出错。
N]=函数名(参数1,参数2,… ,参数M)。
6、函数文件的调用
例6-2:定义函数
(1)计算:f (1) f (2) ( f (3))2
(2)[-1,1] 画图
6、函数文件的调用
例6-2:定义函数
function out=fun_1(in) out=(in.^3-2*in.^2+in-6.3)./(in.^2+0.05*in-3.14)

Matlab中Mex文件的创建和使用方法

Matlab中Mex文件的创建和使用方法

3
第3页/共19页
2. 验证配置的正确性
验证分两步进行:首先验证mex命令是否可以将C源码转换成MEX文件;然后 再验证mcc命令是否可以将M文件转换成MEX文件。mcc命令可以在M文件转换成 C源码后,自动调用mex命令,将C源码转换成MEX文件。
利用MATLAB自带的yprime.c和yprime.m来验证mex和mcc命令。
9.1.2 编译器的局限性
1. 不支持M脚本文件的编译。
2. 不支持用户自定义的对象。
3. 不支持eval,input,inline等函数。
4. 不支持Java接口。
9.2 编译器的安装和配置
9.2.1 配置MATLAB编译器的前提准备
1. 计算机必须安装有ANSIC/C++编译器。下面任何一种C/C++编译器均可。
(1)验证mex应用程序
先将<matlab>\extern\example\mex目录下的yprime.c文件复制到自己的目
录下,并改名为my_yprime.c。
>>mex my_yprime.c
%由my_yprime.c文件生成my_yprime.dll文件
>>my_yprime(1,1:4)
%运行my_yprime.dll文件
ans=
2.0000 8.9685 4.000 -1.0947
>>which my_yprime
%获得my_yprime.dll文件的位置信息
D:\Documents and Settings\sllu\My Documents\MATLAB\MYFILE\mex\my_yprime.dll
>>clear my_yprime.dll %删除my_yprime.dll文件

C语言实现MATLAB_6[1].5中M文件的方法

C语言实现MATLAB_6[1].5中M文件的方法

C语言实现MATLAB6.5中M文件的方法摘要:本文着重描述了运用MATLAB命令将M 文件翻译为C语言程序,并修改为可直接调用的C 语言函数的方法,使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。

运用该方法将能够使C语言能直接使用MATLAB当中已经完成的数学计算功能,大大扩充了C语言的数学计算功能和开发效率。

关键词:MATLAB;M文件;C语言接口众所周知,MATLAB是一个功能强大的数学软件,擅长于用矩阵运算完成各种数学功能。

但是其程序需要在MATLAB环境下解释执行,效率不高。

如果能将它强大的函数库用于C语言,利用C 来编译执行,MATLAB将能发挥更大的作用。

所以,MATLAB从5.0开始已经提供了与外部C/C++程序的应用程序接口,为利用C语言调用MATLAB的函数提供了可能。

但是MATLAB的接口发展很快,到MATLAB6.5已经提供了对VC7.0的支持,同时对C的接口相对于5.X版本有了一定的改变。

在MATLAB当中,我们利用M文件来实现函数,每一个M文件实现一个单独的功能,这一点和C语言当中的函数是相互对应的。

所以,如果我们能将MATLAB中的M文件转化为C语言下的一个单个函数,就能实现MATLAB中相应的功能。

实现方法整个过程可分为三个主要部分,用MATLAB 将M文件翻译为C语言文件,从生成的C语言文件提取出有用语句,编写数据转换程序实现参数格式转换。

整个过程最终将把M文件翻译成C语言当中的一个具有相同功能的函数,供其它的程序调用。

本文用一个最简单的M文件来示例:文件名:messay.mfunction c=messay()a=3.4;b=5.6;c=sqrt(a)+sqrt(b);该m文件实现了计算1、将M文件编译为C语言文件为了将M文件翻译为C语言文件,需要进行一定的设置,这里假设编写C语言的环境为VC6.0,在MATLAB命令提示符下输入mex-setup 和mbuild-setup命令,在相应选项中选择Microsoft Visual C/C++即可。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言实现MATLAB 6.5中M文件的方法
作者:宋威出处:计算机信息技术责任编辑:方舟 [ 2005-01-19 09:57 ]
摘要:本文着重描述了运用MATLAB命令将M文件翻译为C语言程序,并修改为可直接调用的C语言函数的方法,使用该方法所需要注意的方法局限性和MATLAB版本差异的影响。

运用该方法将能够使C语言能直接使用MATLAB当中已经完成的数学计算功能,大大扩充了C语言的数学计算功能和开发效率。

关键词:MATLAB;M文件;C语言接口
众所周知,MATLAB是一个功能强大的数学软件,擅长于用矩阵运算完成各种数学功能。

但是其程序需要在MATLAB环境下解释执行,效率不高。

如果能将它强大的函数库用于C语言,利用C来编译执行,MATLAB将能发挥更大的作用。

所以,MATLAB从5.0开始已经提供了与外部C/C++程序的应用程序接口,为利用C语言调用MATLAB的函数提供了可能。

但是MATLAB的接口发展很快,到MATLAB 6.5已经提供了对VC 7.0的支持,同时对C的接口相对于5.X版本有了一定的改变。

在MATLAB当中,我们利用M文件来实现函数,每一个M文件实现一个单独的功能,这一点和C语言当中的函数是相互对应的。

所以,如果我们能将MATLAB 中的M文件转化为C语言下的一个单个函数,就能实现MATLAB中相应的功能。

实现方法
整个过程可分为三个主要部分,用MATLAB将M文件翻译为C语言文件,从生成的C语言文件提取出有用语句,编写数据转换程序实现参数格式转换。

整个过程最终将把M文件翻译成C语言当中的一个具有相同功能的函数,供其它的程序调用。

本文用一个最简单的M文件来示例:
文件名:messay.m
该m文件实现了计算
1、将M文件编译为C语言文件
为了将M文件翻译为C语言文件,需要进行一定的设置,这里假设编写C
语言的环境为VC6.0,在MATLAB命令提示符下输入mex -setup和mbuild -setup 命令,在相应选项中选择Microsoft Visual C/C++即可。

在MATLAB命令行中使用mcc命令将messay.m翻译为C代码。

其中的参数-m代表mcc命令将把m文件翻译成C语言的代码。

翻译命令将在messay.m所在的文件夹下生成三个C语言文件:messay.h,messay.c和messay_main.c。

其中messay_main.c提供了main()函数;messay.h 提供了整个程序的函数声明;messay.c包含了MATLAB生成的功能函数。

这三个文件当中,messay.c中包含了我们所需要的数学函数。

2、提取有用语句
通过分析,发现由mcc生成的代码内部参数传送方式由MATLAB链接库规定,难以改动,因此需要提取有用的代码,并更改生成代码的参数传递方式。

同时从生成代码的注释中可以看出,真正蕴含M文件功能实现的代码段都在Mmessay()函数当中(该函数名的默认构造方式为前缀M加上M文件的文件名),而其它的生成函数仅实现参数传递和标准化接口服务的功能。

所以提取代码的具体方法是利用messay.c当中生成的static mxArray * Mmessay(int nargout_)函数,对该函数进行修改,而其他的生成函数都可以忽略不用。

原生成的Mmessay()代码如下:
在生成代码当中,mclSetCurrentLocalFunctionTable和mclSetCurrentLocalFunctionTable函数为两个外部函数,将参数传给外部,与其相关的部分都对C程序使用数学函数没有影响。

最终实际有用并执行运算的只有一句:
实际上,由MATLAB翻译的C语句中,大部分的和实际计算有关的语句和自生成的函数都以mlf开头,所以寻找有用语句的简单方法就是直接寻找mlf为前缀的代码。

3、参数格式转换
应当指出,MATLAB所有的计算都是基于一种名为mxArray的数据结构之上的,所有的浮点数、向量或者是矩阵在MATLAB当中都是通过mxArray结构来进行存储和传递的。

当然,MATLAB所提供的所有数学函数也都是基于这样一种数据结构进行运算的。

所以,要使用MATLAB的生成代码,就必须将C语言当中常用的浮点数和整数转换为mxArray结构。

本例中利用MATLAB函数mxArray *mlfScalar(double v)和函数double *mxGetPr(mxArray *)来实现参数格式转换。

函数mlfScalar()将double型变量存入一个新建的mxArray结构中,并返回指针,而函数mxGetPr()将mxArray结构保存的实数的实部取出。

至于其它参数转换方法可参看参考文献3中的相关部分。

最终可以编写这样一个利用了MATLAB数学函数并实现计算的函数:
到此,整个翻译过程完成,但是还不能直接调用。

在这个函数当中运用到了MATLAB的数学库函数mlfSqrt()、mlcPlus()和数据转换函数mlfScalar()、mxGetPr()。

由于这些函数是固化在链接库当中的,为了连接执行,必须加入几个库文件和几个静态链接库lib文件。

所需要的库文件为mcc命令生成的messay.c文件当中所加入的库文件,一般为libmatlb.h,而需要加入的静态链接库文件如下:
如果没有以上文件,可以用VC的lib命令将MATLAB相应的def文件转化为lib文件,转化格式为lib /def:filename.def /machine:ix86
/out:filename.lib。

方法的局限
使用本文所用的方法可以将M文件翻译为C语言的函数,但是要受到两个因素的制约。

1、功能的实现受到MATLAB C函数库的限制
这种翻译的机制是由MA TLAB提供的,mcc命令能直接翻译的函数也仅局限于MATLAB原有的函数。

因为这些函数已经被MA TLAB6.5编译好,一般以mlf为前缀,存于动态链接库当中并可被C语言直接调用。

这些函数在参考文献4中可以查到。

而超出了这个范围的函数,并在M文件当中被嵌套使用,在用mcc进行翻译的时候,mcc将在函数名前加上前缀mlf,并进一步翻译该函数。

但是,这种翻译受到MATLAB参数传递的限制,而不能直接调用,在编译时会出现找不到相应的外部函数的错误。

解决办法是手动将所有被翻译的函数进行参数传递方式的调整。

如果M文件当中包含的函数被嵌套翻译的层数很深,这样的工作量是巨大而且不可接受的。

同时很多工具箱当中定义的函数也是不能使用这种方法进行翻译的。

MATLAB的工具箱更新速度很快,而相应的MATLAB C的函数库有一定滞后,导致很多最新的工具箱当中的函数是不能被翻译的。

2、翻译本身存在的限制
因为这种翻译是遵守C语言要求的,因而对于内存分配要求和C语言不同的函数和一些关于图形显示类型的函数(包括大量的GUI相关函数)也不能被正确的翻译。

例如mash.m 和step.m这两个较常用的MATLAB函数,由于上述的限制,就不能用本方法进行翻译。

对于上述的问题,可以利用在C程序当中运用MATLAB引擎的方法动态调用MATLAB 的库函数,基本上可以解决上述所有的函数不能被正确翻译和图形显示的问题。

但是,运用MATLAB引擎的方法需要利用ActiveX的自动化服务器,在运行的时候程序会在后台执行一个MA TLAB的线程而不能完全脱离MATLAB的环境,也就意味着在纯C的环境下是不能运用的,必须要先安装MATLAB并能够在运行时支持多线程工作。

具体的方法可以参阅
参考文献3。

MATLAB 5.X和MATLAB 6.5的区别
对于本方法有以下几点区别需要注意:
(1)程序当中所需的库文件由5.X版本的matrix.h、mcc.h、matlab.h改为mex.h、libmatlb.h、libmatlbm.h等库文件。

(2)程序所需要加入的静态链接库文件由5.X需要的libmmfile.lib、libmatlb.lib、libmcc.lib、libmx.lib改为libmat.lib、libmatlb.lib、libmex.lib、libmx.lib四个文件。

(3)API函数改动很多,虽然数学函数库即mlf前缀的函数少有改动,但是关于变量建立,内存管理和数据类型转换的函数发生改变,即很多原mcc前缀的函数改为用mx为前缀的函数代替,使得很多5.X翻译的C程序代码不能在6.5相应的库下运行通过。

(4)6.5版本中直接增加了在VC环境下对M文件的支持。

在执行mbuild -setup的配置命令后,MATLAB在VC中提供了MA TLAB Project Wizard,可在VC环境下直接建立MATLAB 的工程来翻译M文件。

但是这种翻译方法在遇到未定义函数嵌套时将错误的把函数名翻译为变量名,而mcc命令将进一步翻译内部嵌套的函数。

相关文档
最新文档