MATLAB与VB混合编程方式简易教程讲解

合集下载

五种VB与MATLAB混合编程接口的方法

五种VB与MATLAB混合编程接口的方法

摘要: 为充分发挥Matlab与VB各自的优势,将二者结合起来进行工程应用软件的开发。

本文介绍了五种VB与MATLAB混合编程接口的方法,并对各方法性能的优劣进行了比较和评价。

关键词: Matlab;Visual Basic;ActiveX;DDE;MatrixVB;DLL;COM1引言Microsoft Visual Basic是由微软公司开发的可视化编程语言之一,由于它简单易学的特点,只要稍有编程基础就可以很快掌握,可视化的用户界面设计功能,把程序设计人员从繁琐复杂的界面设计中解脱出来。

因而很快就风靡全球,是一种十分强大和有生命力的Windows 编程语言。

但是我们知道VB语言也有它的缺点,即对于数值计算方面其能力欠佳。

Matlab是Matlab 擅长处理数值计算和系统模拟仿真,已被广泛应用于数字信号处理、电力系统仿真、图像处理、系统识别等各个领域。

但是Matlab也存在一些缺点: 1、和其他高级程序相比,程序的执行速度较慢,那是因为;2、对于底层硬件操作以及编程界面方面远远比不上VB、VC 等软件。

鉴于二者各自的优势,为了提高工程软件的开发效率和质量,将两种软件结合起来进行工程应用软件的开发便成了实际的需要。

本文主要讨论VB与Matlab混合编程的几种方法。

2Vb和Matlab接口实现方法介绍2.1借助ActiveX技术ActiveX是特点就是使不同的软件对象可以跨进程、跨平台并能在网络上进行交互。

Matlab ActiveX自动化服务的功能主要包括在(1) Execute (Command as String) 方法: 执行本方法将调用MATLAB执行一条Command 字符串决定的Matlab命令,同时返回一条字符串表示命令的执行情况。

任何能在MATLAB命令行窗口执行的命令均可以被包括在Command 字符串中。

(2) GetFullMatrix方法: 该方法用来将Matlab中的一个矩阵变量传送到VB 程序的一个一维数组或二维数组中。

VB与Matlab混合编程

VB与Matlab混合编程

一、准备工作(1)matlab版本2012或以上(2)vb6.0二、适用条件matlab生成的无论是应用程序还是动态连接库或者是COM组件都需要MCR的支持,MCR因用户安装的Matlab版本不同分为32位和64位,所以为了能够将自己编译的M文件能够应用于其他的电脑上,首先要在目标电脑上安装自己电脑中MCR这个应用程序,它的存放位置为Matlab路径\ toolbox\compiler\deploy\win64三、Matlab与VB基于Com组件的实现过程(1)在Matlab中生成M文件的COM组件打开App菜单栏,找到Matlab Complier单击进入应用,会出现上图的界面,在Classes 中可以添加自己要用的类群,所谓的类群就是好比如果你想建立一个专门用于解决非线性方程的类,就可以建立个nonlinear equations solver,在类下可以添加用于解决非线性方程的各种M函数文件。

在这里我建立了fft类,在这个类中我添加了个myfft.M文件,这个M文件实际上使用了Matlab自带的离散傅立叶变换函数fft,这么做的目的是为了说明我们可以调用matlab已经建立好的各种算法,方便的在vb中调用。

添加好所需要的资源,点击build就OK了。

(2)注册生成的COM组件在Build Success后会在你选择生成Com组件的文件地址发现两个文件distrib和src,在distrib文件里你会发现你生成.dll文件,在电脑上注册它就可以在vb上调用。

至于怎么注册,自行脑补。

(3)在VB中调用Com组件在vb中的引用中通过浏览功能引用生成.dll文件,那么现在就可以使用了。

使用步骤:1.Dim xxx as new 工程名.类名xxx可以随意,工程名为你在Matlab中生成COM组件时自己定义的COM 组件名,类名为COM组件下你添加的类名2.通过xxx.函数名(nargout,y1,y2,y3,....,yn,x1,x2,...,xn)函数名为Matlab中定义在此类下的函数名,nargout为输出变量个数,y1,y2,...,yn 为输出变量,x1,x2,....,xn为输入变量。

VB调用MATLAB混合编程教程(完整版)

VB调用MATLAB混合编程教程(完整版)

VB与MATLAB混合编程探讨摘要:介绍了VB与MATLAB混合编程的方法,二者结合可以充分利用VB的方便快捷和MATLAB软件工具箱的强大功能。

关键词:VBVC++MATLABDLL编译MATLABAdd-inMATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。

但是MATLAB语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。

VisualBasic作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。

因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的技术支持。

1基本思路及实现方法MATLAB提供了与C++、Fortran的程序接口,并没有提供直接与VB的接口。

目前VB与MATLAB混合编程方面主要使用以下一些方法:(1)在VB中通过调用MATLAB的引擎(Engine)接口,使用Windows的OLE或ActiveX通道与MATLAB通信。

通过Object.Execute MATLAB语句在程序中直接使用MATLAB提供的函数库和图形库。

这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个MATLAB进程,影响程序运行速度,占用内存。

(2)通过使用嵌入VB的矩阵函数库MatrixVB的方法。

MatrixVB是由原MathTools公司开发的第三方插件,利用与MATLAB相似的函数、语法嵌入到VB中,可以象使用VB的函数、命令一样使用MATLAB函数。

这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入VB语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。

安装后,只需在打开的工程中添加MatrixVB库即可(在工程->引用对话框中选中MMatrix)。

但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。

VisualStudio与Matlab实现混合编程

VisualStudio与Matlab实现混合编程

VisualStudio与Matlab实现混合编程环境:Win10vs2010Matlab2015⾥⾯有很多选做的内容,其中2、3必做1.Matlab环境设置:(选做)我没有做这步,因为打mbuild -setup指令不识别,缺少SDK,但是可以正常调⽤Matlab,这步是其他⽅式调⽤Matlab中的⼀步,使⽤Matlab⽣成DLL⽂件,VS引⽤要建⽴独⽴运⾏的C应⽤程序,系统中需要安装Matlab、Matlab编译器、C/C++编译器以及Matlab C/C++数学库函数和图形库函数。

Matlab编译器使⽤mbuild命令可以直接将C/C++源代码编译为独⽴运⾏程序,在这些源代码中可以使⽤Matlab提供的接⼝来调⽤Matlab数学库函数。

虽然⽣成的可执⾏程序可以脱离Matlab环境运⾏,但是它需要Matlab C/C++数学库⽂件或者图形库⽂件的⽀持才能运⾏。

但如果C/C++源代码完全是按传统C/C++源代码语法规则编写,没有包含Matlab数学库和图形库的调⽤,则不仅可以独⽴与Matlab环境,也不需要那两个库函数的⽀持。

在 Matlab 的Command Window 下输⼊命令。

mbuild – setup操作过程如下图:然后输⼊命令mex – setup以类似的⽅法配置编译器。

Matlab 的配置完成。

2.VS环境设置(必做)(1)设置Include 和Library ⽬录项⽬右键->属性->VC++⽬录->包含⽬录:添加<MATLAB>\R2010b\extern\include\win64 我的是:D:\RUANJIAN\Matlab\extern\include\win64<MATLAB>\R2010b\extern\include\ 我的是:D:\RUANJIAN\Matlab\extern\include项⽬右键->属性->VC++⽬录->库⽬录:添加<MATLAB>\R2010b\extern\lib\win32\microsoft 我的是:D:\RUANJIAN\Matlab\extern\lib\win64\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft截图::(2)设置⼯程⽬录: ( 我并没有设置)项⽬右键->属性->C/C++->常规->附件包含⽬录:添加<MATLAB>\R2010b\extern\include\win64<MATLAB>\R2010b\extern\include\项⽬右键->属性->链接器->常规:添加<MATLAB>\R2010b\extern\lib\win32\microsoft<MATLAB>\R2010b\extern\lib\win64\microsoft项⽬右键->属性->链接器->输⼊->附件依赖性:添加 (必做)libeng.liblibmat.liblibmex.liblibmx.lib 注:1.lib⽂件包含在<MATLAB>\R2010b\extern\lib\win64\microsoft,可根据需要增减 2.附件依赖性在VS2010前以空格隔开,在VS2010后使⽤;隔开。

VB与MATLAB接口的实现

VB与MATLAB接口的实现

VB与MATLAB接口的实现今天,我们制作一个能够与Matlab进行交互的应用程序。

程序运行结果如图所示。

运行结果技术要点●引用Matlab库●执行Matlab命令●结束Matlab实现过程■新建项目打开Visual ,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中选择“Windows应用程序”,在名称域中输入“CnMatlab”,然后选择保存路径。

单击“确认”。

■添加控件向当前窗体添加五个Button按钮,两个Picture控件,一个Label控件,一个Hscroll控件和一个Vscroll控件。

