vb调用matlab的四种方法
关于vb,vc调用matlab的m.文件生成的dll.文件
Matlab函数转换为VB可用的DLLMatlab函数转换为VB可用的DLL段晓君摘要:一种利用Matcom将Matlab函数转换为VB中可用的动态链接库的方法,操作简单易行。
关键词:Matlab函数动态链接库DLL M-文件VB语言1 Matlab简介Matlab是MathWorks公司开发的一种工程计算语言。
它是一个交互系统,在Matlab 中的基本数据元素是一个不要求维数的复矩阵。
用Matlab可解决很多工程计算问题,特别是涉及到矩阵和矢量形式的问题。
Matlab是一个高度集成的语言环境,在它的界面下可以编写程序、运行程序并可进行跟踪调试。
对于广大的工程技术人员和科学研究人员来说,Matlab不失为一种很好的工具。
Matlab也有局限性,一般它不能脱离Matlab集成环境工作;而且编写界面的功能比较弱。
Matcom是一个从Matlab到C++的编译器,它可以节省用户的运算时间和内存要求。
MathTools公司利用Matcom技术编写了Mideva工具软件,它可以借用C++编译器将Matlab下的M-文件转换为可被Visual Basic、Excel以及Delphi调用的DLL 动态链接库或者是独立的可执行文件。
本文就M-文件到DLL的转换以及在VB中调用这一类DLL 的2个问题做了一些探讨。
文中针对Matlab5.0、VC5.0、VB5.0、Matcom4.0或相应的更高版本的软件进行了讨论。
2 M-文件到DLL的转换要将一个m-文件编译成DLL,需进行如下操作:启动运行Matcom4的Mideva,点击菜单File/Compile to dll,选择要转换的m-文件(该文件应该是能够作为函数被其它集成环境调用的m-文件,假设文件名为yourfile.m)。
值得注意的是,Mideva对M-文件有一定的要求,即该文件必须是1个函数,如果要编译没有输入也没有输出的脚本文件,可以先在Matlab中将它编辑成无输入无输出的函数,再按照上述操作进行转换。
VB实现对MATLAB程序的调用
VB 实现对MATLAB 程序的调用The Method to Use MATLAB in VB Software周竹生 陈灵君 张赛民(中南大学 长沙 410083)【摘 要】 充分利用M ATLAB 强大的运算及显示功能和VB 开发界面友好的特点,将二者有机结合,可以开发出复杂的、界面友好的人机交互处理软件。
重点介绍了应用VB 和M AT LAB 进行混合编程的几种技术,熟练掌握这些技术,将使编程工作变得轻松自如。
【关键词】 VB,MAT LAB,混合编程,ActiveX 技术,DLLABSTRACT T aking full adv ant age o f features of st ro ng capability in co mputing and displaying of M AT L AB ,and featur es o f fr iendly int er face of V B,and or ganizing the tw o to ols pr oper ly ,any co mplicated pro cessing so ftw ar e w ith friendly inter activ e inter -face may be ex ploit ed,this paper discusses thr ee hybrid pr og ramming metho ds o f using M AT L AB in VB so ftwa re.Having these techniques at o ne's fing er ends ,the pr o gr amming wo rk w ill be easy .KEYWORDS V B,M A T L A B,hy br id pr og ramming,A ctiv eX technique,DL L1 问题的提出M icrosoft Visual Basic 是由微软公司开发的在Window s 操作平台上的主力编程语言之一,由于它避开了C ++编程过分繁琐和抽象的缺点,同时又能实现大多数W indo w s 编程目的,因而一经推出就风靡全球,目前全世界大约有几百万程序员在使用VB 编程,是一种十分强大和有生命力的Window s 编程语言。
VB调用MATLAB步骤
a = Val(Text1.Text)
b = Val(Text2.Text)
Call hh.myadd(1, c, a, b) 'myadd为MATLAB中的函数名,1为输出变量个数,c为输出变量定义为variant型,a,b为输入变量,定义为double型
Y=a+b;
VB程序如下:
Private Sub Command1_Click()
Dim hh As New ABC.ab 'ABC 为COMPONENT NAME,ab为class name
Dim a As Double ‘输入参数
Dim b As Double ‘输入参数
3.matlab会列出所有电脑上所有的编译器,选择Microsoft Visual C/C++ version 6.0
4.The default location for Microsoft Visual C/C++ compilers is C:\Program Files\Microsoft Visual Studio, but that directory does not exist on this machine
Use C:\Program Files\Microsoft Visual Studio anyway [y]/n? 选择n
5.Please enter the location of your compiler: [C:\Program Files\Microsoft Visual Studio] 键入vc++6的安装位置E:\INSTALLBACK\Microsoft Visual Studio vc6.0
五种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与MA TLAB混合编程探讨文章作者:朱志松郭晓丽朱小松文章类型:设计应用文章出处:电子技术应用--------------------------------------------------------------------------------摘要:介绍了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语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。
vb与matlab接口
VB和Matlab/Simulink的接口方法:AttributeVB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = FalseDim result As StringDim Matlab As ObjectSet Matlab = CreateObject("Matlab.Application")Private Sub Command1_Click()Matlab.execute (save "Text1")End SubPrivate Sub Command2_Click()Text2.Text = Matlab.execute("Test1")result = Matlab.execute("print-dbitmap")Imagel.Picture = Clipboard.GetDataEnd Sub基于COM组件的VB与MA TLAB接口编程摘要:针对VB和MA TLAB接口编程问题,本文提出一种基于COM组件的VB与MA TLAB接口编程方法。
并以具体的例子给出了这种方法的应用过程,实现了VB可视化界面和MATLAB信号分析及图形显示。
关键词:COM组件,VB,MA TLAB,接口编程1引言MA TLAB是Mathworks公司开发的科学计算环境,具有强大的计算绘图能力,并提供了大量的函数库,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。
但它的缺点是界面开发能力差,代码运行效率低。
V isual Basic是Microsoft公司推出的一款面向对象的应用程序开发工具。
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)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
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)。
但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。
在VB6.0中调用和操作MATLAB
收 稿 日期 : 初稿 :0 1 1 7 修 订稿 :0 2— 3 8 2 0 —1 —2 ; 2 0 0 —0 作 者简 介 : 郑君 杰( 9 7 ) 男 , 宁大 连人 . 17一 . 辽 信号 与信 息 处理 专 业 硕 士研究 生, 研究 方向 为图像处 理. 模式识 别.
OX文 件 .在 程 序 中 加 入 Acie 部 件 后 将 成 为 开 C t X v 它
郑君杰, 黄
峰( 解放 军理 工 大 学 气 象学 院 研 究 生 1 8队, 江苏 南京 2 10 ) 1 · e HUANG F n ( ieainAr ies yo ce c n n ie r g N n n S 2 1 0 , hn ) i e g L b rt my Unv r t f i ea d E gn ei , a j gJ 1 1 1 C ia o i S n n i
使 用 的 编 程 接 口, 对 广 大 的 VB 程 序 员 来 说 是 一 个 这 很 大 的 不 便 . 本 文 介 绍 了 通 过 A t e 技 术 在 VB . ci X v 60 中调 用 和 操 作 Mal t b的 方 法 , 现 了 Malb和 v 的 a 实 t a B
中图分 类号 : 3 9 TP 1
文 献标识 码 : A
1 引 言 Vi a B s ( 称 VB 是 微 软 公 司 推 出 的 可 视 化 s l ai 简 u c )
混 合 编 程 , 分 发 挥 了 两 者 各 自的 优 势 . 充 2 基本 原理 2 1 A t e 的 基 本 概 念 . ci X v 由 于无 法 在 v 中直 接 调 用 Mal , 者 利 用 A . B tb 笔 a c t e 技 术 解 决 了 这 个 问 题 . 所 谓 的 Acie 是 一 种 开 iX v t X v 放 式 的 标 准 . 允 许 直 用 程 序 或 部 件 控 制 另 一 个 应 用 它 程 序 或 部 件 的 运 行 . A t e 部 件 是 M i oot 司 提 ci X v c sf 公 r
VB6.0调用matlab生成的dll文件
环境:win7 64位,matlab2010b,Vb6.0一、设置环境变量右键计算机——属性——高级系统设置——环境变量,在用户变量和系统变量中均添加如下路径:路径名为path 值为”C:\Program Files\MATLAB\R2010b\bin\win64”(matlab安装路径),重启计算机。
二、编写m文件,注意以function开头三、在matlab中设置编译环境1.在matlab命令窗口中输入mex –setup,选择n,然后在弹出的众多编译器中选择一个,最好选择VC++系列(在进行这一步时,现在电脑上安装VC的编译器,如VC++6.0、Visual Studio,注意要安装英文版),接下来一直选择y,直至看见Done……,证明这一步成功了;2.接下来输入么build –setup,接下来步骤与1相似,直至看见Done……。
四、进行编译,生成dll文件1.在matlab窗口中输入deploytool,在弹出的窗口中,name随便填,location选择默认即可,Target选择倒数第二项:Generic COM Component,单击OK;2.选择Add class,填写class name,单击Add files,选择所需编译的m文件,然后单击build按钮,等待编译结束,这是会看到生成的文件夹中含distrib这个文件夹,所需的dll文件即在里面。
五、注册dll开一个dos窗口(在开始里输入运行即可),在dos窗口中输入:cd/d <matlabroot>/runtime/win64,回车,接着输入mwregsvr mwcomutil.dll,即对mwcomutil.dll 进行注册(这个dll是matlab下作的任何com组件都要用到的dll)。
六、在vb6.0中调用生成的dll文件1.打开vb6.0,点击工程——引用——浏览,找到放置dll文件处,选择,点击确定;2.vb6.0命令行处应写:Dim myplot As plot.plot1Set myplot = New plot.plot1……Call myplot.plot1(str, strname, xx5, yy2, y)(说明:其中myplot为自己取的名字,plot为matlab编译dll文件时的class name,plot1为源文件m文件的名字)。
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,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混合编程的研究
第25卷第1期2007年1月北京工商大学学报(自然科学版)Journal of Beij ing Technology and Busines s University (Natural S cience Edition )V ol .25N o .1Jan .2007 文章编号:1671-1513(2007)01-0038-04VB 与Matlab 混合编程的研究梁新成, 黄志刚, 朱 慧(北京工商大学机械自动化学院,北京 100037)摘 要:较系统地总结了VB 与M atlab 调用的原理和方法,给出了一些实例,通过这些方法,可使VB 的可视化界面和M atlab 强大的计算及绘图功能得以实现,从而提高编程的效率,缩短软件开发的周期.关键词:Matlab ;VB ;ActiveX ;DDE ;无缝链接中图分类号:TP .31 文献标识码:A 收稿日期:20061101作者简介:梁新成(1978—),男,陕西华县人,硕士研究生,研究方向为机械制造及自动化;黄志刚(1966—),男,上海人,副教授,博士,主要从事车辆工程、农产品加工及贮藏工程的研究. Visual Basic (以下简称VB )语言是Microsoft 公司开发的新一代面向对象的编程工具.它既是一种编程语言,同时也是一个强大的集成开发环境,利用它可以编写出具有各种风格且界面友好的软件产品.它继承了Basic 简单、易用的特点,并具有可视化、面向对象、部件技术、事件驱动等一系列特性,成为Windows 环境下最快捷、便利和通用的开发工具.作为可视化编程的先驱和典范,其所展现的可视化风格,已经成为诸多可视化集成开发工具的参考标准.Matlab 是M athWorks 公司在20世纪80年代开发的科学计算软件,经过不断地完善和发展,目前Matlab 已经成为涉及多学科、多领域的计算和分析平台.Matlab 编程代码很接近数学推导格式,简洁直观,符合人们的思维习惯,所以编程非常方便.由于VB 提供的计算和绘图函数有限,M atlab 创建图形用户界面的能力相对较弱,因此用VB 编写界面,用Matlab 作为后台运行程序,使两者相得益彰.1 VB 和Matlab 混合编程的方法和算例 由于Matlab 本身只提供了Fortran 、C 语言的接口程序,所以无法直接实现VB 对Matlab 的调用.故Matlab 与VB 混合编程中需要解决的关键是如何实现在VB 中调用Matlab .Matlab 与VB 混合编程的方法主要有下面4种.1.1 ActiveX 技术ActiveX 技术是以组件对象模型(component object model ,COM )技术为基础的一种应用程序开发技术和体系结构的总称,它是Microsoft 公司提供的一种用于模块集成的新协议,它允许应用程序或组件控制另一个应用程序或组件的运行.M atlab5.0以上的版本均支持ActiveX 的嵌入.因为VB 支持ActiveX 自动化控制端协议,Matlab 支持ActiveX 自动化服务器端协议[1],所以VB 和Matlab 的通信有两种:一种是自动化服务器,另一种是自动化控制器.本文重点探讨VB 如何通过ActiveX 接口将M atlab 作为VB 的一个ActiveX 部件,实现数值计算和图形显示.要实现这种功能,用户首先必须获得M atlab ActiveX 对象在系统注册表中定义的名字─M atlab .Application .在所编写的程序中必须有如下的代码:Dim Matlab as ObjectSet .Set Matlab =CreateObject (“Matlab .Applica -tion ”),M atlab .Application 对象主要有3个函数,具体如下:1)Function Execute (Command as String )as String .VB 可执行一条由Command 字符串决定的M atlab 指令或在M atlab 的工作空间调用M 函数文件,在屏幕上显示图形或计算结果.2)Sub GetFullM atrix (Matr -Name as String ,Workspace as String ,Var -Real ()as Double ,Var -38Imag ()as Double ).通过GetFullMatrix 方法,VB 从指定的M atlab 工作空间中获取指定变量名的矩阵数据.3)Sub PutFullM atrix (Matr -Name as String ,Workspace as String ,Var -Real ()as Double ,Var -Imag ()as Double ).VB 可以将指定变量名的矩阵数据保存到M at -lab 的工作空间中去.下面的简单例子通过ActiveX 技术实现VB 对M atalb 的调用.在VB 下创建工程,给窗体加上两个控件.一个控件是text1,将其属性中的tex t 项设置为空;另一个控件是comm and1,将其属性的cap -tion 项设置为result .程序的代码如下:Private Sub Command1-Click () Dim result as String Dim Matlab as Object Set M atlab =CreateObject (“Matlab .Appli -cation ”) Result =Matlab .execute (tex t1.Tex t )End 运行后,在text1中输入如下代码: [x ,y ]=meshg rid (-3:.125:3); z =peaks (x ,y ); meshc (x ,y ,z ); g rid on ;程序的运行结果见图1.图1 A ctiv eX 方式运行结果1.2 DDE 动态数据交换M atlab 从V4.x 开始支持DDE (dy namic data exchange ),最典型的是LabVIEW 对DDE 的使用.但从V5.x 以后,Matlab 对DDE 的支持就没有再更新.DDE 的功能没有ActiveX 强大,但它比ActiveX 易于实现.它随着Windows 的应用而发展起来,是在Window s 环境下支持客户服务器计算模式的重要技术之一.因为VB 支持DDE 客户端功能,M at -lab 提供DDE 服务器功能,所以通过DDE 方式可以实现VB 程序对Matlab 的调用.DDE 功能函数可以由应用程序提供,也可以由M atlab 引擎库提供.VB 应用程序首先通过确定服务器名和主题,唯一地确定会话.在会话期间VB 应用程序为客户端,M atlab 为服务器端.两者会话的示意如图2.图2 DDE 通信机理示意DDE 方式基于Windows 的消息机制.DDE 服务器是一个维护其它Window s 程序可能使用数据的程序,DDE 客户则是从服务器获得数据的程序.DDE 对话由客户程序发起,客户程序将一条称为WM —DDE —INIT IATE 的消息发给当前运行的所有Window s 程序,这条消息指出客户程序所需要的数据类别,拥有这些数据的DDE 服务器可以响应消息并开始会话[2].DDE 只是一种通信方式,它不会启动M atlab 软件,所以DDE 方式运行时M atlab 必须打开,否则程序无法运行.下例将实现DDE 通信方式.在VB 下建立工程,然后添加两个Tex tBox 控件,3个Label 控件,一个Com mand 控件,一个Im age 控件.输入如下的代码,然后编译成.EXE 文件后即可.此编译文件提供了M atlab 的运行环境,在指令输入区可输入任何M atlab 指令[3].程序代码如下:Private Sub Command1-Click ()TextInput .LinkMode =vbLinkNoneTextInput .LinkTopic =“MATLAB Engine ”TextInput .LinkItem =“EngEvalString ”TextInput .LinkMode =vbLinkM anual string =TextInput .Tex t TextInput .LinkExecute string TextInput .LinkMode =vbLinkNoneFig Tex t .LinkM ode =vbLinkNoneFig Tex t .LinkTopic =“MATLAB Engine ”Fig Tex t .LinkItem =“EngFig ure Result ”Fig Tex t .LinkM ode =vbLinkManual Fig Tex t .LinkRequest If (Fig Tex t .Tex t =“yes ”)Then Image1.Picture =Clipboard .GetData ()Else Image1.Picture =LoadPicture39第25卷第1期 梁新成等:V B 与M atlab 混合编程的研究End IfTex tOutput .LinkMode =vbLinkNone Tex tOutput .LinkTopic =“MATLAB Engine ”Tex tOutput .LinkItem =“EngString Result ”Tex tOutput .LinkMode =vbLinkManual Tex tOutput .LinkRequest Tex tOutput .LinkMode =vbLinkNone End Sub程序运行结果见图3.图3 DDE 方式运行结果1.3 MatrixVB 插件M atrixVB 可实现M atlab 与VB 的无缝链接.所谓无缝链接就是应用程序实现其功能时完全脱离M atlab 的工作环境.它主要是利用Matlab Add -in 把M atlab 函数做成动态链接库形式,然后由VB 调用来实现.动态链接库的生成、调用和调试是这种方法的关键.M atrixVB 是M athWorks 公司为VB 开发的插件,它包含了600多条M atlab 的基本函数,插件增强了VB 绘图和计算的函数集合.它包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,用来补充VB 本身内建函数和图形处理的不足.为了防止计算机在识别M a -trixVB 和VB 的运算符时发生冲突,M atrixVB 在定义运算符时做了一些变化.VB 与M atrixVB 中的运算符号区别如表1[4]: 表1 VB 与MatrixVB 的运算符号Visual BasicM atrixVB Visual Bas icM atrixVB a +b plus (a ,b )a b ldivide (a ,b )a -b minus (a ,b )a b pow er (a ,b )a ×b mtimes (a ,b )b -a uminus (a ,b )a /brdivide (a ,b )a M od bmmod (a ,b )安装MatrixVB 后,打开VB ,点击工程※引用,然后选中M Matrix 后就可以在VB 中使用此插件.下面的程序通过M atrixVB 实现VB 对Matlab 的调用.程序的运行代码如下:Private sub Form -Load () ax =vbaxes (picture1.hWnd ) plot (randn (256,4))End程序运行结果如图4.图4 M atrixVB 方式运行结果1.4 动态链接库从M atlab6.5开始[5],M atlab 提供了COM 编译器.它是Matlab 编译器的扩展,能够把一个和多个M 文件转换、编译成COM 组件.因为M atlab 编译产生的COM 对象都是DLL 文件,而VB 可以直接调用DLL ,所以应用DLL 可实现VB 对Matlab 的调用.具体步骤:在计算机装有VC ++或C 的前提下,在Matlab 的命令窗口运行com tool 指令.选择新建工程※给工程加入M 文件或MEX 文件※编译;之后再在VB 下新建工程※添加所生成的动态库※添加控件※给相关控件输入代码※运行即可.M 文件必须以function 关键字开头,不能是脚本文件,更详细的内容请参阅文献[6].2 几种方法的比较利用ActiveX 进行VB 和M atlab 的交互通信时,所采用的Matlab 语句是直接使用Matlab 提供的函数和图形库命令.该方法编程效率高,但程序的执行必须在Matlab 环境下,这样会占用内存,使程序的执行速度受一定影响.DDE 方式运行时,必须打开M atlab 的命令窗口.程序编码简单,但占用系统资源多,效率低下,功能相对较弱.与ActiveX 的区别是,DDE 必须预先打开Matlab ,而ActiveX 可自动打开Matlab 软件.MatrixVB 把与Matlab 相似的语法和函数嵌入到VB 中,这种方法比较简单,编程的效率高.但由于仍采用解释执行的方式,因此执行的效率低,难以40北京工商大学学报(自然科学版) 2007年1月进行实时处理.与Matlab 相比,MatriVB 包含的函数少,没有M atlab 的功能强大.把Matlab 文件编译成VB 可以执行的dll 文件,执行的效率高,但当M 文件一旦编译成功之后,其功能就不能变化,所编程序的数据交换能力弱.总之,以上各种方法皆有利弊,应根据实际情况进行选择,才能更好地发挥两者功能.3 结束语通过对Matlab 和VB 的混合编程,可以将VB开发的界面与Matlab 强大的计算和显示功能融为一个整体,使开发的程序周期缩短,编程效率得以提高.参考文献:[1] 谭炎,张凌燕.M a tlab 与V B 混合编程研究[J ].微计算机信息(管控一体化),2006,22(53):248249.[2] 高剑.M atlab 与V B 混合编程方法[J ].微机发展,2003,13(3):9192.[3] 张志涌.精通M A T LAB6.5[M ].北京:北京航空航天出版社,2003.[4] T he Ma thWor ks I nc .M atrix VB Guide [Z ].The M a th -Wo rks Inc ,2000.[5] 董维国.深入浅出MA T LAB7.x 混合编程[M ].北京:机械工业出版社,2006.[6] 李俐玲.V B 与M atlab 相结合混合编程的研究[J ].绵阳师范学院学报,2004,23(5):2628.RESEARCH OF MIXING PROGRAM OF VB AND MATLABLIANG Xin -cheng , HUANG Zhi -gang , ZH U Hui(College of Mechanical Engine ering and Automation ,Beijing Technologyand Business University ,Beijing 100037,China )A bstract :This paper described generally methods and principle of VB how to transfer M atlab .Through the gaved examples ,w e can turn the visual interface and the powerful function of M atlab 's calculating and ploting into reality .That w ould enhance the efficiency of programming ,and sho rten the period of empoldering softw are .Key words :Matlab ;VB ;ActiveX ;DDE ;Link with no slot(责任编辑:檀彩莲)(上接第31页)DESIGN OF SMALL NETWORK OF INTELLIGENTNODE ON CANBUSXING Liang , ZHANG Li , M ENG Chun -ling(College of Mechanical Engine ering and Automation ,Beijing Technologyand Business University ,Beijing 100037,China )A bstract :CANbus is one kind of Local Bus Technology and mainly used in Data Link Layer and Phy s -ical Layer ,but the protocol of application layer must be added to realize the material function .De -viceNET and CANopen are most w idely in pro tocols of application layer ,but these protocols are verycomplicated and mo re fit for large node net .The technical specification and trait of CAN bus is sim ply introduced in this paper ,and it makes a kind of desig n fo r protocol of application layer in sm all CAN -bus net .Key words :CANbus ;protocol of application layer ;node(责任编辑:檀彩莲)41第25卷第1期 梁新成等:V B 与M atlab 混合编程的研究。
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。
VB程序中实现调用MATLAB的方法
收稿日期:2000207227 作者简介:王跃强(1978-),男,硕士研究生,主要研究方向:光电检测及其自动化.文章编号:1001-9081(2001)02-0095-02VB 程序中实现调用M AT LAB 的方法王跃强,王纪龙,王云才(太原理工大学应用物理系,山西太原030024)摘 要:本文介绍了在VB 应用程序中利用动态数据交换和ActiveX 自动化(O LE 自动化)协议实现的两种调用MAT LAB 函数的方法。
通过这两种方法实现了VB 的可视化界面与MAT LAB 强大的数值分析和图形显示的能力的结合。
关键词:MAT LAB ;VB ;DDE ;客户/服务器中图分类号:TP312VB 文献标识码:B 通过对M AT LAB 的应用程序接口的分析,可以发现M AT LAB 提供了客户/服务器(Client/Server )功能。
利用其中的动态数据交换(DDE )服务功能和ActiveX 自动化(O LE 自动化)服务功能,可以实现在VB 中对M AT LAB 函数的调用,并通过mxArrays (M AT LAB 中的基本数据类型)与M AT LAB 工作空间交换数据,从而增强VB 的数值计算能力和数据的可视化能力。
下面介绍在VB 程序中调用M AT LAB 的方法。
1 MAT LAB 的动态数据交换服务功能动态数据交换(DDE )是在Windows 环境下支持客户/服务器计算模式的重要技术,两个Windows 应用程序之间可以通过交换数据来相互连接,由于VB 支持DDE 客户端功能,M AT LAB 提供了DDE 服务功能,因此利用VB 和M AT LAB 的动态数据交换能力,可以实现在VB 应用程序中调用M AT LAB 。
VB 应用程序首先通过确定服务器名和主题(topic )建立与M AT LAB 的DDE 会话,服务器名和主题唯一地确定了这次会话,在会话期间VB 应用程序作为客户端,M AT LAB 作为服务端,客户端与服务端可以就确定的项目(item )交换数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、借助ActiveX部件Microsoft把所有以COM为基础的技术统称为ActiveX技术。
自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。
Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。
Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述:● BSTR Execute([in] BSTR Command);BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。
该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。
● void GetFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in, out] SAFEARRAY(double)* pr,[in, out] SAFEARRAY(double)* pi);该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。
● void PutFullMatrix([in] BSTR Name,[in] BSTR Workspace,[in] SAFEARRAY(double) pr,[in] SAFEARRAY(double) pi);该方法将一个mxArray放入指定的工作空间。
各参数的含义及调用方法与GetFullMatrix方法类似。
示例代码如下:1Dim Matlab As Object ’声明对象2Dim MReal1(5,5) As Double ’声明存放实部的Double型数组3Dim MImag() As Double ’声明存放虚部的Double型数组4Set Matlab=CreateObject(“Matlab.Application”) '初始化对象5Matlab.Execute(“a=hilb(5)”) '执行Matlab命令6Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag) '将结果分别存入实部、虚部数组复制代码二、借助DDE技术DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。
应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。
图1描述了Matlab 作为服务器时与其他应用程序的通信机制。
其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供。
初始化会话时,客户端应用程序必须指定两个参数service name(服务器应用程序的名称)和topic(会话主题)。
下面的示例说明了VB与Matlab建立并完成DDE会话的全过程:78说明: T extInput是输入文本框,T extOutput是输出文本框。
在T extInput中输入Matlab命令回车后,由Matlab在后台执行并将结果返回给TextOutput显示。
9Sub T extInput_KeyPress(KeyAscii As Integer)10If KeyAscii = vbKeyReturn then’初始化TextInput与Matlab间的DDE会话11TextInput.LinkMode = vbLinkNone12TextInput.LinkTopic = “MATLAB|Engine”13TextInput.LinkItem =“EngEvalString”14TextInput.LinkMode = vbLinkManual15szCommand = TextInput.Text’执行Matlab命令16TextInput.LinkExecute szCommand17TextInput.LinkMode = vbLinkNone’初始化T extOutput与Matlab间的DDE会话18TextOutput.LinkMode = vbLinkNone19TextOutput.LinkTopic = “MATLAB|Engine”20TextOutput.LinkItem =“EngStringResult”21TextOutput.LinkMode = vbLinkManual’返回执行结果并显示22TextOutput.LinkRequest23TextOutput.LinkMode = vbLinkNone24End If25End Sub复制代码三、通过M文件Matlab产生的M文件不能直接在VB中调用,可利用mcc将M文件直接编译成.EXE文件,然后在VB中声明下面三个API函数,最后使用Shell命令即可实现VB与Matlab的无缝集成。
1. 用mcc生成独立的外部应用程序。
可使用如下两种命令mcc -p file.m 或mcc -m file.m2. 在VB中声明调用的三个API函数:● Declare Function WaitForSingleObject Lib “kernel32”(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long● Declare Function CloseHandle Lib “kernel32”(ByVal hObject As Long) As Long● Declare Function OpenProcess Lib “kernel32”(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,ByVal dwProcessId As Long) As Long3. 示例代码2627Dim lT ask As Long, lret As Long, lHandle As Long’执行file.exe文件28lT ask = Shell(“file.exe”, vbNormalFocus)29lHandle = OpenProcess(SYNCHRONIZE, False, lT ask)’等待进程执行完毕30lret = WaitForSingleObject(lHandle, INFINITE)31lret = CloseHandle(lHandle)’ file.exe文件执行完毕后,继续执行应用程序32……复制代码通过以上编码,应用程序可以在执行过程中调用.EXE完成特定的计算或图形功能后,再继续其执行过程,从而实现与Matlab的集成。
四、引入MatrixVBMatrixVB是MathWorks针对VB提供的一个Matlab库,它提供了600多个函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,为VB提供了强大的功能扩展。
在VB中使用该数学工具包可避免重复性劳动,从而减少开发人员实现算法和界面设计的困难。
MatrixVB是一个独立的产品(可以从得到),其使用十分方便。
MatrixVB 安装完成后,只需在VB工程中引用Mmatrix即可。
工业生产中经常需要对采集到的原始信号进行分析,并对分析结果进行实时的图形化显示,下面通过在VB中引用Mmatrix来实现这一功能。
示例代码如下:3334Dim ax as Variant ’声明坐标轴35Private Sub Form_Resize()36vbrefresh ax ’刷新坐标轴37End Sub38Private Sub Form_Load()39ax = vbaxes(Form1.hWnd) ’将坐标轴置于窗体40Call Form_Resize41End Sub42Private Sub Command1-Click()43Dim I,C As Matrix ’声明向量44Dim m As Integer45’从数据库中取原始信号存入一维向量I,取其对应的碳含量存入一维向量C 46’m为向量I、C的元素个数47Call Icheck ( I , C , m ) ’调用校正函数48End Sub49Private Sub Icheck (I As Variant, C As Variant, ByVal m As Integer)50Dim II,CC,Z As Matrix51Dim a0,a1,a2 As Double52II = zeros(m,1)53CC = zeros(m,1)54II(colon(1,m)) = I(colon(1,m))55CC(colon(1,m)) =C(colon(1,m))’多项式拟和求解56Z = polyfit ( II, CC, 2 ) ’2 说明用二项式拟和57a0= Z.r1(1) ’a0为二次项系数58a1= Z.r1(2) ’a1为一次项系数59a2= Z.r1(3) ’a2为0次项系数60Clear axes ’清除坐标轴61T = Sort ( II ) ’对原始信号排序,以确定作图区间62J = Linspace (T(1).r1(1),T(1).r(m),20) ’横坐标向量63Cuv = plus (plus (times (a0,times (X,X) ),64times (a1,X) ),a2) ’纵坐标向量65Tmp = plot (J,Cuv) ’绘制曲线66Hold (“on”)67Tmp = plot (II, CC,“r.”) ’绘制点68Hold (“off”)69End Sub复制代码执行以上代码,结果如图2所示:总结以上几种方法对于Matlab与VB的集成都是行之有效的,但在实际应用中究竟采用哪一种方式应视具体情况而定。
前两种方式比较适合Client/Server模式,后两种方式则应视应用系统的具体要求来做选择,相比较而言,借助M文件在执行效率上略高一筹,而引入MatrixVB 在使用上更为方便。
总而言之,Matlab与VB集成可大大提高开发效率,对于解决工程问题是十分有意义的。