VC++与MATLAB混合编程的实现方法.pdf
《VC++与MATLAB混合编程的实现方法.pdf》由会员分享,可在线阅读,更多相关《VC++与MATLAB混合编程的实现方法.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2 0 l O 年第9 期(总第1 4 4 期)串1 1 高 l I 技术企业C h i n aH i-T e e hE n t e r p r i s e sN O 9 2 0 1 0(C u m u l a t i v e t y N O 1 4 4)V c+与M A T L A B 混合编程的实现方法姜浩智,廖宁华(江西路通科技有限公司,江西南昌3 3 0 0 0 2)摘要:在科学研究和工程应用中,科研工作人员往往需要首先提出一种新算法;然后在相应的仿真工具里面进行仿真验证,如果仿真验证错误,则应该重新对算法进行修正,并再次进行仿真验证,直到仿真验证通过,此时可以确保算法在理论原理上的正
2、确性。文章介绍了采用V i s u a l C+与M A T L A B 进行混合编程的重要特占和意义,重点阐述了三种不同的v i s u a l c+与M A T L A B 混合编程的方法,并对这三种方法做了全面的分析比较和总结。关键词:v C+;M A T L A B;M A T C O M;混合编程;编译器中图分类号:T P 3 1 1文献标识码:A文章编号:1 0 0 9 2 3 7 4(2 0 L O)0 9-0 0 1 3-0 4一、V C+与M 肖T L A B 混合编程的实现方法概述在科学研究和工程应用中,科研工作 员往往需要首先提出一种新算法;然后在相应的仿真工具里面进行仿
3、真验证,如果仿真验证错误。则应该重新对算法进行修正,并再次进行仿真验证,直到仿真验证通过,此时可以确保算法在理论原理上的正确性,但是其实际性能还有待进一步验证;接下来在相应的实际工程开发环境下实现算法,测试算法的各项性能指标是否符合技术指标要求,若不满足,则应当改进算法,并再次投入到前面的仿真验证阶段,直至算法的各项性能指标满足要求,或在某种前提条件及评价标准F 3*法总体性能指标最优。上述的整个过程如图l 所示:图1 一般的科研工作流程图在仿真验证阶段,目前的主要仿真工具普遍采用M A T L A B。M A T L A B 是M a t hW o r k s 公司推出的数学软件,它将数值分
4、析,矩阵计算,信号处理和图形显示结合在一起,包含大量高度集成的函数可供调用,命令语句功能十分强大,为科学研究、工程设计及众多学科领域提供了一种简洁,高效的编程工具。然而M A T L A B 并非标准的编译链接语言,而是一种解释性语言,这就大大限制了其代码的执行速度,并且源代码的公开不利于算法和数据的保密,局限于M A T L A B 运行环境,不能用于开发商用软件。与此相反,C C+环境下通过编译链接后的目标代码质量高,程序执行效率高,还具有良好的不同平台可移植性,所以工程开发时常常需要将已经验证通过的算法在C C+环境下实现。可见,为了提高研发效率有必要使用M A T L A B 和C C
5、+混合编程。不过这里就存在重复编码的问题。也就是说,同样的算法要在M A T L A B 和c,C+环境下各写一次代码,增加了不必要的工作。因此这样就很自然的提出了一个关于如何把现有的已经通过仿真验证的n】文件自动转换为符合工程实践要求的C C+文f l:的问题。下面将介绍三种不同的方法:二、采用M A T L A B 自带编译器f f l C A 3从M A T L A B 51 版本开始,M a t hW i r k s 公司推出了一系列的M A T L A B 自带编译器来解决M A T L A B 与C C+的接口问题。编译器I n c c 可以将M A T L A B 的C,c+数学
6、库编译为、,+编译器能识别的代码嵌入v C+环境。m C C 是一种调用M A T L A B 编译器的命令它既可以在M A T L A B 命令行方式下使用,也可以在D O S 或者是U N I)浠冷行方式下使用。值得注意的点是,由于m e e 编译器本身无法编译脚本文件,因此,需要将脚本文件改写成函数文件,也就是说在原始脚本文件的前端,加一行使用关键字f u n e t i o n 定义的函数即可。在使用m c c 命令实现M A T L A B 中的m 函数文件自动转化为C 圮+文件时,首先将要调用的函数在M A T L A B 中写成H 皮件,然后使用m c e 命+将m 文件编译成可
7、以在v c+中调用的c p p 3 件,最后在v c+程序中调用执行。也可以用砒c 编译器将n 皮件编译成为s t a n d-a l o n e 程序。m e c 编译器把m 文件转换成相应的C c+文件时提供了不同种类命令参数以便控制输出不同的文件。一x 可以把m 文件转换为C 文件并且创建相应的能直接在M A T L I B 中调用的C M E x m K 女件。一s 可以把-】文件转换为c 文件并目创建相应的使用动态大小输入输出的S i m u l i n k S-f i m e t i o n。一n l 可以把m 文件转换为c 文件并且仓0 建独立于M A T L A B 环境运行的
8、独立可执行文件。一p 可以把m 文件转换为c+斗文件并目创建独立于M A T L A B一1 3 万方数据环境运行的独立可执行文件。一B s 舸以把包含调用绘图函数的m 文f 牛转换为c 文件并且创建独立于M A T L A B 环境运行的独立可执行文件(需要独立图形库S G L)。一B s g l c p p n-j 1)A 把包含调用绘图函数的m 文件转换为“+文件并目创建独立于M A T L A B 环境运行的独立可执行文件(需要独立图形库S G L)。一B p c o d e 可以把茈瀚换为MA-I IAB 的p 文件。此外,二w,-T 等参数来控制生成c,C+的库文件或者共享库文件。
9、如果需要调试,可以加上-g 参数。例如在M A T L A B 的命令行方式下采用如下命令m c c B s g l c p p m y f i l e。m 将可以得到m y f i l e c p p,m y f i h h p p,m y f i l e m a l n h g c p p,m y m e 嗽等几个文件。其c P n C ,h e x e F,经是一个可以独立M A T L A B 环境运行的可执行文件。而m y f i l e c p p,m y f d e h p p,m y f i l e m a i n h g c p p 三个文件可以在V c+的开发环境下调用。通
10、过使用上述m c c a l l 口-以把算法在M 舢阻A B 中实现并且转换出相应的c,C+文件,那么接下来可以在、忙+环境中方便的设计程序界面,并调用生成的C,C+文件中的模块。在V C+工程中需要注意以下几点:1 加入需要包含的头文件所在的文件夹。通过菜单项T o o l s 选择O p t i o n s,在弹出来的O p t i o n s 模式设置对话框中选择D i r e c t o r i e s 选项卡,在S h o w d i r e c t o r i e s f o r T 拉框中选择I n c l u d e f i l e s,在下面的D i r e c t o r
11、 i e s 列表中添加两项:M A T L A B、e x t e m i n c l u d e 和M A T L A B e x t e m i n c h d e c p p o2 加入需要引用的库文件所在的文件夹。在S h o wd i r e c t o r i e sf 虾拉框中选择L i b r a r yf i l e s,在下面的D i r e c t o r i e s 列表中添加两项:M A T L A B e x t e r n l i b w i n 3 2 和M A T L A B e x t e r n M i b w i n 3 2、l n i c r o s
12、 o f t k m s v c 6 0。3 加入需要引用的动态链接文件所在的文件夹。在S h o wd i r e c t o r i e sf 0 币拉框中选择E 辩c ut a b l ef i l e s,在下面的D i r e c t o r i e s列表中添加M A T L A B u d n w i n 3 2 项。4 在工程中加入需要引用的库文件。通过菜单项P m j e c t 选择S e t t i n g s,在弹出来的P r o j e c t S e t t i n g s 模式设置对话框中选择L i n l【选项卡,在O b j e 删b r a l 驷1 0 d
13、 u l e 8 下面的编辑框中添加工程需要的觥l:l i b m a t p m 1 i b,l i b m a t l b m x 1 i b,l i b m a d b 1 i b,l i b m x 1 i b,8 9 1 1 i b,l i b m w s g l m 1 i b,l i b m m f i l e 1 i b,l i h m a t 1 i b。同时,在州e c t S e t t i 赡B 模式设置对话框中的G e 抛r a l 选项卡中的M i c 咖mF o u n d a t i o nC l a s s e s 的下拉框中选择U 靶M F Ci naS h
14、 a r e dD L L,使用动态的枷n c 类库。通过上述方法,采用、r C+调用眦c 命令生成的c,c+文件的方法进行程序设计与单独采用、屺+相比从编程复杂程度来说有明显的降低。三、利用M A l O M 转化M A T C O M 是M a t h T o o l s 公司(现已被M a t h W o d【s 公司收购)开发的为M A T L A B 中的n l 文件进行高效解释和调试的集成开发环境,其最高版本为4 5。集成调试编译环境为M I D E V A。通过M A T C O M j 匪接M A n。A B 同件有以下三种方法:1 经过简单的设置,在M I D E V A 中
15、打开需要转换的m 源文件,选择瑚e 菜单项下面的c o m p i l et o 黜o r 栅,将m 源文件转换一1 4 一为C C+X 件。在M A T C O M 的D E B U G 目录下可以找到生成的h,c p p,骶e 等文件。然后添加需要的c,c+文件到M S V C F _ 程中,再包含头文件就可以实现调用。2 I 妇M I D E v 缱接生成E x E 文件,然后在V C 中通过S h e l l 调用。这种方法简单方便,但运行时出现一个控制台窗口,而且由z f:V C+雨I M A T L A B 之间不能交互,通用性差,一般而言仅适用于v C H 调用M A T L A
16、 B 实现图形显示的场合。3 通过V i s u a lM A T C O M 工具条,使用A d d-i n,这种方法提供了M A T L A B 和、忙+直接集成的途径,且可快速集成n 歧件到v C+工程中创建独立的C C+I 直用程序,C M E X D L L,在调试过程中可以查看矩阵变量的值,可直接修改砌骥文件而不用修改生成的C,c+文件,极大的方便开发人员,让开发人员把主要精力放在算法的构造和设计方面。一般采用第三种方法,这需要在V c+环境中安装V i s u a lM A T C O M 工具条。在v C+环境中选择主菜单中T o o l s 菜单项,在下拉菜单中选择C u s
17、 t o m i z e,此时回弹出C u s t o m i z e 受J 话模式框,选择其中的A d d i n sa n dM a c r oF i l e s 选项卡,选择B r o w s e按钮,改变文件类型为A d d i n(a n),选择M A T c o m 4 5 b i n m v e i d e d l l 文件,最后点击确定。这时就在v C+的开发环境中安装好了V i s u a lM A T C O M 工具条。下面简要介绍二下如何在V c+环境中调用M A T C O M 生成的C,C+模块:首先在M A T L A B 中设计好算法,并得到一组m 文件。其次在
18、V C+1:创建一个主控应用程序工程,M A T C O M可以支持任意v c+工程类型的。那么在V c+主要完成界面和控制的工作。而主要算法仍然在M A T L A B 种开发,并通过M A T C O M 转换为C C+模块以供V C+主控应用程序工程调用。接着在V C+中点击V i s u a l M A T C O M 工具条上的A d d m f i l e st oc u r r e n tp m j e c t 按钮。选中已经在M A T L A B 中已经设计好的一主I 文件。这时可以看到在、亿+的F i l eV i e w 中增加了三个m-f d e s,c+槭l e 8c
19、 r e a t e df r o mm-f i l e s,M a t r i x 划i:夹。在三个文件夹分另q 对应这M A T L A B 的m 源文件,m 源文件生成的c,c+源文件,M A T C O M 的C C+D 态u B 库。虽然v C+I 程编译及运行时都不需要这些M A T L A B 的m 源文件,但是开发人员可以通过直接修改m 源文件的方式来达到修改C,C+文件的目的。加人工程中的主m 文件生成的c,c+文件含有一个返回值为i m 型的m a i n()函数,它封装好而玟件转换成的C,c H 模块。可以仿照别 m a i n()函数的形式在、+的工程中其他c,C+源文
20、件中要调用M 皿 B 开发程序的功能,代码形式如下i n i t M(M A T C O M _ V E R S I O N);m y l 山蒯傩();e x i t M();在调用M A T C O M 生成的C C+模J 块m y f u n c i t o n()之前,需要调用m l t M(M A T c 0 M 一R s I o N)函数来初始化M a t r l x 类库舭l i b 的调用,该函效可以在c,c+源代码的任意地方调用,调用结束要用e x i 啦()函数来结束类库调用。此外由于i n i t M()是通过一个静态变量而受保护的,所以它可以多次调用。头刘q:m a t
21、l i b。h q=定义的常量M A T c 0 M J E R s I O N 保证了动态链接库与m a t l i b。h 版本相匹配。当然也可以在i n i t M()函数和e x i t M()函数之间添加任意的符合M A T C O M 规范的代码。另外,可以通过使用全局变量实现参数在普通C C+3 C 件与通 万方数据过M A T C O M 转换m 文件生成的C c+文件之间的传递。例如可在C C+文件中定义全局变量,然后在通过M A T C O M 转换l 文件生成的c,C+文件中声明使用。四、调用M A T L A B:J l 擎M A T L A B E n g i n e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC MATLAB 混合 编程 实现 方法
限制150内