单击菜单“项目|添加引用”,选中“Matlab Automation(V ersion5.3)Type Library”这一项。

注意:本程序只能在安装有Matlab的机器上运行。

■设置属性将Label控件和Command按钮的Text属性设置为与界面一致。

在此不再赘述。

■添加代码Dim str1 As String' 显示正弦图Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command1.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")matlab.MinimizeCommandWindow()str1 = "t=1:0.1:2*pi;y=sin(t);plot(t,y)"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示三维扇形图Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command2.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "sale=[100 150 400 250];pie3(sale,[0 0 1 0],{'春季','夏季','秋季','冬季'})"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示三维螺旋线图Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command3.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "t=0:0.1:8*pi;plot3(sin(t),cos(t),t)"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub' 显示立体球图Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command4.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "k = 5;n = 2^k-1;[x,y,z] = sphere(n);c = hadamard(2^k);surf(x,y,z,c);"str1 = str1 & "colormap ([1 1 0; 0 1 1]);axis equal"matlab.Execute(str1)matlab.Quit()matlab = NothingShowPic()End Sub' 显示立体波浪图Private Sub Command5_Click(ByVal eventSender As System.Object, ByVal eventArgs AsSystem.EventArgs) Handles Command5.ClickDim matlab As Objectmatlab = CreateObject("matlab.application")str1 = "[X,Y,Z] = peaks(30);surfc(X,Y,Z);colormap hsv;axis ([-3 3 -3 3 -10 5])"matlab.Execute(str1)matlab.Execute("print( gcf, '-djpeg', 'c:\foo')")matlab.Quit()matlab = NothingShowPic()End Sub■运行程序单击菜单“调试|启动”或单击图标运行程序。

基于VB与Matlab的混合编程方法_隗燕琳

基于VB与Matlab的混合编程方法_隗燕琳
2 混 合 编 程 技 术
2.1 采 用 动 态 链 接 库 DLL(Dynamic Link Libraries)方 法 编程
DDL 方 法 是 用 Matlab 提 供 的 COM 生 成 器 (COM Builder)[3],将 Matlab开发的算法做 成 组 件 ,这 些 组 件 作 为 独立的 COM 对 象,
步骤4打包和分 发 组 件:一 旦 组 件 生 成 成 功 就 可 以 打 包分 发 给 使 用 用 户,在 Component 菜 单 中 选 择 Package Component选项就可创 建 一 个 自 解 压 可 执 行 程 序;如 果 该
* 收稿日期:2013年2月27日,修回日期:2013年3月30日 作 者 简 介 :隗 燕 琳 ,博 士 ,工 程 师 ,研 究 方 向 :舰 船 磁 性 防 护 。
Vol.41 No.8 1388
计算机与数字工程 Computer & Digital Engineering
总 第 286 期 2013 年 第 8 期
基于 VB 与 Matlab的混合编程方法*
隗燕琳 陈进明 (92957 部 队 舟 山 316000)
摘 要 根据 Matlab强大的数据处理能力和 Visual Basic界面开发能力的编程优点,研究探讨 了 两 者 相 结 合 混 合 编 程 的 方 法 ,并 分 析 了各种混合方法中数据格式、数据交互机制及具体应用实例。采用两者混合编程对工程计 算 软 件 的 开 发 ,提 高 开 发 质 量 和 效 率 具 有 重 要 的 意义。
2013 年 第 8 期
计算机与数字工程
1389
项目要在 其 它 用 户 计 算 机 上 所 使 用,运 行 自 解 压 程 序 将 DLL 文件注册于其它计算机即可。

Matlab与VB混合编程

Matlab与VB混合编程

*打开生成的安装包中的
setup.Lst文件,[Bootstrap Files]字段里面只保留 VB6STKIT.DLL和 msvbvm60.dll几个文件, 其余的都删掉,否则在不同 版本的系统上使用可能会 报错。
16 /23
6、应用程序安装 (1)安装VB应用程序。在要安装的计算机上,新建一 个文件夹作为应用程序的安装目录。将打包好的VB程序 中的压缩包(.CAB)解压到安装目录中再进行安装。 ( 2 )安装 Matlab 控件。运行 COM 组件包中的 distrib 文 件夹下的类名.exe文件,运行过程中全部按“y”覆盖原 文件。将安装目录指向VB应用程序安装所在的目录(即 VB应用程序与Matlab控件安装在同一个目录下),否则 dll文件是没有办法注册的,选择后,全部点击Next,至 Matlab Component Runtime安装完成,DOS安装界面也 会随后自动关闭。
,在算法上采用C++语句,所以运行速度较快,可应用于实时运算
。通过这种方法可以发布成脱离MATLAB和VB的安装软件, 在其他没有安装MATLAB和VB软件的计算机上都能运行。
8 /23
实现步骤(一) Matlab7.1 版
1、开发环境: Visual Studio 6.0 Matlab7.1安装路径不能有空格或中文 2、编写m文件 (注:m文件必须为m函数,不能是脚本文件) function plotcur x=0:0.01:2*pi; y=sin(x); set(gcf,'visible','off'); plot(y) print -dmeta; close(gcf);
编译
编译过程
21 /23
4、生成自解压安装包 在本地使用的话,MATLAB会自动注册 COM 组件,无需发布;但如果要在没有安装 MATLAB的计算机上使用,安装包就需添加 MATLAB运行库MCR。点击PackageAdd MCR

