VB与MATLAB接口的实现

VB与MATLAB接口的实现
VB与MATLAB接口的实现

VB与MATLAB接口的实现: https://www.360docs.net/doc/101919055.html,

实例说明

在本实例中,我们制作一个能够与Matlab进行交互的应用程序。程序运行结果如图78-1所示。

图78-1 运行结果

技术要点

z引用Matlab库

z执行Matlab命令

z结束Matlab

实现过程

■ 新建项目

打开Visual https://www.360docs.net/doc/101919055.html,,选择“新建项目”,在项目类型窗口中选择“Visual Basic项目”,在模板窗口中选择“Windows应用程序”,在名称域中输入“CnMatlab”,然后选择保存路径。单击“确认”。

■ 添加控件

向当前窗体添加五个Button按钮,两个Picture控件,一个Label控件,一个Hscroll控件和一个Vscroll控件。单击菜单“项目|添加引用”,选中“Matlab Automation(Version5.3)Type Library”这一项。

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

■ 设置属性

将Label控件和Command按钮的Text属性设置为与界面一致。在此不再赘述。

■ 添加代码

Dim str1 As String

' 显示正弦图

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As

System.EventArgs) Handles Command1.Click

Dim matlab As Object

matlab = 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 = Nothing

ShowPic()

End Sub

' 显示三维扇形图

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click

Dim matlab As Object

matlab = 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 = Nothing

ShowPic()

End Sub

' 显示三维螺旋线图

Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command3.Click

Dim matlab As Object

matlab = 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 = Nothing

ShowPic()

End Sub

' 显示立体球图

Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command4.Click

Dim matlab As Object

matlab = 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 = Nothing

ShowPic()

End Sub

' 显示立体波浪图

Private Sub Command5_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command5.Click

Dim matlab As Object

matlab = 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 = Nothing

ShowPic()

End Sub

■ 运行程序

单击菜单“调试|启动”或单击图标运行程序。

小结

Matlab具有数值运算方便、快捷和画图的优点。它与VB结合,能实现功能强大的程序。因此,我们利用https://www.360docs.net/doc/101919055.html,可以开发出很有使用价值的程序。

matlab实现:常见的离散时间信号

