MATLAB具有强大的矩阵处理、数值计算以及作图功能。能否使matlab与其他的程序设计语言甚至外部仪器和设备进行通话呢?即在其他的程序设计语言中调用matlab,或者在matlab中调用其他的程序设计语言编写的函数或子程序,或者将外部设备的数据直接输入matlab工作空间进行处理,从而发挥他们各自的优势,为特定的应用服务。
作为目前市面上作为强大的科学计算软件,matlab也实现了从多与外部程序或设备的接口。通过mex文件的建立,matlab能够调用c、c++、 fortran的程序设计语言的子程序;通过使用matlab引擎,可在c、c++、fortran程序代码中直接调用matlab中的函数与命令;通过 matlab c/c++数学函数库直接实现c/c++与matlab的混合编程,并建立可独立运行程序;通过matlab提供的串口接口,可以实现从外部设备(如 modem)直接输入数据到matlab工作空间,再利用matlab进行处理。
1.MEX文件
mex文件是按一定格式使用c/c++、fortran等语言编写的动态链接库函数,在windows操作环境中,其后缀名为 dll(dynamic link library),它的主要目的是在matlab中调用c/c++和fortran编写的子程序。她是matlab的一类外部程序调用接口,可以在 matlab系统象调用matlab的内建函数一样调用已经存在的用c/c++、fortran语言编写的子程序,而无需将他们重新编写为matlab的 m文件,从而使资源得到充分利用。
mex文件是一种动态链接库的子程序,这些子程序可由matlab解释器自动载入并执行。调用mex文件与调用matlab的内建函数的方式完全相同,只需在matlab命令提示符下键入mex文件名即可,当然,该mex文件必须位于matlab的当前工作目录下。
mex文件有以下一些用处:
①、对于原先已经存在的c/c++、fortran程序,只需编写一个与matlab的接口,就可以在matlab里面直接调用,而不必重新编写m文件
②、对于那些在matlab中执行效率不高的语句(如循环体),可以把他们放在c/c++、fortran中编写并编译,从而提高执行效率。
但mex文件并不是对所有应用程序都是用。事实上,matlab是一个高效的功能强大的数值计算系统,他将人们从繁重的程序编写中解脱出来,在matlab中可以实现大多数的程序编写,故除非万不得已,一般不采用mex文件这项功能。
2.matlab引擎
如果说mex文件是为了在matlab中调用c/c++和fortran编写的子程序,那么matlab引擎既是为了在c/c++和fortran程序中能够调用matlab。
matlab计算引擎是一组允许在别的应用程序中与matlab交互的函数库和程序库。在调用的过程中,matlab引擎函数库在后台工作,matlab通过它与别的应用程序进行通信。通过matlab计算引擎可以完成以下功能。
①、调用一个数学函数或子程序来处理数据,如在用户程序中求阵列转置或计算一个快速傅里叶变换等,matlab就是一个强有力、编程灵活的数学子函数库。
②、建立一个具有特殊用途的完整系统,如雷达图像分析或进行气象色谱分析等,可以使用c等高级语言来编写用户界面,而后台采用matlab作为计算引擎,从而达到缩短开发周期,减少开发困难的目的。
matlab计算引擎在后台工作,这种方式有很多优点。工作是不需matlab整个与程序相连,只需要一小部分引擎通信函数库和程序相连,节省了大量的系统资源,使应用程序整体性能更好,处理效率更高。他还充分利用网络,将计算任务繁重的引擎程序放在网络上计算速度比较快、计算能力比较强的机器上,这样可以使整个系统运行速度加快。
matlab提供了两种activex技术支持:Activex组件集成和Activex自动化。Activex是microsoft推出的用于组件对象模型(COM)的一种技术,它使各种软件组件可以在网络工作环境中相互作用,而不管这种组件是使用什么语言编写的。activex技术可以创建运行在桌面或internet上的应用程序。Activex自动化允许matlab管理其他activex组件或者被其他的activex组件所控制。当 matlab收到其他activex组件的控制时,实际上充当了自动化服务器,activex组件则是自动化客户机。
matlab计算引擎采用客户机服务器(Client/Server)的体系结构,通过windows的activex通道或unix的管道(pipes)和matlab进行连接。在具体的应用中,客户的程序作为前端客户机,通过matlab计算引擎在后台与matlab服务器建立连接,实现动态的通信。因此,应用程序运行的一般过程是先向matlab计算引擎传送数据和命令,matlab计算引擎与matlab服务器交互,再由matlab 计算引擎将matlab运算结果返回应用程序。
3.MATLAB C/C++ 数学函数库(matlab library)
matlab 6.x中不仅包含了与c的接口,而且也包含了与c++的接口,因此完全可以采用面向对象编程的方式来编写程序。同matlab与c的接口一样,可以用 c++语言来编写mex文件,也可以调用matlab c/c++数学函数库,并编译生成可独立运行程序。matlab c/c++数学函数库包含了大量的内建数学函数以及在matlab中被声明为m文件的数学函数。
MathWorks公司提供的matlab c/c++数学函数一方面可以使matlab程序员能够利用已有的编写m函数的经验,花费很小的代价,利用该数学函数库来编写类似于matlab m文件的代码,改代码编译后会有更块的运行速度,且能够独立matlab解释器而运行。另一方面,c++程序员需要一种方便、快捷的矩阵数学含糊苏。对于 c++程序员来说,该数学函数库提供了一个自然而又牢固的编程接口、大量的功能强大的矩阵计算和处理函数,可以使c++程序员方便地应用matlab提供的矩阵运算和处理能力,从而大大提高程序的执行效率。此外,还对程序员隐蔽了大量便车个细节,可以使程序员用一种简单直接的语法去编程,而无需考虑调用函数的实现过程。
4.MATLAB编译器(Compiler)
matlab编译器(Compiler)是matlab环境下的编译工具,他能将m文件转化为c或c++等不同类型的源代码,并在此基础之上根据需要生成 mex文件(.dll文件)、可独立运行的应用程序(.exe文件),从而大大提高代码的执行效率。尤其是可独立运行的应用程序文件,不需要matlab 环境支持,甚至没有安装matlab也能运行。与matlab engine、mex文件相比,他们大大扩展了程序的应用范围。同时,编译器对m文件编译后,运行速度提高了约33%,另一方面隐藏了程序算法,提高了保密性。
使用matlab编译器,也可以将c/c++源代码编译成可独立运行的应用程序,在这些c/c++源代码中,可以使用matlab提供的接口函数轻松的利用matlab的矩阵运算功能、作图功能来维用户服务。
matlab编译器以m文件作为输入,产生c/c++源代码或p-码作为输出。matlab编译器能产生以下这些源代码:
①、用于建立mex-文件的c源代码
②、和其他模块结合建立可独立运行程序的c或c++源代码
但matlab编译器确实需要有matlab c/c++数学库的支持才能建立基于matlab数学和数学分析能力内核的可独立运行的应用程序。matlab编译器也需要matlab c/c++图形库的支持才能创建使用了图形函数库的应用程序。
①、产生用于simulink的c代码的s-函数
②、生成c共享库(在microsoft window 95/98/200/NT上即为动态链接库dll)和c++的惊天链接库。他们能用在没有matlab的系统中,但是需要matlab c/c++数学函数库的支持。
5.串口接口(Serial Port)
对于串口接口相关方面的是对于通信方面的研究,在这里我不将描述,如有感兴趣请自行参阅相关书籍。
同过对上面的一些描述,我们可以利用vc++和matlab的混合编程,为了脱离matlab环境,达到方便,利用数学函数库和编译器两种方法,主要是使用函数库进行相关数学计算。
参考资料:《精通matlab接口与编程》王世香 电子工业出版社
因篇幅问题不能全部显示,请点此查看更多更全内容