VB与MATLAB混合编程研究与实现

VB与MATLAB混合编程研究与实现

VB与MATLAB混合编程研究与实现摘要:介绍了VB与MATLAB混合编程的5种方法,分别利用com 组件技术与MatrixVB完成了VB与MA TLAB混编,实现了图像的绘制。

从两种实验结果来看,这两种方法占用计算机内存小,且编程语言简单,充分利用了VB与MATLAB的特点,简化了编程过程。

关键词:VB;MATLAB;com组件;MatrixVB0引言VB具有方便的资源文件集中管理模式、开发周期短、开发环境友好等特点。

MATLAB具有强大的计算机绘图能力,并且提供大量的数据库,但是界面开发能力差、代码运行效率低。

将VB与MATLAB 的特点结合起来,运用VB与MATLAB混合编程实现仿真,使两者相得益彰,不失为一种有益的尝试。

1VB与MATLAB接口编程方法VB与MATLAB混合编程有多种方法,各有优缺点,主要有下面几种方法。

1.1利用ActiveX技术ActiveX自动化(OLE自动化)协议是一种允许一个应用程序(控制端)去控制另一个应用程序(服务器端)的协议。

在VB下通过ActiveX自动化接口可将MATLAB作为Visual Basic语言的一个ActiveX部件调用。

但是这种方法不能脱离MATLAB运行环境,占用计算机内存较大。

1.2利用可执行文件技术这种方法将MATLAB的运算模块生成可执行的exe文件,然后在VB运行环境下调用。

这种方法占用内存较小,运行效率较高。

1.3利用MatrixVB技术MatrixVB 是MathWorks 公司为VB 开发的插件,插件增强了VB 绘图和计算的函数集合。

它包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能,用来补充VB 本身内建函数和图形处理的不足。

这种方法运行效率高、占用内存小。

1.4利用动态数据交换(DDE)技术动态数据交换(DDE)是在Windows环境下支持客户/服务器计算模式的重要技术。

由于VB支持DDE客户端功能,MA TLAB提供了DDE服务功能,因此,利用VB和MATLAB的动态数据交换能力,可以实现在VB应用程序中调用MATLAB。

MATLAB与VB混合编程方式简易教程

MATLAB与VB混合编程方式简易教程

3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。

1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。

其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。

二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。

MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。

2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。

这种方法可以脱离具体的MA TLAB环境,运行效率较高。

3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。

vb调用matlab程序步骤-wrl修改

vb调用matlab程序步骤-wrl修改

先把VB,VC ,matlab都安装好。

例如建立一个 M函数文件,在matlab下调试好你的m文件,如:function Y=myfunction(a,b)Y=a+b;将myfunction.放入E:根目录下。

