MATLAB与VB混合编程方式简易教程
五种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 程序的一个一维数组或二维数组中。
【推荐下载】关于matlab与vb混合编程技术研究
关于matlab 与vb 混合编程技术研究关于matlab 与vb 混合编程技术研究1 引言在工业生产和科研工作中, 经常会遇到复杂数据信息的处理问题, 往往需要大运算量的矩阵计算以及对分析结果进行实时、直观的图形化显示。
VB 是Windows 操作系统下优秀的可视化编程语言, 在用户界面设计和快速开发等方面具有独特的优势。
从 5.0 版本开始, 可以编译链接生成本机代码的可执行文件, 能够脱离VB 的集成开发环境进行发布, 较好地封装了用户的算法, 有效地保护用户的源代码, 目前世界上有数以百万计的程序员把它当作首选的编程工具。
然而, VB 只提供了基本的数学函数库, 对于开发计算功能齐全的大型系统来说, 远远不够。
这种情况下, 如果使用基本函数库编写特殊功能的数学函数库, 不仅要求用户对算法有深入的理解, 而且费时, 还可能因为在设计时和运行时的错误处理机制的欠缺,难以保证每个函数功能的正确性。
MATLAB 是Math Work 公司于1984 年推出的数学工具软件, 其科学计算功能的强大和开放式的开发思想使其成为当今最为流行的、最为优秀的科技应用软件之一, 在数值分析、科学计算、算法开发、建模和仿真等方面具有独特的优势。
最新的 6.1 版本的工具箱(Toolbox)支持对通信系统、信号处理、图像处理、小波分析、鲁棒控制、系统辨别、非线性控制、模糊控制、神经网络、优化理论、样条、商用统计分析等30多个不同领域的内容的处理和分析。
但其用户界面的设计不如VB 方便, 解释执行的运行环境使其开发的程序不能离MATLAB 独立地进行发布, 目只有供 C 和Fortran语言使用的编程接口, 这对广大的VB 程序员来说是一个很大的不便。
如果能够在VB 中方便地调用MATLAB 的数学函数库, 增强科学计算的功能, 就可以发挥各自的优势, 缩短开发周期, 保证系统的健壮性, 开发出脱离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软件工具箱的强大功能。
关键词: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实现混合编程环境: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后使⽤;隔开。
Matlab与VB混合编程
3、生成COM组件
(1)设置系统路径
我的电脑属性 高级 环境变量 系统变量 Path选项,增加以下路径:
头文件:C:/MATLAB7/extern/include;
库:C:/MATLAB7/extern/lib/win32/microsoft/msvc60; DLL:C:/MATLAB7/bin/win32
,在算法上采用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);
1 /23
主要内容
一、 ActiveX技术 二、 动态链接库(DLL)
实现步骤(一) Matlab7.1 版
开发环境 编写m文件 生成COM组件 VB中调用动态链接库
应用程序发布
应用程序安装
实现步骤(二) Matlab2013a 版
2 /23
一、 ActiveX技术
ActiveX自动化协议是一种允许一个应用程序 或组件去控制另一个应用程序或组件的协议,VB和 MATLAB都支持ActiveX自动化协议。通过自动化 协议,可以在VB应用程序中执行MATLAB命令, 并从的MATLAB工作空间中获取数据以及向 MATLAB输送数据从而实现数据的交互。要实现这 种功能,用户首先必须获得Matlab ActiveX对象在 系统注册表中定义的名字─Matlab.Application。
基于VB与Matlab的混合编程方法_隗燕琳
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混合编程
*打开生成的安装包中的
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
Matlab2012a和VS2010混合编程的实现
MATLAB2012a和VS2010混合编程的实现(Win7+32bit)lihui-mn@ 1.在MATLAB中编写m文件如下:function y = myfunc(a)y = a.*a;2.MATLAB环境设置操作过程如下:3.创建动态链接库mcc: 将M文件编译成C文件的MATLAB命令;csharedlib: 创建一个C可共享的动态链接库;myfunclib: 要创建的dll文件的名字;myfunc: M文件的名字.如果要加入动态链接库的是多个函数, 那么写成myfunc1 myfunc2 …结果生成文件:4. VS2010环境设置a.创建一个console application, 并新建一个cpp文件(否则之后Property Pages中没有C/C++目录 )b. 设置目录①Property Pages -> VC++ Directories -> Include Directories, 添加(安装目录下)E:\tools\MATLAB\extern\include\②Property Pages -> VC++ Directories -> Library Directories, 添加E:\tools\MATLAB\extern\lib\win32\microsoft③Property Pages -> C/C++ -> General -> Additional Include Directories, 添加E:\tools\MATLAB\extern\include\④Property Pages -> Linker -> General -> Additional Library Directories, 添加E:\tools\MATLAB\extern\lib\win32\microsoft⑤Property Pages -> Linker -> Input -> Additional Dependencies, 添加5. Windows环境设置Computer - > Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加E:\tools\MATLAB\extern\lib\win32\microsoft;E:\tools\MATLAB\bin\win32Computer - > Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加E:\tools\MATLAB\runtime\win32;E:\tools\MATLAB\bin;E:\tools\MATLAB\extern\lib\win32\microsoft;E:\tools\MATLAB\bin\win326. 将MATLAB生成的文件以及MATLAB安装目录bin下的两个文件copy到VS工程目录下7. 在VS窗口下编写程序#include"myfunclib.h"usingnamespace std;void main(){myfunclibInitialize();//初始化DLL动态链接文件double _x[5] = {1, 2, 3, 4, 5};//定义输入数组double _y[5];//定义输出数组mxArray* x = mxCreateDoubleMatrix(1, 5, mxREAL);//创建1*5矩阵memcpy(mxGetPr(x), (void*)_x, sizeof(_x));//copy输入数据mxArray* input[1] = {x};//将矩阵x的指针作为输入参数传递进去mxArray* output[1];//定义输出参数指针mlxMyfunc(1, output, 1, input);//调用M函数mxArray* y;//定义输出结果指针y = output[0];//将输出参数传递给输出结果memcpy(_y, mxGetPr(y), sizeof(_y));//copy输出数据myfunclibTerminate();//结束DLL库for(int i = 0; i< 5; i++){printf("%f\n", _y[i]);}}参考资料:1. /s/blog_59955afc0100qqgt.html2. /f?kz=2023504793. http://www.mathworks.fr/support/solutions/en/data/1-FWTSV5/index.html?product=ML&solution=1-FWTSV54. /s/blog_6ac4211e0100xm7k.html。
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中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。
VS(VC)与Matlab联合编程步骤
联合编程的操作步骤首先,我先说一下我所安装的环境,我的电脑是Win7(X64)的,我安装的Matlab是Matlab R2010b和VS2010,还有Matcom4.5我Matlab的安装目录:C:\Program Files\MATLAB我VS的安装目录:F:\Program Files (x86)\Microsoft Visual Studio 10.0一、Matlab环境配置在Matlab的Command Windows下输入命令:mbuild -setup然后输入命令:mex–setup 方法同上mbuild–setup一样。
在Matlab中编写想要实现的.m文件。
我以最简单的.m文件为例:function [c]=Myadd(a,b)c=a+b;在命令窗口编写:会在当前目录下生成如下图中显示的文件:其中重点会用到的是.cpp、.h、,dll、.lib文件。
在头文件的最后,你可以看到下面的内容:externLIB_myadd_CPP_API void MW_CALL_CONV myadd(intnargout, mwArray& c, constmwArray& a, constmwArray& b);这就是myadd的C函数的声明。
nargout表示输出变量的个数,其他就是对应了m函数的几个变量。
二、Matcom设置准备工作在Matcom中编写函数文件:保存后,点击compile to DLL,生成DLL文件默认在matcom安装目录debug 文件夹下面。
会生成如下图所示的文件:主要用到的还是.dll、.h、.lib等文件。
不过在VS中调用时,需要将matcom安装目录lib文件夹下的matlib.h和v4501.lib拷贝到工程文件夹下。
并且要将翻译生产的文件(.dll、.h、.lib等文件)也复制粘贴到工程目录下。
且在stdafx.h中要包含matlib.h。
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组件实现二者混合编程
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混合编程
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。
Matlab_Access和VB_NET混合编程方法的研究和应用
0引言Matlab 是Mathworks 公司推出的科学计算软件,它具有功能强大、工具丰富、计算高效、易于开发等特点,在科学和工程计算、模拟仿真方面得到了广泛的应用。
基于它的这些优点,我们在等离子体单粒子模拟程序的开发中选择了Matlab 的最新版本Matlab R2007b (Matlab7.5)作为开发工具。
但是,由于我们的模拟程序需要进行大量的计算,并且这些计算的初始条件需要分别设置,而大量的模拟结果也需要进行系统分析和整理,在这些方面,Matlab 显示出了它的不足。
Access 是微软公司推出的办公软件Office 的一个组件,得到了广泛的普及和应用。
Access 数据库是独立数据库,易于使用,通过Access 的数据库引擎可以方便的对数据库里的大量记录进行更新、检索、管理和其它各种应用。
是Visual 的一部分,是一种独特的、功能强大的程序设计语言。
2005是Visual Basic 的最新版本,和Visual Basic 6相比,它主要基于微软的最新架构.NET Framework ,在保留Visual Basic 6传统优点的基础上,它提供了很多可以方便程序开发人员快速开发应用程序的新功能,这些新功能不仅功能强大,还提高了生产效率和易用性。
比如新引入的My 功能就为程序开发人员提供了很多比较容易而且直观的方法来访问大量的.NET Framework 类,从而使Visual Basic 用户能够方便的与计算机、应用程序、设置、资源等进行交互。
本文通过这三者的结合,充分利用Matlab 、Access 和 各自的优点,开发了适合科研工作需要的应用程序。
利用Matlab 进行粒子模拟的计算,利用Access 进行模拟结果的保存、管理和分析,利用 进行程序界面的设计,实现与用户的交互,隐藏程序与Matlab 和Access 的交互,让用户感觉不到二者的存在,从而提高了软件的易用性。
VB与MATLAB混合编程实现控制系统分析
Mi oot c sf r 把所有 以COM ( 小型快 速可重 用组件C mp n n Obet o o e t jc Mo e ) 为 基 础 的 技 术 统 称 为 Acie d1 t X技 术 。 A t e v ci X自 动 化 v ( uo t n)是 A t e A tmai o ci X的一个 协议 .它 允许 应用程 序活组 件控制 v 另一个应用程 序或组件运 行 。由于 V sa B s 支持 A t e 1 iul ai c ci X ̄动化控 v 制协 议 ,MA L B T A 支持 自动 化服 务 器 端协 议 ,因此 如 果建 立 一个
1 Vs a a i与MAT AB iu l sc B L 混合编程
11 V s a B s 与MAT AB 结合 . i l ai u c L 的
G t l tx方法 将MA L B 的一 个矩 阵变 量 传送  ̄ V sa e u Ma i Fl r TA 中 li l J u B s 指 定 的 数 组 中 。 vma e MA L B 的 矩 阵 变 量 名 , ai c a m为 TA 中 wok pc ̄ 定 了 该 矩 阵 所 在 的 MAT AB工 作 区 , xe l Vi a rsae L ra是 s l u B s 程序中的实部数组 ,x g ai c i 是指V saB s 程序中的虚部数组 。 ma i l ac u i
步骤 ,轻松实现控制系统的计算机辅助分析。
1 Acie 自动 化 技 术 . 2 t
【 1 S R wo k p c , i T r s ae nB 【 】 T r g i BS R s i ) n tn
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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中相应的一维或者多维数组。