1. 单位抽样序列,或称为离散时间冲激,单位冲激: ? ??=01)(n δ 00≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-01)(k n δ 0≠=n k n 2.单位阶跃序列 ? ??01)(n u 00<≥n n 在MATLAB 中可以利用ones( )函数实现。 );,1(N ones x = 3.正弦序列 )(cos )(0φω+=n A n x 这里, ,,0ωA 和φ都是实数,它们分别称为本正弦信号)(n x 的振幅,角频率和初始相位。 πω200=f 为频率。 4.复正弦序列 n j e n x ω=)( 5.实指数序列 n A n x α=)( 6. 随机序列 长度为N 的随机序列 基本数学函数参考教材P69页以及随后的使用说明。 注意使用行向量,特别是冒号运算符。 举例,长度为N 的实指数序列在MATLAB 中实现: n a x N n .^1 :0=-= 1. 单位采样 长度为N 的单位采样序列u(n)可以通过下面的MATLAB 命令获得:

u=[1 )1,1(-N zeros ]; 延迟M 个采样点的长度为N 的单位采样序列ud(n)(M

MATLABAPI详解

MATLAB、API详解 【例12.1.4-1】有一个绘圆的M脚本文件circle.m如下。希望获得一个MEX绘圆程序。(1)原始的绘圆脚本文件 [circle.m] clf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t); plot(x,'r*');axis('square') (2)对这脚本文件直接编译将因错误而失败 mcc -x circle ??? Error: File "circle" is a Script M-file and cannot be compiled with the current Compiler. Error in ==> H:\MATLAB53\toolbox\compiler\mcc.dll (3)把脚本文件改写成函数文件。 [circle_f.m]: function circle_f(r) clf;t=0:pi/100:2*pi;x=r*exp(i*t); plot(x,'r*');axis('square') (4)再对circle_f.m进行编译,将顺利通过。 mcc -x circle_f %mcc是编译指令,详见12.4节。 (5)运行生成的MEX文件circle_f.dll circle_f(0.5) %调用circle_f绘制一半径为0.5的圆 which circle_f %查询所调用的circle_f的路径全称。

图 12.2.1-1 【Select MATLAB Componets】对话窗的选项局部图 图 12.2.2.1-1 为产生MEX文件所产生的配置屏1

图 12.2.2.1-2 为产生MEX文件所产生的配置屏2 12.1.1.1配置正确性的验证 (1)mex应用程序的验证 cd d:\mywork %把用户目录指定为当前目录 mex my_yprime.c %由my_yprime.c文件生成my_yprime.dll文件my_yprime(1,1:4) %运行my_yprime.dll文件 which my_yprime %获得my_yprime.dll文件的位置信息 ans = 2.0000 8.9685 4.0000 -1.0947 d:\mywork\my_yprime.dll (2)在MATLAB命令窗中验证mcc应用程序 mcc -x my_yprime_m%<1> my_yprime_m(1,1:4) which my_yprime_m ans = 2.0000 8.9685 4.0000 -1.0947 d:\mywork\my_yprime_m.dll (3)在 DOS提示符后验证mex、mcc应用程序

常用信号的MATLAB表示

5 常用信号的MATLAB表示5.1单位冲激函数、单位冲激序列 示例7: t = -5:0.01:5; y = (t==0); subplot(121); plot(t, y, 'r'); n = -5:5; x = (n==0); subplot(122); stem(n, x); 图5 运行结果如图5所示。

程序说明: (1)由n = -5:5得到一个1×11数组n;而在x = (n==0)中,n==0是一个向量运算,即向量n中的每一个元素与0比较是否相等,其比较结果0或1放在x中。这样得到的向量x也是1×11数组,且正好就是单位冲激序列。 (2)在MATLAB中,任何向量x的下标是从1开始的,不能取零或负值,而x(n)中的时间变量n则不此受限制。因此向量x的下标与时间变量n是两个概念,如本例中向量x(n)的下标是从1到11,而时间变量n是从-5到5。所以必须用一个与向量x等长的定位时间变量n,以及向量x,才能完整地表示序列x(n)。在信号的表示和运算中,这一点请务必注意;只有当序列x(n)的时间变量正好是从1开始时,才能省去时间变量n,因为此时向量的下标与时间变量相同。 (3)单位冲激函数的实现方法实际上与单位冲激序列是完全相同的,都是用序列表示。只不过表示连续时间信号的序列中两相邻元素所对应的时间间隔更小,如本例中t的间隔为0.01,而表示离散时间信号的序列中两相邻元素所对应的时间间隔一般为1。 由于单位冲激序列在信号与系统中经常使用,我们专门编制一个函数文件delta.m,在后面的实验部分直接调用该函数即可产生需要的波形。 % delta.m function [x, n] = delta(n1,n2,k) % 产生冲激序列δ(n-k),其中n1<=n<=n 2, n1<=k<=n2

VB和Matlab传递数据

VB和Matlab传递数据 lb107 VB和Matlab传递数据 请问: 我想将m函数文件编译成dll文件,在VB里面输入数据然后调用这个dll进行计算,这样能够实现吗? 有兄弟有相关的例子没?网上VC调用Matlab的例子挺多的,但没有VB调用Matlab的例子。 谢谢指点。 2006-3-5 20:19 taohe Re:VB和Matlab传递数据 VB调用DLL会不会很复杂?总感觉VB属于高级编程语言,在调用DLL方面不会比VC更难才对。根据网上你发现的VC调用MATLAB产生的DLL的例子,大概了解MATLAB产生的DLL,然后在VB中调用,貌似应该顺理成章。 使用VB的话,一个好的方案可能是使用MATLAB产生的COM组件,而不是普通的DLL。在VB中可以很方便地使用这些COM组件。MATLAB的在线帮助有较详细的例子,不妨看看。 2006-3-5 23:01 bainhome Re:VB和Matlab传递数据 前一段儿看了看书,做过两个简单的,下面这个是其中之一(曾发在别的论坛上,转一下),因最近实在是太忙,没有时间研究,所以比较基础,没有更加复杂的Trick 比如将VBtext中的数组作为COM的input、图形绘制等等,VB代码:[code] Private addn As addn.Add Private Sub Command1_Click() Dim x As Double Dim y As Variant x = CDbl(Text1.Text) Call addn.numadd(1, y, x) Text2.Text = y End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() Set addn = New addn.Add Form1.Caption = "VB调用MATLAB示例" Text1.Text = 2 End Sub [/code] [code] function y=numadd(x) y=2*x; [/code] COM组件调用格式: [code]call h.func(numout,arg1,arg2,...)[/code] MATLAB中的函数书写格式: [code][out1,out2,out3]=myfunc(arg1,arg2)[/code] 则VB的调用应该为: [code]call object.myfunc(3,out1inVB,out2inVB,out3inVB,arg1inVB,arg2inVB)[/code] “3”指的是输出变量的数目 另外当多个版本的MATLAB在同一PC上时,VB只认其中一个版本产生的COM,不知道是不是环境变量设置的问题。 2006-3-6 09:41 lb107 Re:VB和Matlab传递数据 谢谢楼上二位的指点!! 我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想找几个具体的例子看看其调用的根据体过程 谢谢!! 2006-3-6 19:53 taohe Re:VB和Matlab传递数据 [quote][b]lb107 wrote:[/b] 谢谢楼上二位的指点!! 我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想找几个具体的例子看看其调用的根据体过程 谢谢!! [/quote] 如果用comtool也就是使用COM组件的话,事情就更好办了。因为进入COM世界后,所有的数据都是VARIANT,而VB和COM是非常亲近的关系,在VB中使用COM比起其他语言比如C++来说显得更为轻松。还得重复一下,matlab的在线帮助上关于COM组件的应用几乎全部是VB作为应用程序例子,不妨看看。2006-3-6 20:05 lb107Re:VB和Matlab传递数据 我的英语不太好 taohe 老师能给一个具体的链接地址吗?? 谢谢 2006-3-6 20:46 taohe Re:VB和Matlab传递数据 你指什么连接地址?我刚才说的在线帮助是matlab安装文档。 本来matlab的公司MathWorks的网站上有每次最新版的matlab的帮助文档连接。不过现在MathWorks网站上的连接好像已经变成新版matlab R2006a的文档了。所以只好看matlab安装后的在线帮助了。 matlab不知你用那个版本的matlab,不管那个版本,在matlab环境中运行doc,然后在出来的帮助文档中寻找相关的话题。如果是matlab6.5.x的话,应该在matlab com builder,如果是matlab7.x的话应该是matlab builder for com。 里面有例子程序,如果VB好的话,应该没有问题的。别怕英文。 可惜我是VB盲,无法给出具体的帮助。 Good luck! 2006-3-6 22:40 lb107 Re:VB和Matlab传递数据 再次谢谢 2006-3-12 21:35 godzilla2000cn Re:VB和Matlab传递数据 如果matlab中生成的图片怎么传到VB里,也就是在VB中用什么控件来接收matlab的fig??? 2006-11-1 19:46 tian7tian 大家好啊! 我现在是将m文件组成com组件,还没搞定呢,总出现错误! 2006-11-8 19:46 jimin 看了bainhome版主的一个例子后,做了个vb调用matlab时隐藏matlab figure 的例子 Private Sub Command1_Click() Dim objMATLAB As Object Set objMATLAB = CreateObject("matlab.application") Dim strEnter As String Dim strCommand As String strEnter = Chr(13) & Chr(10) strCommand = "figure('visible', 'off', 'Units','points','PaperUnits', 'points');" strCommand = strCommand & strEnter strCommand = strCommand & "surf(peaks(25));" strCommand = strCommand & strEnter strCommand = strCommand & "print -dmeta" strCommand = strCommand & strEnter strCommand = strCommand & "close(gcf)" strCommand = strCommand & strEnter objMATLAB.execute (strCommand) imgDraw.Picture = Clipboard.GetData() imgDraw.Refresh Set objMATLAB = Nothing End Sub 2006-11-12 10:42 WaitingForMe Matlab的代码或者窗口, 用combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小. 2006-11-12 13:59 bainhome [quote]Matlab的代码或者窗口, 用combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小.[/quote] 前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^ 2006-11-29 19:23 tian7tian 关于bainhome写的程序,我问个问题,关于 function y=numadd(x) 其中y定义为variant,x定义为double类型;是不是类型是固定的呢? x可以定义为string类型么? 2006-12-11 14:43 tian7tian 有哪位了解的话,有时间的话,给答复一下,谢谢了!! 2006-12-31 01:24 WaitingForMe [quote]原帖由[i]bainhome[/i] 于2006-11-12 13:59 发表 前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^ [/quote] Combuilder创建的程序,移植到没有安装Matlab的电脑上的时候,需要安装一个什么包,都忘了,这个是Matlab的帮助,自己看帮助吧 MATLAB COM Builder: Overview: Packaging and Distributing the Component 2007-7-20 15:53 shiwenyaboa

实验1 常见离散信号的MATLAB产生和图形显示

实验1 常见离散信号的MATLAB 产生和图形显示 一、实验目的:加深对常用离散信号的理解 二、实验原理: 1.单位抽样序列:???=01)(n δ 00 ≠=n n 在MATLAB 中可以利用zeros()函数实现。 ; 1)1();,1(==x N zeros x 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n ?δ即:? ??=?01)(k n δ 0≠=n k n 2.单位阶越序列:???0 1 )(n u 00<≥n n 在MATLAB 中可以利用ones()函数实现。(1,)x ones N = 3.正弦序列:)/2sin()(?π+=Fs fn A n x 在MATLAB 中 ) /***2sin(*1 :0fai Fs n f pi A x N n +=?= 4.复正弦序列:n j e n x ?=)( 在MATLAB 中 ) **exp(1 :0n w j x N n =?= 5.指数序列:n a n x =)( 在MATLAB 中 n a x N n .^1:0=?= 三、实验内容: 1、编制程序产生上述5种信号(长度可输入确定),并绘出其图形。 2、讨论正弦序列、复指数序列的性质: (1)绘出信号()zn x n e =,当1126z j π=?+、1126z j π=+、112 z =、62πj z +=、6π j z =时 信号的实部和虚部图;当6 π j z =时信号的周期为多少?

(2)绘出信号() 1.5sin(2*0.1)x n n π=的频率是多少?周期是多少?产生一个数字频率为0.9的正弦序列,并显示该信号,说明其周期。 3、使用帮助功能学习square(方波),sawtooth(锯齿波)和sinc 函数,并绘图。 四、实验要求: 1、预先阅读MATLAB 基础; 2、讨论复指数序列的性质。

遗传算法的VB程序【精品毕业设计】(完整版)

遗传算法的VB程序 最近看了下遗传算法,刚看了一点,就觉得手痒,非要把程序编制出来看看效果(我现在总认为那些理论再高深,无法用计算机实现就是空话,呵呵)。下面是我调试了好久的代码,无赖没有学过数据结构&算法,程序写的很差,单效果还是出来了,高兴,和大家共同分享下成果吧。 还是一样,不想说原理,因为这里想搞个公式上去N麻烦。直接给点实际的东西。具体步骤是参考《MATLAB遗传算法工具箱及应用》(西安电子科技大学出版社)16~22页的相关说明编制的,有兴趣的同学可以去看看这本书。 在程序调试成功的同时,郁闷的是工作的事情,现在好多企业久是指名不要研究生,而我又是一个四不象,本专业是热能工程,可我本专业基本上还是本科水平,大部分时间都去自学一些杂七杂八的东西去了,比如人工智能,PLC,自动控制方面,图像处理啊,可又只是懂个皮毛,现在找工作也不知道怎么给自己定位了。有相关经历的同学可要指点我一二哦。 Option Explicit '程序实现功能:用遗传算法求函数的最大值 '作者: laviewpbt '联系方式: 'QQ:33184777 '版本:Version 1.4.0 '说明:复制请保留源作者信息,转载请说明,欢迎大家提出意见和建议 Dim N2(30) As Long '用来保存2的N次方的数据 Dim Script As Object '调用其Eval函数 Public Enum CrossOver OnePointCrossOver '单点交叉 TwoPointCrossOver '两点交叉 UniformCrossOver '平均交叉 End Enum Public Enum Selection RouletteWheelSelection '轮盘赌选择 StochasticTourament '随机竞争选择 RandomLeagueMatches '随机联赛选择 StochasticUniversalSampleing '随机遍历取样 End Enum Public Enum EnCoding Binary '标准二进制编码

vb调用matlab的四种方法

一、借助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 作为服务器时与其他应用程序的通信机制。

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中完成矩阵运算与图形绘制显示等功能,这种方法使用起来简单,编程效率较高。MatrixVB函数库的功能大致可分为8大类(矩阵运算、运算符重载、图形图像处理、最优化运算、多项式、信号处理、随机与统计分析、控制系统)。 除以上3种方式外,我们还可以通过DDE的方式实现VB与MATLAB的数据通信。 3.2 MatrixVB 环境设置 3.2.1 在VB应用中引入MatrixVB

常见连续信号的MATLAB表示

实验名称:常见连续信号的MATLAB 表示 报告人: 姓名班级学号 一、实验目的 1、熟悉常见连续时间信号的意义、特性及波形; 2、学会使用MATLAB 表示连续时间信号的方法; 3、学会使用MATLAB 绘制连续时间信号的波形。 二、实验内容及运行结果 1、运行以上5个例题的程序,保存运行结果。 2、已知信号()t f 的波形如下图所示,试用MATLAB 绘出满足下列要求的信号波形。 <1)()t f -; <2)()2-t f ; <3)()at f <其中a 的值分别为 21= a 和2=a ); <4)? ?? ??+12 1t f 。 第一题 例题1

程序如下: >> t1=-10:0.5:10。 >> f1=sin(t1>./t1。 >> figure(1> >> plot(t1,f1> >> xlabel('取样间隔p=0.5'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。>> t2=-10:0.1:10。 >> f2=sin(t2>./t2。 >> figure(2> >> plot(t2,f2> >> xlabel('取样间隔p=0.1'>。 >> title('f(t>=Sa(t>=sin(t>/t'>。运行结果如下:

f(t)=Sa(t)=sin(t)/t 取样间隔p=0.5 f(t)=Sa(t)=sin(t)/t 取样间隔p=0.1例题2 程序如下: >> syms t >> f=sin(t>/t。 >> ezplot(f,[-10,10]>运行结果如下:

sin(t)/t t 例题3: 程序如下: >> t=-1:0.01:4。 >> t0=0。 >> ut=stepfun(t,t0>。>> plot(t,ut> >> axis([-1,4,-0.5,1.5]>运行结果如下:

浅谈VB与MATLAB相结合的三种方法

浅谈VB与M AT LAB相结合的三种方法 樊金荣① 黎洪生② 摘 要 本文分别介绍了在VB中调用M atlab的三种方法:利用动态链接库DLL、利用动态数据交换D EE以及利用A ctivex自动化技术。并以具体的例子给出通过这些方法实现了VB的可视化界面与M atlab强大的数值计算和图形显示能力的结合。 关键词 客户 服务器 M atlab DLL DD E A ctivex 技术 一、前言 V isual Basic是由M icro s oft公司开发的在W indow s95 98平台上的一种十分强大和有生命W indow s编程语言之一,具有易学易用、编程简单、程序集成化程度高及界面可视化又能实现大多数W indow s编程目的,因而一经推出就风靡全球然而,VB提供的数学函数及其有限,因而使之在数值计算和图形显得力不人心。M atlab是M ath W o rk s公司开发的一种工程计算语言。用这个交互系统可以解决很多工程计算问题,特别当涉及到矩阵和矢量形式的问题时,M atlab提供了强大的矩阵处理的和绘图功能。显然,将二者结合起来,能实现VB 可视化界面下运用M A TLAB强大的数值计算和图形显示,使VB编更加灵活快洁。 二、采用动态链接库DLL方法 M atcom是一个从M A TLAB到C++的编译器,它可以节省用户的运算时间和内存要求。M ath too ls公司利用M atcom4技术编写了M ideva工具软件,它可以借用C++编译器将M atlab下的M-文件转换为可被VB调用的DLL或独立瓣可执行文件。VB中要使用DLL,必须在VB工程中包含DLL的声明文件(即模块文件),同时还要将DLL放在工程文件所在的目录下。 如下操作可以一个M-文件编译成DLL:启动M atcom4的M ideva,点菜单F ile Comp ile,选要转换的M-文件应该是能作为函数被其他集城环境调用的M-文件,设文件名为m yfile)。编译完成后,在对应的D ebug或R elease目录下,可以找到一些编译生成的文件。VB需要用到的文件有两个。m yfile.dll(DLL文件)m yfile.bas(在VB中声明DLL的模块文件)。事实上,m yfile.dll中的函数并不能直接与VB进行数据交换,它只能通过矩阵数据进行操作。M ah tToo ls提供了一个单独的C++库文件m atlib42.dll(相当VB集成环境与DLL之间的代理,它包含有20多个矩阵句柄操作函数和800多个从M atlab中转换来的矩阵函数)以及相应的模块文件m atlib42.bas。为了在VB中能调用这类DLL,必须将m yfile. bas和m atlib42.bas加入工程中,并将m yfil.dll和m atlib42. dll拷贝到工程所在的目录下。编译后,在VB中的函数名为m yfile-in-out,其中,in和out分别为函数的输入输出参数的个数。注意,在编程时,必须调用m t In it M来初始化库文件,即请求允许使用转换的DLL,并调用m tEx it M来结束这种请求。另外,还要使用其它的矩阵句柄函数来分配、访问和释放矩阵句柄。 这种方式最简单的例子是直接调用m atlib42.dll中提供的inv-2-1来计算矩阵的逆。 二、采用动态数据交换D EE方法 该方法是利用M A TLAB提供的客户 服务器(C lien t Server)功能,VB应用程序作为系统主控,用M atlab作为后台应用程序完成复杂计算任务与绘画功能,M atlab与VB应用程序间通过DD E协议进行数据交换,DD E(D ynam ic D ata Exchange)是一种开放的、与语言无关的、基于消息的协议,它是应用程序通过共享内存进行进程通信的一种形式。 VB应用程序首先通过确定服务器名和主题(top ic)建立与M A TLAB的DD E会话,服务器名和主题唯一地确定作为客户端,M atlab作为服务端,客户端与服务端可以就确定的项目(Ite m)交换数据。关于VB的DD E功能可以参文献。VB应用程序中需指明的M A TLAB的服务器为M atlab,, M A TLAB有Syste m和Engine两个主题,在Syste m主题下可以列出M A TLAB所提供的详细的DD E功能,在Engine主题下可以充分实现M A TLAB的服务功能。利用VB具有的DD E客户端功能,使用M A TLAB的Engine主题支持的三种操作,VB应用程序主河以向M A TLAB传送可执行的命令,从M A TLAB中读取数据以及向M A TLAB中传送数据。 VB为用户提供的支持DD E通信的控件有:窗体(Fo r m)、多文档窗体(M D I Fo r m)、标签(L abel)、文本框(T ex t Box)和图片框(P icture Box)。相应于DD E协议,这些控件提供了完成一次DD E链接需要的属性和事件,以及设置 ① ②黎洪生 武汉理工大学自动化学院 教授 博士生导师 武汉 430070 樊金荣 武汉理工大学自动化学院 硕士 武汉 430070

基于matlab的直接序列扩频通信系统仿真

基于MATLAB的直接序列扩频通信系统仿真 1.实验原理:直接序列扩频(DSSS)是直接利用具有高码率的扩频码系列采用各种调 制方式在发端与扩展信号的频谱,而在收端,用相同的扩频码序去进行解扩,把扩展宽的扩频信号还原成原始的信息。它是一种数字调制方法,具体说,就是将信源与一定的PN码(伪噪声码)进行摸二加。例如说在发射端将"1"用11000100110,而将"0"用00110010110去代替,这个过程就实现了扩频,而在接收机处只要把收到的序列是11000100110就恢复成"1"是00110010110就恢复成"0",这就是解扩。这样信源速率就被提高了11倍,同时也使处理增益达到10DB以上,从而有效地提高了整机倍噪比。 1.1 直扩系统模型 直接序列扩频系统是将要发送的信息用伪随机码(PN码)扩展到一个很宽的频带上去,在接收端用与发送端相同的伪随机码对接收到的扩频信号进行相关处理,恢复出发送的信号。对干扰信号而言,与伪随机码不相关,在接收端被扩展,使落入信号通频带的干扰信号功率大大降低,从而提高了相关的输出信噪比,达到了抗干扰的目的。直扩系统一般采用频率调制或相位调制的方式来进行数据调制,在码分多址通信中,其调制多采用BPSK、DPSK、QPSK、MPSK等方式,本实验中采取BPSK方式。 直扩系统的组成如图1所示,与信源输出的信号a(t)是码元持续时间为Ta的信息流,伪随机码产生器产生伪随机码c(t),每个伪随机码的码元宽度为Tc (Tc<

VB调用Matlab生成的dll完全攻略(混合编程必备)

用VB调用Matlab生成的dll MATLAB 具有强大的运算功能,VB 具有开发界面友好的特点,可以将二者结合,可以开发出脱离MATLAB 环境的VB程序,即利用VB调用Matlab生成的dll。 工具/原料 Microsft Visual Basic 6 Matlab 7.0 步骤/方法 在MA TLAB 系统中的命令输入comtool命令或点击左下角“Start- > MATLAB - > MA TLAB COMBuilder - > MATLAB COM Builder”,启动MATLAB COM Builder。 建立工程,选择菜单“File - > New Project”,设置工程参数。设置的工程名为COM 组件编译后的文件名称,也可以输入新类,点击“Add”建立新类。

点击菜单“Project - > Add File. . . ”,向工程中加入M或MEX文件。 点击菜单“Build - >COM Object. . . ”,状态窗口出现“Standalone DLL build complete.”说明生成dll成功。

注册生成的myfunc_1_0.dll,在VB中引用MWComUtil.dll和myfunc_1_0.dll,就可以像调用里边的函数了!

插入完成后,Visual Basic中的具体调用方法和命令 此时Matlab中定义的函数: function daoju_gonge(z,x,m,ha,c,b) (函数名daoju_gonge) VB调用 1.先对所有的参数进行定义(关键) Private z As Double Private x As Double Private m As Double Private ha As Double Private c As Double Private b As Double Private theDaoju As myDaoju.Daoju (theDaoju 是自己设定的一个VB中的变量,myDaoju 则是由.m文件编译而成的.dll文件文件名,同时也是其中定义的组件名Component name,daoju则是其类名Class name) 2.调用命令 Call theDaoju.Daoju_gonge(z, x, m, ha, c, b) 3.对VB进行初始化 Private Sub Form_Load() Set theDaoju = New myDaoju.Daoju End Sub 注意事项以及相应问题解决 1.在编译dll时,需要机器安装有C或C++编译器,比如安装VC++6.0 2.Matlab启动Comtool工具之前,还需要利用mbuild –setup 命令对compiler(转换器) 设 置,将转换器设置成C++/C语言对应的compiler,而不是Matlab自带的compiler。 Ps:前两条如果没有做到的话,在comtool生成界面往往出错,无法生成dll等相应的文件。 3.如果出现有其他一些小问题,尝试重启Visual Basic或Matlab,再或者重启电脑。 疑难点: 如果对文件进行处理,使其能够在其他电脑上同样实现设定的功能。 可选方案一:文件打包。 Visual Basic打包程序或是Matlab打包程序。

实验一--常见离散信号的MATLAB产生和图形显示

实验一 常见离散信号的MATLAB 产生和图形显示 授课课时:2学时 一、实验目的: (1)熟悉MATLAB 应用环境,常用窗口的功能和使用方法。 (2)掌握MATLAB 在时域内产生常用离散时间信号的方法。 (3)掌握离散信号的基本运算。 (4)掌握简单的绘图命令。 二、实验原理: (一)信号的表示和产生 ① 单位抽样序列 ? ??=01)(n δ 00 ≠=n n 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即: ???=-0 1)(k n δ ≠=n k n 参考程序: 例1-1:)2010(()(<<-=n n n x )δ clear all n1=-10;n2=20;n0=0;%在起点为n1,终点为n2的范围内,于n0处产生冲激。 n=n1:n2;%生成离散信号的时间序列 x=[n==n0];%生成离散信号x(n) stem(n,x);%绘制脉冲杆图

xlabel(' n');ylabel('x(n)');%横坐标和纵坐标的标注说明。 title('Unit Sample Sequence');%图形上方标注图名 axis([-10 20 0 1.2]);%确定横坐标和纵坐标的取值范围 ② 单位阶跃序列 ???=0 1 )(n u 00<≥n n 例1-2:)202((u )(<<-=n n n x ) clear all n1=-2;n2=20;n0=0; n=n1:n2;%生成离散信号的时间序列 x=[n>=n0];%生成离散信号x(n) stem(n,x,'filled'); xlabel('n');ylabel('x(n)'); title('Unit step Sequence'); axis([-2 20 0 1.2]); ③ 正弦序列 )sin()(?+=wn A n x 例1-3:一正弦信号的频率为1HZ ,振幅值幅度A 为1V ,在窗口显示2个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号并显示该连续信号和离散信号的波形。 参考程序: clear f=1; A=1;nt=2;

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库

第13章 MATLAB外部程序接口技术_习题答案

1 第13章 MATLAB 外部程序接口技术 习题13 一、选择题 1.要在Word 环境下调用MATLAB 的命令,需要调用Word 的( )模板。B A .Normal B .M-Book C .自由格式 D .空白文档 2.在Excel 环境下加载Spreadsheet Link 程序后,会在Excel 窗口的“开始”选项卡中增加一个( )命令组。D A .Excel B .Spreadsheet C .Link D .MATLAB 3.打开一个可读可写的文本文件,其打开方式为 。A A .rt+ B .r+ C .rwt D .a 4.以下选项中,用于定义指向MAT 文件指针的命令是( )。A A .MA TFile *p; B .MAT *p; C .File *p; D .FIL E *p; 5.关于MATLAB 引擎,下列说法中不正确的是( )。C A .利用MA TLA B 引擎,可以在 C 程序中调用MA TLAB 的函数。 B .通过MATLAB 引擎,可以提高开发应用程序的效率。 C .通过MA TLAB 引擎,可以在MA TLAB 中直接调用用C 语言编写的函数 D .包含MA TLAB 引擎函数的程序的执行效率减低。 二、填空题 1.在Word 与MATLAB 之间进行传递的内容称为 ,由M-Book 文档传向MATLAB 的命令称为 ,M-Book 文档中的MATLAB 命令的执行结果称为 。单元(Cell ),输入单元(Input Cell ),输出单元(Output Cell ) 2.Excel 和MA TLAB 的交互操作,通过 程序来实现。Spreadsheet Link 3.MA TLAB 文件操作的基本步骤是,先 文件,在对文件进行 ,最后 文件。打开,读写,关闭 4.对MAT 文件进行操作的C 程序中,一定要包含 头文件。mat.h 5.MEX 函数在头文件 中得到声明。mex.h 三、应用题 1.在MA TLAB 中创建一个100 × 200的随机矩阵,然后将数据导入到Excel 表格中,在Excel 中调用MATLAB 的差分函数按列进行差分运算。 2.已知)2ln(x y + =π,当x 取-3.0、-2.9、-2.8、…、2.8、2.9、3.0时,求各点的 函数值。要求: (1)将函数值输出到一个数据文件中。

相关文档
最新文档