一.matlab下做com组件,生成dll文件1. 在matlab的command window里面敲入mex –setup (对matlab编译器配置命令下输入,注意有空格)Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Compaq Visual Fortran 6.1[5] Compaq Visual Fortran 6.6[6] Intel C++ 9.1 (with Microsoft Visual C++ 2005 linker)[7] Intel Visual Fortran 9.1 (with Microsoft Visual C++ 2005 linker)[8] Intel Visual Fortran 9.0 (with Microsoft Visual C++ 2005 linker)[9] Intel Visual Fortran 9.0 (with Microsoft Visual C++ .NET 2003 linker)[10] Lcc-win32 C 2.4.1[11] Microsoft Visual C++ 6.0[12] Microsoft Visual C++ .NET 2003[13] Microsoft Visual C++ 2005[14] Microsoft Visual C++ 2005 Express Edition[15] Open WATCOM C++ 1.3[0] NoneCompiler: 11Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? y 由于我VC 的安装目录正在C盘,因此我选择yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\Application Data\MathWorks\MATLAB\R2007a\mexopts.batFrom template: C:\PROGRA~1\MA TLAB\R2007a\bin\win32\mexopts\msvc60opts.batDone . . .2.设置matlab编译器,在matlab的command window里面敲入mbuild –setup (对matlab 编译器配置命令下输入,注意有空格)Please choose your compiler for building standalone MATLAB applications:Would you like mbuild to locate installed compilers [y]/n? nSelect a compiler:[1] Borland C++ Compiler (free command line tools) 5.5[2] Borland C++Builder 6.0[3] Borland C++Builder 5.0[4] Lcc-win32 C 2.4.1[5] Microsoft Visual C++ 6.0[6] Microsoft Visual C++ .NET 2003[7] Microsoft Visual C++ 2005[8] Microsoft Visual C++ 2005 Express Edition[0] NoneCompiler: 5Your machine has a Microsoft Visual C++ compiler located atC:\Program Files\Microsoft Visual Studio. Do you want to use this compiler [y]/n? yPlease verify your choices:Compiler: Microsoft Visual C++ 6.0Location: C:\Program Files\Microsoft Visual StudioAre these correct?([y]/n): yTrying to update options file: C:\Documents and Settings\Administrator\ApplicationData\MathWorks\MATLAB\R2007a\compopts.batFrom template: C:\PROGRA~1\MATLAB\R2007a\bin\win32\mbuildopts\msvc60compp.batDone . . .--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcomutil.dll succeeded--> "C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwregsvr C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll"DllRegisterServer in C:\PROGRA~1\MATLAB\R2007a\bin\win32\mwcommgr.dll succeeded2. 开一个dos窗口,进入/bin/win32目录下(matlabroot为你机器上matlab安装的路径),例如,我的安装目录在C盘,在dos下进入:C:\Program Files\MATLAB\R2007a\bin\win32 文件夹,输入:regsvr32 mwcomutil.dll,即对mwcomutil.dll进行注册(这个dll是matlab下作的任何com组件都要用到的dll),下面我们在其他编译器下调用时就可以用了。

VB与MATLAB结合

VB与MATLAB结合

Dim Matlab as object ‘定义Matlab为对象变量 Set Matlab = Createobject(“Matlab.Application”) ‘ 创 立 MATLAB 的 ActiveX对象
创建了MATLAB的ActiveX 对象后,就可以使用这个对象的各种方法来 调用MATLAB了。该对象提供了以下几个主要方法。 ①Execute(command as string): 执行Execute方法将调用MATLAB执行一条 由command字符串决定的MATLAB命令,同时返回命令的执行情况。 ②GetFullMatrix(Name,Workspace,Array(double)*real,Array(double)* ieal) 该方法将指定的MATLAB工作空间中的一个一维或二维数组送到VB程序中 ,Name指定了MATLAB中的矩阵变量名,Workspace指定了该矩阵所在的工作 空间,real和ieal分别是数组的实部和虚部。 ③ PutFullMatrix(Name,Workspace,Array(double)*real,Array(double)* ieal) 该方法将VB程序中的一个一维或二维数组传送到指定的MATLAB工作空间 中。
举例:
Dim p() As Double Dim image() As Double Call matlab.putfullmatrix("PT", "base", p, image) matlab.Execute ("B=inv (PT) ") Call matlab.getfullmatrix("B", "base", p, image)
1. 掌握VB中文件的概念、种类及其结构;

VB调用Matlab制作的COM组件实现二者混合编程

VB调用Matlab制作的COM组件实现二者混合编程

4、Matlab中处理返回结果并使用它进行进一步计算或可视化等操作。
四、注意事项
在使用基于COM的VB与Matlab混合编程时,需要注意以下几点:
1、确保VB COM接口和Matlab代码之间的兼容性。这通常需要对两种语言进 行适当的转换和映射。
2、COM接口的创建和实现可能需要耗费大量时间和精力,因此需要仔细规划 和设计。
4.处理异常
在调用Matlab函数时,你可能会遇到各种异常情况,例如参数类型不匹配、 参数数量不匹配等等。为了处理这些异常,你需要在VB代码中使用异常处理机制:
result = myMatlabObject.YourFunctionName(input1, input2)
' Handle the exception here
1、创建Matlab COM组件
首先,我们需要创建一个Matlab COM组件。打开Matlab,编写你希望从VB 调用的函数,例如一个用于图像处理的函数。然后在命令窗口中输入以下命令以 创建COM组件:
这将打开COM工具箱。在“新建项目”窗口中,选择“COM库”,然后输入库 名和位置。接下来,添加你的Matlab函数到库中。
在这个例子中,如果myMatlabObject.YourFunctionName(input1, input2) 抛出一个异常,那么这个异常会被Catch块捕获,并可以进一步处理。
5.在VB中使用返回值 在你的Matlab函数返回值后,你可以在VB中使用它。例如:
在这个例子中,如果result不是Nothing,那么你可以进一步使用这个结果。 6.错误检查和清理
1、创建 MATLAB函数:首先
例如: function obj = MyClass(x) function result = add(obj, y)

【推荐下载】探究vb与matlab混合编程

【推荐下载】探究vb与matlab混合编程

[键入文字]
探究vb与matlab混合编程
探究vb与matlab混合编程
 1 VB和Matlab混合编程的方法和算例由于Matlab本身只提供了Fortran、C语言的接口程序,所以无法直接实现VB对Matlab的调用.故Matlab与VB混合编程中需要解决的关键是如何实现在VB中调用Matlab. Matlab与VB混合编程的方法主要有下面4种.
 1 1 ActiveX技术ActiveX技术是以组件对象模型(componentobject model,COM)技术为基础的一种应用程序开发技术和体系结构的总称,它是Microsoft公司提供的一种用于模块集成的新协议,它允许应用程序或组件控制另一个应用程序或组件的运行. Matlab5.
 0以上的版本均支持ActiveX的嵌入.因为VB支持ActiveX自动化控制端协议,Matlab 支持ActiveX自动化服务器端协议,所以VB和Matlab的通信有两种:一种是自动化服务器,另一种是自动化控制器.本文重点探讨VB如何通过ActiveX接口将Matlab作为VB 的一个ActiveX部件,实现数值计算和图形显示.要实现这种功能,用户首先必须获得Matlab ActiveX对象在系统注册表中定义的名字─Matlab.Application.在所编写的程序中必须有如下的代码:Dim Matlab as ObjectSet.
1。

VB调用matlab

VB调用matlab

本来,VB与MATLAB混编的时候,我采用了VB+matrixVB的方法,常用的矩阵运算,是够用了的。

但是在处理矩阵的LU三角分解的时候,发现matrixVB的三角分解形为:PA=LU。

而非数值计算方法中的A=LU,想了半天,终于决定用matlab搞一下,发现在MATLAB中默认的LU分解就是matrixVB中的形式,于是狠狠心,自编函数,生成M文件,在MATLAB中终于实现了A=LU的三角分解,为了和VB混编,想到了com方法。

于是在MATLAB命令窗口中输入comtool ,调出combuilder,进行DLL 的生成,结果呢,就这一个小小的念头,折腾了我一天。

才终于成功,下面把我的心得给大家分享一下。

1.环境(操作系统XP ,MATLAB7.0 ,VC++6.0)开始,我并没有装VC++6.0,结果在编译DLL时总是提示找不到编译器,当然了是英文提示,大概有这么一句“Could not find the compiler "cl" on the DOS path。

”后来我装了VS2005,问题同上,最后才装了VC++6.0,并在MATLAB命令窗口中输入mbuild –setup……………….省略多行提示Would you like mbuild to locate installed compilers [y]/n?y(在此输入y)Select a compiler:[1] Lcc C version 2.4 in G:\MATLAB6P5\sys\lcc[2] Microsoft Visual C/C++ version 6.0 in G:\Microsoft VisualStudio[0] NoneCompiler: 2(在此输入2)…………省略多行提示Are these correct?([y]/n): y(在此输入y)然后就可以成功的编译DLL了。

我终于明白,原来这个编译器也是需要和MATLAB的版本匹配的。

VB调用Matlab的COM组件实现二者混合编程

VB调用Matlab的COM组件实现二者混合编程

3 2007212227收到,2008204205改回33 基金项目:国家863课题(编号:2006AA 10Z 260)资助。

333孟力力,女,1982年生,硕士研究生,研究方向:温室环境建模与可视化模型。

文章编号:100325850(2008)0620024203VB 调用M atlab 的COM 组件实现二者混合编程Hybr id Programm i ng by Usi ng COM of M a tlab i n VB Sof tware孟力力 杨其长(中国农业科学院农业发展与可持续发展研究所 北京 100081)【摘 要】M atlab 具有强大的计算和图形处理能力,VB 具有良好的用户界面,将二者有机结合,可开发出功能强大的软件。

介绍了常见的五种方法。

