欢迎来到天天文库
浏览记录
ID:18724054
大小:128.00 KB
页数:27页
时间:2018-09-20
《matlab与c语言的接口》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MATLAB与C语言的接口东北大学薛定宇(原作)转载时请注明作者信息、网址,谢谢 MATLAB到C语言程序的转换可以由两种途径完成,其一是MATLAB自己提供的C语言翻译程序mcc,另一种是原第3方公司MathTools开发的MATCOM。后者出现较早,功能远比MATLAB自己的翻译程序强大,所以MathTools公司已经被MathWorks公司收购,并已将其开发技术融于新推出的MATLAB6.0(Release12)中。 依本人的观点,二者都不完善,有大量的MATLAB函数及数据类型是不能兼
2、容变换的,所以有时会发现将简洁的MATLAB程序翻译成C语言程序很晦涩。翻译后的C程序几乎不适合手动去维护,更谈不上升级了。 有几个不兼容的地方是不能令人容忍的,例如eval()函数在C翻译下是不兼容的,最新的MATLAB6才刚刚敢说已经部分兼容了,但离真正的兼容还有很长的路要走,有很多艰难的技术困难需要克服,短时间内不可能有突破性的进展。另一个大的问题是,众所周知,MATLAB新的控制系统工具箱中定义了大量的LTI类,MATLAB5开始也允许使用类与对象的概念,这已经向“面向对象”的编程走了一大
3、步,但MATLAB到C的翻译明显都不支持“对象”的数据类型,所以在控制系统分析与设计(当然还有其他的领域)中这样的转换几乎没有什么实际意义,所以不要将这样的转换太理想化。 从转换的程序速度来看,因为mcc和MATCOM都沿用了MATLAB的程序运算机制,所以不可能大幅度地提高程序运行速度。相反地,如果将MATLAB程序中明显的瓶颈部分用C语言按照MEX格式编写,则可以大大加快速度。作者在《科学运算语言MATLAB5.3程序设计及应用》一书中以例子做过探讨,MCC可以比快50%,而MEX的形式可能快
4、上百倍。〖举例〗分形问题:从初始点(x0,y0)出发,按下面的公式生成新的点(x1,y1)其中gi为(0,1)区间均匀分布的随机数。要求从(x1,y1)再生成(x2,y2),...,直至生成1,000,000个点(有点夸张,但太少了用MATLAB测时间不准)。可以下载用MATLAB的M-函数写的程序、用Mex_C写的程序。程序调用语句为: >>N=1000000;v=rand(N,1);tic;[x,y]=frac_tree(0,0,v,N);toc 然后测试一下速度,再想法用MATCOM或MCC
5、转换一下,再试试速度。问题:MATCOM程序到底比M函数快多少?我用Mex_C实现的速度可是快100多倍啊!下面有文章介绍,用MATCOM+VC能平均快1.5倍(在别的应用上),依作者的观点,为了这区区1.5倍还不至于自己给自己找麻烦去用MATCOM。 这样看,可能MATLAB到C转换唯一的好处就是它能开发具有自主版权的软件了。所以本人一般不太赞同用这样的转换方法去开发程序,尤其不赞成刻意追求MATLAB+C的方式。本人认为:除非必要,一般别采用这样的方法。提出这样的观点,欢迎商榷。 MATCO
6、M目前有BC和VC两个程序,MATLAB+VC之家中收录了一些文章。作者见到有下载区有这样的软件。·在这里给出一个下载区的链接C++Builder调用Matlab的实现方法 国防科技大学机电工程与仪器系张云洲摘要:本文简要叙述了Matlab语言的优点,介绍了在用BorlandC++Builder语言开发的Windows应用程序中,调用matlab语言实现科学计算和图形绘制的方法。关键词:C++BuilderMatlab调用混合编程1.引言 Matlab是一个高度集成的系统,集科学计算、图象处理、声音
7、处理于一体,具有极高的编程效率。近年来,Matlab已经从最初的“矩阵实验室”,渗透到科学与工程计算的多个领域,在自动控制、信号处理、神经网络、模糊逻辑、小波分析等多个方向,都有着广泛的应用。 BorlandC++Builder是一种新颖的可视化编程语言。在工程应用中,我们一般用C++Builder语言编写应用程序,实现交互界面、数据采集和端口操作等,但C++Builder在数值处理分析和算法工具等方面,其效率远远低于Matlab语言。在准确方便地绘制数据图形方面,Matlab语言更具有无可比拟的优
8、势。此外,Matlab还提供功能强大的工具箱。但Matlab的缺点是不能实现端口操作和实时控制。因此,若能将两者结合运用,实现优势互补,将获得极大的效益。 本文结合实际介绍了应用BorlandC++Builder3.0开发的Windos应用程序中,对Matlab的调用方法。2.C++Builder调用Matlab的实现方案2.1实现思路 在高版本的Maltab中(如MatlabV4.2)提供了DDE接口,用户可以通过Windows的DDE通讯基制实现外部调用。这种实现
此文档下载收益归作者所有