内容发布更新时间 : 2024/11/14 13:31:02星期一 下面是文章的全部内容请认真阅读。
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