为了使开发的VB 程序脱离M atlab 环境,详细介绍了一种基于组件对象模型(COM )的M atlab 与VB 混合编程方法,以COM B u ilder 为转换工具,将M atlab 函数文件转换为COM 组件,在VB 程序中调用这个组件。

并通过温室热环境模拟可视化模型的实现说明此方法。

【关键词】VB ,M atlab ,COM 技术,可视化模型中图分类号:T P 311111文献标识码:AABSTRACT M atlab has pow erfu l calcu lating and graph ic p rocessing ab ility ,VB has good u ser in terface 1T he softw are w ith pow erfu l functi on s is developed based on com b inati on of the above 1F ive m ethods are in troduced in th is paper 1In o rder to develop the VB p rogram w ithou tM atlab environm en t ,the m ethod based on COM is in troduced in detail 1By m ean of M atlab COM bu ilder ,M atlab’s functi on files can be converted in to a COM componen t ,w h ich is app lied in the VB 1T he m ethod is demon strated by i m p lem en tati on of visual si m u lati on model of greenhou se therm al environm en t 1KEYWOR D S VB ,M atlab ,COM bu ilder ,visual model M icro soft V isual B asic 是由微软公司开发的在W indow s 操作平台上的主力编程语言之一,具有良好的可视化界面、程序集成化程度高、易学易用等特点,因而一经推出就风靡全球,是一种十分强大和有生命力的W indow s 编程语言。

VB与Matlab混合编程的实用方法

VB与Matlab混合编程的实用方法
( Na n j i n g Un i v e r s i t y o f P o s t s a n d T e l e c o m mu n i c a i t o n s, E l e c t r o n i c S c i e n c e a n d E n g i n e e i r n g c o l l e g e, Na n j i n g 2 1 0 0 2 3, C h i n a )
Ab s t r a c t :I n o r d e r t o ma k e t h e p o w e fu r l f u n c t i o n s o f ma t l a b c a n p l a y i n t h e b r o a d e r i f e l d ,h y b i r d p r o g r a mmi n g i s a v e r y a p p r o p i r a t e me t h o d .An d Mi c r o s o f t Vi s u a l Ba s i c i s a v e y r s u i t a b l e f o r d e v e l o p me n t f r i e n d l y u s e r i n t e f r a c e p r o g r a mmi n g l a n -
矩 阵
表 1 Ma t r i x V B 中部 分 常 用 函数 举 例
类别 书写格式
x = z e r o s( 3 , 5 )
函数 功能
3 x 5的 0矩 阵
x = C r e a t e M a t r i x( p l,p 2, …, p n, ) 第一行分别 为 p 1 , p 2 , p 3 … p n的矩阵 x = m a g c( 3 )
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.1 MATLAB与Visual Basic语言的混合编程方式MATLAB提供了与C/C++、Fortran语言的接口,但没有与Vsiual Basic语言的接口,要想实现MATLAB与Visual Basic的混合编程可以通过以下途径来实现。

1.通过ActiveX方式一是用Visual Basic开发服务器ActiveX组件,MATLAB作为客户端程序使用,事实上无论是用VB还是VC或者其他语言环境开发的ActiveX组件,对于MATLAB来说集成与调用方式是一样的,一般情况下很容易地将不同环境下开发的用途各异的ActiveX对象集成到一个MATLAB应用中来。

其使用方法见第5章关于MATLAB作为ActiveX的客户端使用方法。

二是在VB环境下可以通过ActiveX自动化接口将MATLAB作为Visual Basic语言的一个ActiveX 部件调用。

MATLAB ActiveX自动化服务的功能主要包括在MA TLAB工作空间执行MA TLAB 命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MA TLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。

2.通过动态链接库方式该种方式是一种间接调用MATLAB命令的方式,借助于C++与MA TLAB的接口,将MATLAB 的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。

这种方法可以脱离具体的MA TLAB环境,运行效率较高。

3.通过嵌入VB的矩阵函数库MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM组件,包含了大量与MATLAB相似的函数与调用语法,可以加强VB内建数学运算与图形展示功能,在VB程序代码中可以像使用VB自己的函数一样使用MatrixVB的函数,而且可以不依赖于MATLAB的环境在Visual Basic中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。

MatrixVB函数库的功能大致可分为8大类(矩阵运算、运算符重载、图形图像处理、最优化运算、多项式、信号处理、随机与统计分析、控制系统)。

除以上3种方式外,我们还可以通过DDE的方式实现VB与MATLAB的数据通信。

