您的位置:首页 > 编程语言 > MATLAB

基于MATCOM的MATLAB与VC混合编程技术研究

2018-03-14 21:01 344 查看
基于MATCOM的MATLAB与VC混合编程技术研究吴高峰1,李熙莹2(1.中山大学物理科学与工程技术学院,广东广州510275;2.中山大学工学院,广东广州510275)木摘 要:研究了基于MATCOM的MATLAB与VC混合编程技术,提出了一种简便的设置MAT-COM环境的方法,介绍了MATCOM提供的一个方便调试工具——矩阵查看器及其具体使用方法。结 合实例,详细介绍了基于MATCOM的混合编程的实现途径,对扩展MATCOM的功能提出了一种独到 的解决办法。关键词:MATCOM;MATLAB;VC;混合编程中图分类号:TP311.1。TP319文献标识码:BResearch of MATLAB and VC hybrid programmingtechnology based on MATCOMWU Gao Fen91,LI Xi Yin92(1.School of Physics and Engineering,Sun Yat-sen University,Guangzhou 510275,China;2.School of Engineering,Sun Yat-sen University,Guangzhou 510275,China)Abstract:This paper described a MATCOM based on hybrid programming technology of MATLAB and C++.In this paper,a brief method to set the environment of MATCOM was broug}lt forward and a convenient debugging tool provided by MA7rCOM—Vi-sual Matrix Viewer wag presented.The implement based on MATCOM hybrid programming Wag introduced in detail with 80me typical examples.Finally.a unique solution to expand MATCOM’s ability was mentioned in the concluding part of this paper.Key words:MATCOM;MATLAB;VC;hybrid programmingMATLAB是MathWorks公司推出的数学软件,它将 数值分析、矩阵计算、信号处理、数据采集和图形显示结 合在一起,包含大量高度集成的函数可供调用。现在, MArI’LAB几乎在各个领域都得到了广泛的应用,也取得 了巨大的成功,被称为第四代编程语言。但是MATLAB使用的是解释性语言,这大大限制了 它的执行速度,而且用MAllLAB开发的程序只局限于 MATLAB运行环境而不能作为商业软件。VC作为Windows平台下主要的应用程序开发环境 之一,能方便实现软件开发,但在工程计算及可视化方 面,与MATLAB相比编程显得复杂很多,因此,将VC与 MATIAB混合编程,必将为软件开发带来便利。本文介绍基于MATCOM的混合编程方法。示例中 +基金项目:广东省科技厅工业攻关计划项目(2007A010100012) 4 用到的软件为MATLAB R2009A和VC 6.0。为了便于叙 述,用VC6.0新建一个基于对话框的程序TestMatcom。 1MATCOM简介MathTools公司有一系列的产品,包括MIDEVA、 MATCOM、Visual MATCOM、Matrix<LIB>。其中Matrix< UB>是所有产品的核心,它是一个C++数学图形图像 库,里面包含了约600个经过严格测试的函数,是实现 将M文件转化为C++文件的基础。MATCOM是基于 Matrix<LIB>的一个编译器,Visual MATCOM可以看成是 一个集成到VC环境中的MATCOM。而MIDEVA是M文 件的解释器和集成开发环境,它通过一个完整而强大的 开发和运行M文件的环境包含并拓展了MATCOM的功 能,可以和MATLAB相媲美。为了方便,通常将MathTools 公司的这些产品统称为MATCOM。本文在不引起混淆的情况下不作区分。 的混合编程实现步骤略有不同。现以2个示例说明。 2MATCOM的安装与配置 例1:MATCOM的安装与普通Windows程序的安装过程 类似。可参考文献【l】、[21所述。成功安装后,在目录C: hnatcom45klib下可找到matlib.h及v4501v.1ib这2个文 件,在Windows操作系统的system32目录下可找到 v4501V.dll和a904501.dll这2个文件。将这4个文件拷 贝到TestMatcom工程中再做如下配置即可:(1)在VC的FileView标签中的Resource Files目录上 点击右键一>Add Files to Folder一>文件类型选择“Library Files(.1ib)”一>选中v4501v.1ib一>点击“OK”即添加成功。 (2)在需要使用MA’rCOM函数的文件中添加#in. clude”matlib.h”。本文示例在TestMatcomDlg.cpp中添加。 (3)在使用MATCOM的函数之前,添加初始化语句: initM(MATCOM—VERSION)。本文示例在void CTestMat. comDlg::OnPaint()函数中添加。(4)在使用MATCOM的函数之后,添加释放资源语 句:exitM()。本文示例也在void CTestMatcomDlg::OnPaint ()函数中添加。为了使Visual MATCOM可用,也需做相应的配置, 参考文献f11、f31介绍了配置的过程,本文从略。3巧用矩阵查看器安装完Visual MATCOM之后可以看到Visual MATCOM工具栏中有个眼镜按钮,这个就是矩阵查看 器。在调试模式下可以通过它查看MATCOM矩阵的值, 这对VC程序调试是非常方便的。在VC中,指针变量和 数组尤其是二维及以上的指针变量和数组的元素值是 不方便查看的。有了这个工具,就可以将需要查看的指 针变量或数组的值传递给MATCOM矩阵,然后在矩阵 查看器中查看131。具体的查看方法是:在相应位置设置 断点,当VC程序运行到断点停下后,点击矩阵查看器 按钮,然后在矩阵名对话框里输入矩阵名,并点击 Reload按钮,矩阵的内容即可显示出来。另外,为了使得 矩阵查看器能在程序中起作用,需要在VC程序中添 加:unsigned int mlibpr=mt set MT(0)。示例:/t定义1个二维数组’,double a[2113]={1,2,3,4,5,6);,+定义1个Mm矩阵,并初始化为2行3列,元素都为0"/Mm ma=zeros(2,3);,s将数组元素复制到nla中・,memcpy((char*)ma.addr(),(ehar*)a,64sizeof(double)); 4混合编程的实现混合编程有不同的实现途径,本文将其分为二大类。 4.1将M文件转化为C++代码M文件可分为脚本文件和函数文件两大类。这两者 《微型机与应用》2009年第19期%wu'e8.mn=1000:t=inspace(0,2+pi,n);x=sin(t).+sin(24t).4sin(3+t);y=cos(5+t).+cos(7‘t).+cos(1l*t);plot(x,Y);双击桌面上的MIDEVA图标打开MIDEVA,然后在 MIDEVA菜单栏中选File一>Compile to exe,在弹出的 Go command对话框中通过浏览选择wires.m这个文件, 然后点击OK,转化成功后可以在C:kmateom45kDebug下 找到wires.cpp这个文件。打开这个文件,可以看到内容 为(删去不需要的代码,注释为笔者添加,欲全面r解M 文件与其对应的CPP文件的关系,可以参考文献【2】): //Mm为处理矩阵的类Mnl n;Mm t;Mm x;Mm Y;n=1000.0:t=linspace(O.0,2.0。pi,n);x=times(times(sin(t),sin(2.0宰t)),sin(3.04t));/*MATLAB的点乘操作在VC里面通过times函数实 现。},y=time6(time8(cos(5.0+t),cos(7.0+t)),COS(11.0札)); plot((CL(x),y));/’输入参数个数不定时,需用CL函数。注 意Y不用加CLO+,可以看出,经MATCOM转化后的C++代码和M代 码几乎句句对应,可读性强。将以上内容拷贝到void CTestMatcomDlg::OnPaint()函数中,编译运行即可得到所 需的结果。例2:%CreateMagic.mfunction result=CreateMagic(n)result=magie(n);用MATCOM成功转化后可以在Debug目录下找到 CreateMagic.cpp和CreateMagic.h这2个文件。将其添加 进TestMatcom工程中并在TestMatcomDlg.cpp中添加1句:#include“CreateMagic.h”同时在消息响应函数中添加 代码:“Mm a=5;Mm b=CreateMa百c(a);”可验证b为 5x5的魔方阵。若编译不通过,可尝试在CreateMagic. epp文件中添加#include”stdafx.h”。4.2将M文件转化为DLL出于代码保密等原因,有时需要将M文件转化为 DLL以供其他程序调用,这时可以利用MATCOM的 Compile to dll功能来实现。示例:%Exchange2.mfunction[c,d]=Exchange2(a,b)C=b:d=a;通过File一>Compile to dll将该M文件转化为dll, 在Debug目录下可找到Exchange2.1ib和Exchange2.dll这 2个文件,将其放入TestMatcom工程目录下并在Test. MatcomDlg.cpp中添加以下代码:卸哪comment(1ib,”Exchange2.1ib”) extem”C” int DLLX—stdcall Exchange2_v(char* emsg,int nlhs,Mm木plhsf】,int nrhs,Mm+prhs【】); MATCOM将M文件里面的函数Exchange2转化成 了Exchange2_v函数,该函数的第1个参数emflg用于传 递1个消息字符串,可赋值为NULL;第2个参数nlhs是 Exchange2函数定义的输出参数的个数;第3个参数plhs 【】是指向输出参数的指针数组;第4个参数nrhs是Ex-change2函数中定义的输入参数的个数;第5个参数 prhs[】是指向输入参数的指针数组。在消息响应函数中添加如下代码:Mm a,b,C,d;a=zeros(1,3);b---ones(1,3);b.r(1,2)=100; ,4将矩阵b的第1行第2列元 素赋值为100+, Mm+lnput[2]={&a,&b};Mm+Output[2】; //不用为其分配空间 //调用dU函数Exehange2_v(NULL,2,Output,2,Input);,,查看第1个输出参数的结果Mm lookOutputI=40utput[0】;,,查看第2个输出参数的结果Mm lookOutput2=+Output【l】;即实现了调用dll里的Exchange2_v函数。转:http://www.chinadmd.com/file/xzoatuzuiwscixvotrttes66_3.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: