李 雯(宝鸡职业技术学院电子信息工程系,721000)
课题名称:省职教学会的课题《基于VC和MATLAB的仿真实验平台的设计》课题编号:SZJYB2015033
Matlab接口技术应用研究
李 雯
(宝鸡职业技术学院电子信息工程系,721000)
课题名称:省职教学会的课题《基于VC和MATLAB的仿真实验平台的设计》课题编号:SZJYB2015033
摘要:Matlab是一种面向科学和工程计算的高级语言,可以胜任大多数的工作,但仍然具系统不友好性 的弊端,将Matlab与外部程序进行混编设计,可以有效的改善这一状况,本文介绍了混合编程的多种方法,希望对从事程序开发读者有所帮助。
关键词:Matlab;接口技术;方式
Matlab作为应用范围比较广泛的数学软件,是一个相当完整的系统,它向用户提供了一个功能十分完善的程序设计和数据处理集成环境,用户可以根据需要方便地编写和扩充新的函数库。它以矩阵运算为基础,极少的代码即可实现复杂的功能。但是MATLAB的M文件作为一个文本文件,不利于算法的保密,而且访问硬件的能力差,执行效率也不高,这时候就需要研究MATI.AB接口技术,通过外部程序来实现对MATLAB的调用。如何实现其与外部程序的混合编程设计成为计算机领域关注的重点课题,现阶段有两种方法来解决这一问题:一是在MATLAB中调用其它语言编写的代码;二是在其他语言程序中调用MATLAB。这些技术的应用使MATLAB的使用领域在不断的扩展,给开发者提供了灵活多变的解决问题的途径。
在MATLAB开发环境中调用C/C++等外部程序离不开编译器的支持,编译器存在的价值就是将C/C++代码编译为MEX文件,这样就可以将程序执行下去。MEX文件是Matlab调用C/ C++程序的主要形式,它包含有Matlab解释器,以动态链接库的形式而存在,由于数据库Matlab版本有所不同,因而MEX文件的名称和大小也是不同的,有的以·dll命名,有的以*·mexw 32形式而存在,还有以*·mexw64的名称存在的,无论是以何种形式存在的MEX文件都有着装载动态链接和执行动态链接的功能,mwlndex,mwsize,mxchar,mxlogical,mxClasslD,mxComplexity是其语言接口的代表数据类型,它通过用C/C++语言编写代码,然后通过Matlab编译器将其编译为MEX文件。而要想用C/C++语言编写MEX文件需要解决的一个首要问题是将mexFunction函数中的Matlab与C/C++代码模块的数据实现顺利交互,而要解决这一点就需要充分了解Matlab与C/C++代码的结构与优势。Matlab中的数据类型可以用mxArray来描述,包括其中所有输入和输出的参数,而将C/C++语言的基本数据转换为mxArray类型就成为解决Matlab与C/C++代码模块进行交互的关键。而Matlab中所包含的API函数使这一问题的解决变成了可能,在Matlab与C/C++混合编程时候经常需要调用Matlab提供的API函数,其中以mx开头的Matlab API函数主要是提供对mxArray进行操作的函数,而以mex开头的Matlab API函数则提供Matlab环境后台操作的函数。其中,以mex开头的Matlab API函数只能在MEX文件中应用,以mex开头的Matlab API函数可以在其他应用如从C/C++调用Matlab程序中应用。
Matlab中调用C/C++函数的另一种方式,即采用%#external语法结构。假定在Matlab函数中需要调用一个和数据采集设备密切相关的底层C/C++函数以获得该设备采集的数据。此时,可以首先用M文件完成整个程序,需要调用的C/C++函数暂时用M函数代替,并用%#external标记。
使用Matlab编译器编译的文件,生成可独立运行的可执行文件,为用户提供一种最简单的发布Matlab程序的方法。在C语言的函数中可以调用*、m函数经过Matlab编译器编译后的函数。以mrandplot、m生成函数。
(1)编译mrand.m文件,生成mrandplot函数的接口函数mlfmrandplot函数。在C/C++语言函数中可以通过调用mlfmrandplot函数来达到调用mrandplot函数的目的。
(2)调用 mrandplot函数:Matlab和C/C++混合编程中经常要用到mx-API函数,本例中调用
mxcreate Double Matrix API 函数用于构造 mlfmrandplot 函数的输入参数。
C/C++调用Matlab程序的第二种方式可以通过 Matlab 引擎直接执行 Matlab语言。Matlab程序中蕴含着大量的数学计算方式,当用户需要使用某一公式进行数值计算时就可以通过Matlab引擎调用Matlab函数,为用户的计算服务。大量的API函数是Matlab得以顺畅运行的基础,通过这些API函数用户只需将数据输入到Matlab中,Matlab引擎就可以将人工难以计算出来的数据轻松的计算出来,界面部分由C/C++语言构成,而这一切的实现都离不开Matlab环境的支持。
C/C++调用 Matlab 程序的第三种方式:将 Matlab程序编译为C/C++ 动态链接库,然后在C/C++程序中调用。通过Matlab编译器的mcc命令,可以将Matlab *·m文件直接编译为动态链接库以供 Visual C++调用。
Matlab 的接口技术可以让使用者不只是局限于一种计算工具,这些接口技术可以帮助使用者更好的利用手中的工具,结合多个工具的去处,找到解决实际问题的优秀方案。
参考文献
[1]刘维著. 精通Matlab与c/c++混合程序设计[M]. 北京航空航天大学出版社
[2] 张亮,王继阳编著. MATLAB与c/c++混合编程[M]. 人民邮电出版社出版
[3]吕献忠. 汇编与C语言混合程序设计方法研究[J]. 电脑编程技巧与维护,2015,12:37-38.
李雯,女,陕西扶风人,1982年出生,硕士,高校讲师,主要研究方向:电气控制系统设计与仿真。
Matlab interface technology application research
Li Wen
(Baoji professional technology institute,Department of electronic and information engineering,721000)
Abstract:Matlab is a high-level language for scientific and engineering calculation, and can do most of the job,but still with the deficiencies of the system is not friendly,external program with the Matlab mix design,can effectively improve the situation,this paper introduces the mixed programming of a variety of methods,hope to help readers engaged in application development.
Keywords:Matlab;Interface technology;way
作者简介