3.2 MatrixVB 环境设置3.2.1 在VB应用中引入MatrixVB1.安装MatrixVB(1) 系统要求为:●硬盘空间8.8M以上;●操作系统要求Windows 95及其以上版本,或者Windows NT 4.0及其以上版本。

(2) 在安装盘上找到Matrixvb4510.exe,双击后启动安装程序,并按照安装向导安装。

(3) 然后在“开始→运行”菜单中用命令regsvr32 mMatrix.dll注册,如图7-1所示。

图7-1 注册MatrixVb2.建立EXE项目(1) 启动VB开发环境并建立“标准EXE”项目,如图7-2所示。

图7-2 选择标准EXE工程模板(2) 单击“打开”按钮,所建立的项目及开发界面如图7-3所示。

图7-3 VB项目及开发界面3. 为项目引入MatrixVB在project下拉菜单中单击References,在弹出的对话框中选中MMatrix项目,系统将加载MatrixVB的动态链接库MMatrix.DLL,如图7-4所示。

图7-4 引入MatrixVB的动态链接库3.2.2 在VB中使用MatrixVB的命令与函数1.采用立即窗口的形式在项目中引入MatrixVB库后,在VB中可以直接在开发环境的“立即窗口”中输入MA TLAB命令,让VB编译器立即执行,如在MATLAB主窗口中一样。

在View下拉菜单的中选择Immediate Windows选项在开发环境中得到“立即窗口”,如图7-5所示。

图7-5 VB中的立即窗口例如,在“立即窗口”中输入如下命令:A=eye(4,4)A.show命令将产生一个4行4列的单位矩阵,并在MatrixVB的观察窗口Matrix Viewer中显示结果,如图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列单位矩阵并显示,代码如下:Private Sub Command1_Click()A = eye(4, 4)A.ShowEnd Sub单击命令按钮运行程序,运行结果如图7-9所示。

图7-9 VB代码中用MatrixVB产生矩阵同样,在代码中也可以嵌入MatrixVB绘制图形的函数与命令,将该例按钮的Click事件处理过程中的代码进行如下修改。

Private Sub Command1_Click()mesh(peaks(30))End Sub运行结果如图7-10所示。

图7-10 通过嵌入MatrixVB命令绘图在发布基于MatrixVB的VB应用程序时,应将相应的库文件随系统一起发布。

这些文件包括:v4510v.dll、c4510v.dll、ago4510.dll、msvcrt.dll、msvcirt.dll和MMatrix.dll。

由于MMatrix.dll是COM 服务器,所以必须在操作系统中注册后方可使用,注册时可使用如下命令行语句:regsvr32 mMatrix.dll如果目标操作系统是Windows 95,还必须发布另外两个OpenGL文件即opengl32.dll与glu32.dll,但在其他操作系统如Windows 98/Me/NT 4/2000等环境下,则不需要安装这些文件。

2.3 MatrixVB 的矩阵操作矩阵是表示一组数据关系的组合,在MatrixVB中包含了许多矩阵分析函数,为了在VB中直接应用MatrixVB这些高效的计算方法,一般将VB中的数组当成矩阵进行处理,需要说明的是与matricVB矩阵元素相关的运算在VB中对应的数据类型一般为double类型。

2.3.1 在VB中生成MatrixVB矩阵可以像在MATLAB命令窗口中那样,直接在VB中定义MA TLAB矩阵变量;也可以使用VB 的VARIANT通用型变量表示矩阵,其定义的方法如下:Dim x As Variant一般在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事件的处理过程代码为:Private Sub Command1_Click()Dim A(1to 3,1to 3) As doubleDim i,j As integerfor i=1 To 3for j=1 To 3A(i,j)=CDbl(i+j)NextNextB=mabs(A)A. showEnd Sub该段代码首先定义了一个二维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矩阵。

Dim mat As MatrixDim x As VariantSet mat=zeros(3,4) '赋值为3×4的0矩阵Set x=zeros(3,4) '赋值为3×4的0矩阵3.通过函数 CreateMatrix通过函数CreateMatrix创建的矩阵可以在创建过程中直接赋值,格式为:CreateMatrix(p1 , p2 ,…, p n ,)p1 , p2 ,…, p n为矩阵的值。

函数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类型,如:Dim S As DoubleA=CreateMatrix(1.0)S=A.simple若X为一个字符的单元素矩阵,则X.simple返回一个VB中的字符串类型;若X为由多个元素的一维或者多维矩阵,则该表达式将返回一个矩阵,但不能自动转换为VB中相应的一维或者多维数组。

相关文档
最新文档