您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MATLAB与VB混合编程方式简易教程
3.1MATLAB与VisualBasic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与VsiualBasic语言的接口,要想实现MATLAB与VisualBasic的混合编程可以通过以下途径来实现。1.通过ActiveX方式一是用VisualBasic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为VisualBasic语言的一个ActiveX部件调用。MATLABActiveX自动化服务的功能主要包括在MATLAB工作空间执行MATLAB命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MATLAB作为服务器组件的部分的例子就是以VisualBasic应用程序,以MATLAB作为服务器客户端的。2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MATLAB的接口,将MATLAB的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M文件生成的动态链接库。这种方法可以脱离具体的MATLAB环境,运行效率较高。3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在VisualBasic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。MatrixVB函数库的功能大致可分为8大类(矩阵运算、运算符重载、图形图像处理、最优化运算、多项式、信号处理、随机与统计分析、控制系统)。除以上3种方式外,我们还可以通过DDE的方式实现VB与MATLAB的数据通信。3.2MatrixVB环境设置3.2.1在VB应用中引入MatrixVB1.安装MatrixVB(1)系统要求为:●硬盘空间8.8M以上;●操作系统要求Windows95及其以上版本,或者WindowsNT4.0及其以上版本。(2)在安装盘上找到Matrixvb4510.exe,双击后启动安装程序,并按照安装向导安装。(3)然后在“开始→运行”菜单中用命令regsvr32mMatrix.dll注册,如图7-1所示。图7-1注册MatrixVb2.建立EXE项目(1)启动VB开发环境并建立“标准EXE”项目,如图7-2所示。图7-2选择标准EXE工程模板(2)单击“打开”按钮,所建立的项目及开发界面如图7-3所示。图7-3VB项目及开发界面3.为项目引入MatrixVB在project下拉菜单中单击References,在弹出的对话框中选中MMatrix项目,系统将加载MatrixVB的动态链接库MMatrix.DLL,如图7-4所示。图7-4引入MatrixVB的动态链接库3.2.2在VB中使用MatrixVB的命令与函数1.采用立即窗口的形式在项目中引入MatrixVB库后,在VB中可以直接在开发环境的“立即窗口”中输入MATLAB命令,让VB编译器立即执行,如在MATLAB主窗口中一样。在View下拉菜单的中选择ImmediateWindows选项在开发环境中得到“立即窗口”,如图7-5所示。图7-5VB中的立即窗口例如,在“立即窗口”中输入如下命令:A=eye(4,4)A.show命令将产生一个4行4列的单位矩阵,并在MatrixVB的观察窗口MatrixViewer中显示结果,如图7-6所示。图7-6在VB立即窗口中产生矩阵或者,在“立即窗口”中输入命令:mesh(peaks(3))将在MatrixVB的图形窗口Figure1中绘制并显示一个曲面网线图,如图7-7所示。图7-7通过立即窗口绘制曲面图2.在VB程序代码中使用可以将MatrixVB的函数与命令调用嵌入到VB程序代码中实现相应的功能,其函数与命令的使用方式类似于在MATLAB环境中的使用方式。例如,我们可以将上例中的功能在VB代码中实现,步骤为:(1)在上例的主窗口中增加一个按钮,如图7-8所示。图7-8为窗口Form1增加按钮(2)在按钮的Click事件处理过程中产生一个4行4列单位矩阵并显示,代码如下:PrivateSubCommand1_Click()A=eye(4,4)A.ShowEndSub单击命令按钮运行程序,运行结果如图7-9所示。图7-9VB代码中用MatrixVB产生矩阵同样,在代码中也可以嵌入MatrixVB绘制图形的函数与命令,将该例按钮的Click事件处理过程中的代码进行如下修改。PrivateSubCommand1_Click()mesh(peaks(30))EndSub运行结果如图7-10所示。图7-10通过嵌入MatrixVB命令绘图在发布基于MatrixVB的VB应用程序时,应将相应的库文件随系统一起发布。这些文件包括:v4510v.dll、c4510v.dll、ago4510.dll、msvcrt.dll、msvcirt.dll和MMatrix.dll。由于MMatrix.dll是COM服务器,所以必须在操作系统中注册后方可使用,注册时可使用如下命令行语句:regsvr32mMatrix.dll如果目标操作系统是Windows95,还必须发布另外两个OpenGL文件即opengl32.dll与glu32.dll,但在其他操作系统如Windows98/Me/NT4/2000等环境下,则不需要安装这些文件。2.3MatrixVB的矩阵操作矩阵是表示一组数据关系的组合,在MatrixVB中包含了许多矩阵分析函数,为了在VB中直接应用MatrixVB这些高效的计算方法,一般将VB中的数组当成矩阵进行处理,需要说明的是与matricVB矩阵元素相关的运算在VB中对应的数据类型一般为double类型。2.3.1在VB中生成MatrixVB矩阵可以像在MATLAB命令窗口中那样,直接在VB中定义MATLAB矩阵变量;也可以使用VB的VARIANT通用型变量表示矩阵,其定义的方法如下:DimxAsVariant一般在VB中产生MatrixVB的方法主要有以下几种:1.通过函数mabs转化为MatrixVB的矩阵将VB中定义的数组通过函数mabs转化为MatrixVB的矩阵,格式为:MATRIXVB_MATRIX=mabs(VB_ARRAY)MATRIXVB_MATRIX为MatrixVB的矩阵名称,如同在MATLAB窗口中那样,不需要事先定义,VB_ARRAY是VB程序中定义的数组,也可以是单独的VB常量与变量。修改图7-8中command按钮的Click事件的处理过程代码为:PrivateSubCommand1_Click()DimA(1to3,1to3)AsdoubleDimi,jAsintegerfori=1To3forj=1To3A(i,j)=CDbl(i+j)NextNextB=mabs(A)A.showEndSub该段代码首先定义了一个二维VB数组A,然后将其赋值,通过mabs函数转化为MatrixVB矩阵B并将其显示出来。运行程序并单击该按钮,运行的结果如图7-11所示。图7-11通过函数mabs产生的MatrixVB矩阵2.通过MatrixVB函数生成矩阵可以使用MatrixVB中的特殊函数(如zeros()、ones()、magic()等)直接生成矩阵。如在VB程序代码中直接嵌入语句:A=zeros(3,4)A.show结果将产生一个3行4列元素都为0的矩阵并将其显示出来。在应用程序中我们也可以先定义变量,然后再赋值产生矩阵。产生矩阵VB支持的两种类型为Matrix与Variant的如下语句,都将产生一个3×4的0矩阵。DimmatAsMatrixDimxAsVariantSetmat=zeros(3,4)'赋值为3×4的0矩阵Setx=zeros(3,4)'赋值为3×4的0矩阵3.通过函数CreateMatrix通过函数CreateMatrix创建的矩阵可以在创建过程中直接赋值,格式为:CreateMatrix(p1,p2,…,pn,)p1,p2,…,pn为矩阵的值。函数Reshape用来设置由函数CreateMatrix所创建的函数的维数,格式为:Reshap(X,rows,cols)X为由CreateMatrix创建的矩阵,rows为指定的行数,cols为指定的列数,如下例所示:A=CreateMatrix(1,2,3,4,5,6,7,8,9)Reshap(A,3,3)A.Show创建一个矩阵,并将其指定为3行3列,结果如图7-12所示。图7-12由CreateMatrix产生的MatrixVB矩阵2.3.2对矩阵元素进行操作1.矩阵元素的存取及与VB的数据转换(1)通过圆括号方式访问MatrixVB矩阵,但是这种方式只能对矩阵元素进行写操作,其格式如同访问VB的数组元素一样,例如:A是一个二维矩阵则下列代码:A(i,j)=2.0可以将矩阵的第i行第j列赋值为1。(2)MatrixVB矩阵属性rN、iN可以以读写的形式访问矩阵X中的每个元素的实部和虚部,其中N表示矩阵的维数,例如,对于一维MatrixVB矩阵AA.r1(i)=12'写操作a=A.r1(i+1)'读操作将矩阵A的第i个元素赋值为12,将第i+1个元素赋值给VB中的变量a。再如,对于二维矩阵BB.r2(i,j)=12a=B.r2(i,j)将矩阵B的第i行j列元素赋值为12,将矩阵B的第i行第j列元素赋值给VB中的变量a,要通过iN的方式来访问。(3)X.simple可以将MatrixVB矩阵X转换为VB中的数据类型。在X为只有一个元素的矩阵情况下,若X为一个实数则将值转换为VB中的Double类型,如:DimSAsDoubleA=CreateMatrix(1.0)S=A.simple若X为一个字符的单元素矩阵,则X.simple返回一个VB中的字符串类型;若X为由多个元素的一维或者多维矩阵,则该表达式将返回一个矩阵,但不能自动转换为VB中相应的一维或者多维数组。2.矩阵的显示属性show具有打开Matrixviwer窗口显示矩阵内容的功能,格式为:X.Show3.获得矩阵的行、列、维数利用函数rows()、cols()、dims()、dimension(n)返回矩阵的行数、列数、维数及第n维数的个数属性,与这些属性相关的VB中的数据类型一般为integer类型,如,对于二维矩阵A,下面的代码将得到矩阵的函数与列数,并将其赋值给VB中的变量。a=A.rows()'获得矩阵的行数b=A.cols()'获得矩阵的列数c=dims()'获得矩阵的维数d=dimension(1)'第一维的个数例如,在VB程序中产生一个MatrixVB矩阵并修改其元素的值,获得其属性并输出,修改图7-8中command按钮的Click事件的处理过程。代码为:PrivateSubCommand1_Click()'定义变量用于接收MatrixVB中矩阵元素的值或属性值DimxrAsdoubleDimxiAsdoubleDimiAsintegerDimrowAsintegerDimcolAsintegerDimdimsAsintegerA=zeros(3)'产生一个3行3列的零矩阵'给矩阵赋值fori=1To3forj=1To3A(i,j)=CDbl(i+j)NextNextA.show'显示矩阵xr=A.r2(2,2)'获得矩阵2行2列的值row=A.rows(
本文标题:MATLAB与VB混合编程方式简易教程
链接地址:https://www.777doc.com/doc-2881897 .html