logo资料库

将matlab源程序转化为C,c++语言.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
Ξ 第 10 卷第 3 期 2000 年 9 月 哲里木畜牧学院学报 Journal of Zheimu Animal Husbandry College Vol. 10 No. 3 Sep . 2000 将 Matlab 源程序转化为 C ,C + + 卢  宁1  贾丕珠2  马  睿3 (1  哲里木畜牧学院计算中心  通辽  028042  2  内蒙古师范大学成人教育部  呼和浩特  010000) (3  兴安盟教育学院  乌兰浩特  137400) 摘  要  本文简要介绍了功能强大的数值计算软件 matlab。叙述了如何将 matlab 的源文件转换 为 C ,C + + 再生成能单独运行的程序 ,以提高运行速度 。其中还介绍了从 matlab 源文件到 C + + 翻译软件 matcom。以及如何在 Visual C + + 下实现 C + + 与 matcom 命令的混合编程 。 关键词  数值计算 ;matlab ;matcom ;C ;C + + 中图分类号  TP31  文献标识码  A  文章编号  1008 - 5149 (2000) 03 - 0032 - 04 在当今数学类科技应用软件中 ,就软件数学处理的原始内核而言 ,可分为两类 ,一类是数 值计算型软件 ,如 matlab〔1 ,4〕、xmath 、gauss 等 。这类软件长于数值计算 ,对处理大批数据效率 高 。另一类是数学分析型软件 ,如 : mathematica 、maple 等 ,这类软件以符号计算见长 ,能给出 解析解和任意精度解 。 matlab 的出现 ,为各国科学家开发数学软件提供了新的基础 ,其主要应用有通用的数值计 算 ,算法设计 ,自动控制 ,数学信号处理 ,统计信号处理 ,神经网络〔2〕,图形处理等 。 matlab 语言特点如下 : 简洁紧凑 ,使用方便灵活 。 库函数 、运算符丰富 。 matlab 既具有结构化的控制语句又有面向对象编程的特性 。 语法限制不严格 ,程序设计自由度大 。例如 ,在 matlab 里 ,用户无需对矩阵预定义就可使 用 。 程序的可移植性很好 ,基本上不做修改就可以在各种型号的计算机和操作系统上运行 。 matlab 的图形功能强大 。在 Fortran 和 C 语言里 ,绘图都很不容易 ,但在 matlab 里 ,数据 的可视化非常简单 。matlab 还具有较强的编辑图形界面的能力 。 功能强劲的工具箱是 matlab 的另一重要特色 。matlab 包含两个部分 :核心部分和各种可 选的工具箱 。 源程序的开放性 。除内部函数以外 ,所有 matlab 的核心文件和工具箱文件都是可读可改 的源文件 ,用户可通过对源文件的修改以及加入自己的文件 ,构成新的工具箱 。 由于 matlab 强大的功能只能在它所提供的平台上才能使用 ,即必需在安装有 matlab 系统 的机器上使用 m 文件 (matlab 源文件) ,以行解释方式执行代码 ,与 BASIC 相同 ,这样 ,大大地 收稿日期 :2000 —08 —29    卢宁 ,女 ,1962 年生 ,实验师。
第 3 期         卢  宁等 :将 Matlab 源程序转化为 C ,C + +            33 限制了代码执行速度 ,给工程计算带来了很大不便 。于是人们开发出了 matlab 与其它高级语 言的接口程序 ,这样就可以把 matlab 的强大功能融入各种应用程序中 ,并且通过高级语言的 编译器编译为二进制代码 ,从而提高了执行速度 ,并且有利于知识产权的保护 。 这篇文章主要介绍 Matlab 与 C ,C + + 语言的接口问题 。将 matlab 与 C ,C + + 混合编程 大概有如下三种方法 。 1  用 C 或 Fortran 语言编写 mex 程序 Matlab 是一种解释型的编程环境 ,读一句执行一句 。这样做可以方便的实现编程过程中 的交互 ,也免去了麻烦又费时的编译过程 。Matlab 在执行时速度慢也就根源于此 。在 Matlab 里的基础矩阵运算函数 ,像转置 、复制等 ,都是以二进制程序的形式存在的 ,运行起来速度比解 释执行 10000 次循环要快 ,所以编 Matlab 程序时 ,应该尽量避免使用循环语句 ,而是用等效的 矩阵运算 。但有时不良的循环仍然不可避免 ,mex 程序就是根据一定的接口规范编写的一个 附加子程序 。附加子程序所在的目录加到 matlab 的搜索路径里 ,就可以向调用普通函数一样 来调用它 ,因为把循环体放到了二进制程序中 ,执行速度快得多 。mex 文件既可以用 C 语言 编写 ,也可以用 Fortran 来编 。 2  Matcom 的使用 matcom 是一个十分有用的翻译器 ,可以把 m 文件翻译成 C + + 源文件 ,并编译为脱离 matlab 环境可独立运行的程序 。这样就提高了代码的复用率和执行速度 。使纯文本的 m 文 件变为二进制的执行程序 ,增加了知识保护的安全性 。 matom 并不是全能的 ,对于大多数 matlab 函数都可以由 C + + 实现 ,但有些函数还只能 期待以后的版本不断补充 。它的不足之处主要有 : 对类的数据类型只能部分支持 ;eval ,feval ,clear 等语句不能在 C + + 中实现 ;图形窗口有 些不如人意 ,如 fill3 ,hide 等语句无法实现 ,surf 等语句也无法画出像 matlab 中那样精细的图 像来 ,特别是色彩比较难看 ;和其它高级程序如 C ,C + + / Fortran 相比 ,程序的执行速度慢 。 由于 matlab 的程序不用编译等预处理 ,也不生成可执行文件 ,程序为解释执行 ,所以速度较 慢 。 3  在 VC 中把 Matcom 命令与 C + + 语言混编 这种方法不但可以发挥强大的数学计算功能 ,还可以结合可视化编译环境进行界面开发 。 5 版本 ,编译环境是 VisualC + + (VC)〔3〕。在进行编译之前需要作如下准备 : 1  产生一个新的计划 (project) :在 VC 中选择菜单 File 下的 New 中的 Win32 console Appli 可以制作完整的应用计算软件 ,交付用户使用 。我们将主要介绍这种方法 。目前 ,比较流行的 Matcom 为 4 3 cation 选项 。 3 加入 C : \ matcom45 \ lib \ v4500v. lib。 3 2  把 matcom 的函数库加到 C + + 的计划中 :在菜单 Project 下 Add to Project 中的 Files 里 3  产生一个新的源文件 :在计划中加入名为 main cpp 的源文件 ,具体如下 ; 在菜单 Project 下的 Add to Project 项里点击 New 里的 C + + Source File ,在此取名为 main cpp 。
43          哲  里  木  畜  牧  学  院  学  报          第 10 卷 4  加入 matlib. h 文件 :在源文件第一行中加入 # include < matlib. h > ,然后在菜单及选项 3 Project/ settings/ C , C + + / Preprocessor/ Additional include Subdirectories 中 ,加入路径名 c : \ matcom45 \ lib 初始化函数库 :在 main. cpp 中加入 int main ( ) { initM (MA TCOM  V ER) exitM ( ) ; return 0 ; } 3 5  矩阵的产生 矩阵类定义的命令为 Mm ,例如定义 a ,b ,c 三个矩阵为 Mm a ; Mm b ; Mm c ; 3 6  定义矩阵中的元素 。例如 ,定义一个 3x3 和一个 3x1 的矩阵为 a = rand (3) ;b = zeros(3 ,1) ; b 、r (1 ,1) = 3 ;b、r (2 ,1) = - 1 ;b、r (3 ,1) = 5 ; display (a) ; display (b) ; 其中 ,r (行 ,列) 可直接对矩阵中的元素操作 。display 命令可以显示出矩阵 a 和 b 。现在把 整个程序完整的写出 。 # include < matlab. h > int main () { initM (MA TCOM V ERSION) ; Mm a ; Mm b ; Mm c ; a = rand (3) ;b = zeros(3 ,1) ; b 、r (1 ,1) = 3 ;b、r (2 ,1) = - 1 ;b、r (3 ,1) = 5 display (a) ; display (b) ; return 0 ; } 用 Ctrl - F5 进行编译 。输出结果为 a (3x3) = 9 elements ,dense real =
第 3 期         卢  宁等 :将 Matlab 源程序转化为 C ,C + +            53 4565 0185 8214 486   0 8913  0 7621  0 9501  0 2311  0 6068  0   0 0 0 b (3x1) = 3 elements ,dense real = 3 - 1 5 其他的对矩阵进行操作的命令 ,可参阅 Matcom 的帮助文件 ,这里不再详述 。 参 考 文 献 北京 :清华大学出版社 ,1998 35~37 精通 MA TLAB 5〔M〕 1  张宣华 ,史惠康 2  娄顺天 3  David J , Kruglinski 著 ,潘爱民 ,王国印译 基于 Matlab 的神经网络的分析与设计〔M〕 西安 :西安交通大学出版社 ,1999 166 Visual C + + 技术内幕〔M〕 北京 :清华大学出版社 ,1999 2 ~15 4  Eva Part - Enander ,Anders Sjoberg 著 ,王艳清 ,孙锋 ,朱群雄等译 The Matlab 5 Handbook〔M〕 北京 : 机械工业出版社 ,1999 133 Matlab Program Chang into C ,C + + L u Ning et al ( Zhelimu Animal Husbandry College  Tongliao  028042) Abstrct  In this article ,Strong numerical soft hard matlab was introduced. Matlab file change into C ,C + + become movement separately and improve speed. Moreover , Inetrmix compiler of C + + and malcom can move under Uisual. Key words  Numerical ;Matlab ;Matcom C ;C + +
分享到:
收藏