matlab与c语言的接口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB 与 C 语言的接口
东北大学薛定宇(原作) 转载时请注明作者信息、网址,谢谢
MATLAB 到 C 语言程序的转换可以由两种途径完成,其一是MATLAB 自己提供的 C 语言翻译程序mcc, 另一种是原第 3 方公司MathTools 开发的MATCOM 。后者出现较早,功能远比MATLAB 自己的翻译程序强大,所以MathTools 公司已经被MathWorks 公司收购,并已将其开发技术融于新推出的MATLAB 6.0 (Release 12) 中。
依本人的观点,二者都不完善,有大量的MATLAB 函数及数据类型是不能兼容变换的,所以有时会发现将简洁的MATLAB 程序翻译成 C 语言程序很晦涩。翻译后的 C 程序几乎不适合手动去维护,更谈不上升级了。
有几个不兼容的地方是不能令人容忍的,例如eval() 函数在 C 翻译下是不兼容的,最新的MATLAB 6 才刚刚敢说已经部分兼容了,但离真正的兼容还有
很长的路要走,有很多艰难的技术困难需要克服,短时间内不可能有突破性的进展。另一个大的问题是,众所周知,MATLAB 新的控制系统工具箱中定义了大量的LTI 类,MATLAB 5 开始也允许使用类与对象的概念,这已经向“面向对象”的编程走了一大步,但MATLAB 到 C 的翻译明显都不支持“对象”的数据类型,所以在控制系统分析与设计(当然还有其他的领域) 中这样的转换几乎没有什么实际意义,所以不要将这样的转换太理想化。
从转换的程序速度来看,因为mcc 和MATCOM 都沿用了MATLAB 的程序运算机制,所以不可能大幅度地提高程序运行速度。相反地,如果将MATLAB 程序中明显的瓶颈部分用 C 语言按照MEX 格式编写,则可以大大加快速度。作者在《科学运算语言MATLAB 5.3 程序设计及应用》一书中以例子做过探讨,MCC 可以比快50%, 而MEX 的形式可能快上百倍。
〖举例〗分形问题:从初始点(x0,y0) 出发,按下面的公式生成新的点(x1,y1)
其中gi 为(0,1) 区间均匀分布的随机数。要求从
(x1,y1) 再生成(x2,y2),... ,直至生成1,000,000 个点(有点夸张,但
太少了用MATLAB 测时间不准)。可以下
MATLAB 的载用M- 函数写的程序、用Mex_C