《有关实现VB与matlab混合编程的方法》由会员分享,可在线阅读,更多相关《有关实现VB与matlab混合编程的方法(9页珍藏版)》请在金锄头文库上搜索。
1、相关图片如下:VB 与 MATLAB 混合编程探讨 文章作者:朱志松 郭晓丽 朱小松 文章类型:设计应用 文章出处:电子技术应用 - 摘要:介绍了与混合编程的方法,二者结合可以充分利用的方便快捷和软件工具箱的强大功能。 关键词: 编译 是公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。但是语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。 作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。因此实现与混合编程,可以为科研工作和工程应用提供有力的技术支持。 基
2、本思路及实现方法 提供了与、的程序接口,并没有提供直接与的接口。目前与混合编程方面主要使用以下一些方法: ()在中通过调用的引擎()接口,使用的或通道与通信。通过 语句 在程序中直接使用提供的函数库和图形库。这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个进程,影响程序运行速度,占用内存。 ()通过使用嵌入的矩阵函数库的方法。是由原公司开发的第三方插件,利用与相似的函数、语法嵌入到中,可以象使用的函数、命令一样使用函数。这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。安装后,只需在打开的工程中添加库即可(
3、在工程引用对话框中选中) 。但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。 ()借助 与的接口,将的程序文件()编译为动态链接库() ,在代码中调用生成的中的函数,实现算法,便于用户脱离环境使用。由于算法部分采用语句,运行速度较快,可应用于实时运算。这种方法对开发者在设置和编程上有一定要求,本文将详细阐述具体实现步骤。其基本思路如图所示。 第一步,编写文件。在中打开,按照程序格式输入代码,实现算法,调试成功。注意:文件必须以开始,避免在中出现转换错误。 第二步,使用新提供的编译插件 在中转换为文件。在转换前做好与的接口连接。步骤如下: 在中运行“ ” ,选择 选项,安装 文件到目录
4、,确认;接着运行“ ” ,选择 作为本地默认编译器;然后在下运行“ ” 和“”命令, 可以脱离环境找到路径。 在中选择“工具 定制()附加项和宏文件 页” ,选中“ ” 。这样,在工具栏出现 图标,在新建工程对话框中会出现“ ” 。至此连接工作完成。 打开,在新建工程中选择“ ” ,按照提示,选择“ ” ,输入文件位置,开始转换。如果文件没有错误,在工程文件夹中会生成一系列文件。其中与文件同名的文件即为转换的代码。 第三步,编译文件(强烈建议不要对刚刚生成的代码作任何修改) 。选择“编译”菜单,构建文件,在文件夹中会生成与工程名相同的文件。 第四步,在中调用文件。在第二步生成的代码中找到所要的
5、接口函数,注意大小写,记下函数名。在中使用语句声明这个函数。在窗体的“通用声明”输入如下语法: 函数名 “文件名” “函数名” 参数表 (具体语法可参看使用手册) 。 在程序代码中直接调用声明的函数即可。需要注意的是函数调用过程中的参数传递问题。由于和的数据类型以及参数传递形式不太一样,传递不当,可能会造成调试困难。特别是中用到的大量矩阵(数组)参数,调用需十分当心。本文在下面例子中采用文件方式传递参数,利用和的文件读写功能传递数组参数,对于实时性要求不高的应用,可以方便稳妥地实现数据传递。 应用举例 在中利用随机数生成个以内的整数,作为一个信号序列,利用的快速傅立叶变换函数() )对序列进行
6、变换,再将变换结果传递回,并显示在窗体上。 在中编辑好文件() ,实现读取序列文件及并写回序列文件,调试成功。代码如下: 以读写文本方式打开 文件 文件以整数格式读入 矩阵 运算 文件指针指向文件头 向文件写入矩阵 按照前述步骤在中转换为文件,找到接口函数,本例为() 。 () (,); (); (,); 编译生成文件。 在中生成随机序列并写入文件: () ( * ) , ( ) () () () 声明()函数: 调用该函数的事件代码: () 调用函数 本例中未向函数传递参数,也无需函数返回运算结果,故采用调用子程序过程()方式直接调用。结果由读取文件获得: () () () 本例在 、下调试
7、通过。与的混合编程,可以脱离环境运行,有利于程序发布及使用。通过二者结合,减少了设计算法的时间,降低了编程难度,同时兼顾了代码安全和界面友好。程序界面如图(见回复)所示。工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。 Matlab 是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与 VB 在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的。下面将分别讨论 Matlab 与 VB 集成的四种方法。一、借助 ActiveX 部件Microsoft
8、 把所有以 COM 为基础的技术统称为 ActiveX 技术。自动化是大多数 ActiveX技术的基础,它可使解释性的宏语言(如 VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Matlab 实现了 ActiveX 自动化服务支持,在 VB 下通过 ActiveX 自动化接口可将 Matlab 作为 Visual Basic 语言的一个 ActiveX 部件调用。Matlab ActiveX 自动化服务的功能主要包括在 Matlab 工作空间执行 Matlab 命令,以及直接从工作空间存取矩阵等,下面列出了 Matlab 自动化服务支持的几个主要方法,其参数和返回值的类型采用 Act
9、iveX 自动化协议所定义的与语言无关的类型描述 : 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,其实部和虚部被分别存放到两个单独的 Doub
10、le 型数组中。 void PutFullMatrix(in BSTR Name,in BSTR Workspace,in SAFEARRAY(double) pr,in SAFEARRAY(double) pi);该方法将一个 mxArray 放入指定的工作空间。各参数的含义及调用方法与GetFullMatrix 方法类似。示例代码如下:Dim Matlab As Object 声明对象Dim MReal1(5,5) As Double 声明存放实部的 Double 型数组Dim MImag() As Double 声明存放虚部的 Double 型数组Set Matlab=CreateObject(“Matlab.Application”) 初始化对象Matlab.Execute(“a=hilb(5)”) 执行 Matlab 命令Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag)