MATLAB 与 C 语言的接口 (2).doc

上传人:hs****ma 文档编号:550934331 上传时间:2024-03-04 格式:DOC 页数:3 大小:36.50KB
返回 下载 相关 举报
MATLAB 与 C 语言的接口 (2).doc_第1页
第1页 / 共3页
MATLAB 与 C 语言的接口 (2).doc_第2页
第2页 / 共3页
MATLAB 与 C 语言的接口 (2).doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《MATLAB 与 C 语言的接口 (2).doc》由会员分享,可在线阅读,更多相关《MATLAB 与 C 语言的接口 (2).doc(3页珍藏版)》请在金锄头文库上搜索。

1、 MATLAB 与 C 语言的接口摘要:本文详细介绍了使用最新版本的Matlab的编译器(Compiler2.0)将Matlab源代码转化为C/C+源代码的方法,从而提供了Matlab与C/C+的接口。 Matlab是Mathworks公司于1982年推出的一套高性能的数值计算可视化软件,它集数值分析、矩阵运算、信号处理和图形显示等于一体,被称为演算纸式的语言。它提供了功能强大的工具箱,其强大的扩展功能为各个领域的应用提供了基础。Matlab在一些国家如英、美等已被列为电气工程类学生的必修课程。最新版本的Matlab5.3在原有功能的基础上增加了彩色代码编辑器、程序调试器和C/C+的图形数学库

2、等。Matlab的函数和命令几乎可以实现C/C+的全部功能。 更为重要的是Matlab的工具箱之一的C编译器(Compiler2.0)提供了与其他高级语言如C/Fortran的接口。通过利用Matlab的编译器、C/C+数学库和图形库,可以自动地将包含数值计算和图形的Matlab语言的源程序转换为C/C+的源代码(Windows 或Window NT下的32位应用程序)。这些代码根据需要既可以当作一个子模块嵌入大的应用程序,也可以作为一个独立的程序脱离Matlab环境单独运行。 遗憾的是目前国内介绍Matlab的资料较少,仅有的少数资料也局限于介绍Matlab的数学计算和程序设计,如一些工具箱

3、函数的使用。其实,Matlab最重要的应用是用来实现一些复杂的算法和动态系统的仿真,这些应用都离不开Matlab的C Compiler。可以说Matlab的C Compiler是Matlab工程应用的核心。 下面详细介绍Matlab的C编译器的安装的软、硬件环境要求和安装过程,并通过例子介绍其应用。 一、Matlab的编译器的软、硬件要求和安装过程 硬件要求:Intel 486, Pentium, Pentium Pro or Pentium II 以上;16M内存(建议24M以上);Windows支持的显卡。软件要求:Windows95/Windows98/WindowsNT4.0;(实际M

4、atlab的编译器可在Windows、Macintosh、Unix环境下运行,本文仅以Windows环境为例) Matlab5.0以上版本;MicrosofVisual C/C+ version 4.2 or 5.0 /Borland C/C+ version 5.0, 5.02 ; 安装过程:在安装Matlab的过程中,Matlab的C编译器会作为安装的一个选项出现,选取C编译器继续安装过程,Matlab的C编译器即可自动安装。安装Matlab及其C编译器后,还必须安装一个ANSI C/C+ Compiler。安装ANSI C/C+Compiler时一般应选完全安装,以免遗漏Matlab的C

5、编译器所需的组件,且须记住其路径,以备正确配置有关选项使Matlab的C编译器和C/C+的编译器建立联系时使用。值得一提的是Matlab 安装后其配置是一个较为繁琐的过程,而且如果配置不当就不能正确的使用,须特别注意。当需要改变ANSI C/C+ Compiler时,重新运行mex -setup,使Matlab的编译器和新的ANSI C/C+ 编译器建立联接即可。 二、Matlab的C编译器的典型应用 实际的工程应用中,Matlab往往用来实现一些复杂的算法和运算,只有一些最底层的控制用C来编制。这样编程简洁,可使开发应用程度的周期大为缩短,难度大大降低。同时,由于Matlab的源文件(*.M

6、)为文本文件,简单易读,转换后的Mex文件为二进制文件,有利于软件开发者算法的保密。MATLAB 到 C 语言程序的转换可以由两种途径完成,其一是 MATLAB 自己提供的 C 语言翻译程序 mcc, 另一种是原第 3 方公司 MathTools 开发的 MATCOM。后者出现较早,功能远比 MATLAB 自己的翻译程序强大,所以 MathTools 公司已经被 MathWorks 公司收购,并已将其开发技术融于新推出的 MATLAB 6.0 (Release 12) 中。 依本人的观点,二者都不完善,有大量的 MATLAB 函数及数据类型是不能兼容变换的,所以有时会发现将简洁的 MATLAB

7、 程序翻译成 C 语言程序很晦涩。翻译后的 C 程序几乎不适合手动去维护,更谈不上升级了。 有几个不兼容的地方是不能令人容忍的,例如 eval() 函数在 C 翻译下是不兼容的,最新的 MATLAB 6 才刚刚敢说已经部分兼容了,但离真正的兼容还有很长的路要走,有很多艰难的技术困难需要克服,短时间内不可能有突破性的进展。另一个大的问题是,众所周知,MATLAB 新的控制系统工具箱中定义了大量的 LTI 类,MATLAB 5 开始也允许使用类与对象的概念,这已经向“面向对象”的编程走了一大步,但 MATLAB 到 C 的翻译明显都不支持“对象”的数据类型,所以在控制系统分析与设计 (当然还有其他

8、的领域) 中这样的转换几乎没有什么实际意义,所以不要将这样的转换太理想化。 从转换的程序速度来看,因为 mcc 和 MATCOM 都沿用了 MATLAB 的程序运算机制,所以不可能大幅度地提高程序运行速度。相反地,如果将 MATLAB 程序中明显的瓶颈部分用 C 语言按照 MEX 格式编写,则可以大大加快速度。作者在科学运算语言 MATLAB 5.3 程序设计及应用一书中以例子做过探讨,MCC 可以比快 50%, 而 MEX 的形式可能快上百倍。 举例分形问题:从初始点(x0,y0) 出发,按下面的公式生成新的点 (x1,y1)其中 gi 为 (0,1) 区间均匀分布的随机数。要求从 (x1,

9、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 转换一下,再试试速度。问题:MATCOM 程序到底比 M 函数快多少?我用 Mex_C 实现的速度可是快100多倍啊!下面有文章介绍,用 MATCOMVC 能平均快1.5倍 (在别的应用上),依作者的观点,为了这区区 1.5 倍还不至于自己给自己找麻烦去用 MATCOM。 这样看,可能 MATLAB 到 C 转换唯一的好处就是它能开发具有自主版权的软件了。 所以本人一般不太赞同用这样的转换方法去开发程序,尤其不赞成刻意追求 MATLAB + C 的方式。本人认为:除非必要,一般别采用这样的方法。提出这样的观点,欢迎商榷。 MATCOM 目前有 BC 和 VC 两个程序,MATLAB VC 之家中收录了一些文章。作者见到有下载区有这样的软件。 在这里给出一个下载区的链接

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号