关于VBjdbc调用数据库的步骤MATLAB中M文件的步骤

关于vb,vc调用matlab的m.文件生成的dll.文件_中华文本库
第1页/共8页
Matlab 函数转换为VB 可用的DLL
Matlab 函数转换为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 ,点
第1页/共8页
寻找更多 ""安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&当前位置: >>
MatrixVB实现MATLAB与VB混合编程
利用MatrixVB实现的混合编程
VB是Microsoft 公司推出的应用广泛的可视化编程工具,简单易学、功能丰富,而且能够设计出界面优美的应用程序;可视化的用户界面设计功能使程序设计人员摆脱繁琐复杂的界面设计,因而很快就风靡全球。Visual Basic是一种十分强大和有生命力的Windows 编程语言。但是VB语言也有它的缺点,即数值计算方面能力欠佳,因此将其与计算能力强大的MATLAB混合编程将能体现各自的优势,一般的集成方法我们在前面的章节中已有介绍,本章将详细讨论基于MatrixVB的MATLAB与Visual Basic语言的混合编程技术。
  主要内容如下:

VB调用MatrixVB的方法

VB与MatrixVB的数据传递机制

混合编程应用实例
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自动化服务的功能主要包括在MATLAB工作空间执行MATLAB命令,以及直接从工作空间存取矩阵等,我们在第5章中关于MATLAB作为服务器组件的部分的例子就是以Visual Basic应用程序,以MATLAB作为服务器客户端的。
2.通过动态链接库方式
该种方式是一种间接调用MATLAB命令的方式,借助于C++与MATLAB的接口,将MATLAB的程序文件(.M文件)编译为动态链接库(.DLL),VB在代码中与调用其他语言编写的DLL文件一样调用MATLAB中.M 文件生成的动态链接库。这种方法可以脱离具体的MATLAB环境,运行效率较高。
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
1.安装MatrixVB
(1) 系统要求为:

硬盘空间8.8M以上;

操作系统要求Windows 95及其以上版本,或者Windows NT 4.0及其以上版本。
(2) 在安装盘上找到Matrixvb4510.exe,双击后启动安装程序,并按照安装向导安装。
(3) 然后在&开始→运行&菜单中用命令regsvr32 mMatrix.dll注册,如图7-1所示。
注册 MatrixVb
2.建立EXE项目
(1) 启动VB开发环境并建立&标准 EXE&项目,如图7-2所示。
选择标准EXE工程模板
(2) 单击&打开&按钮,所建立的项目及开发界面如图7-3所示。
VB项目及开发界面
3. 为项目引入MatrixVB
在project下拉菜单中单击References,在弹出的对话框中选中MMatrix项目,系统将加载MatrixVB的动态链接库MMatrix.DLL,如图7-4所示。
引入MatrixVB的动态链接库
3.2.2
在VB中使用MatrixVB的命令与函数
1.采用立即窗口的形式
在项目中引入MatrixVB库后,在VB中可以直接在开发环境的&立即窗口&中输入MATLAB命令,让VB编译器立即执行,如在MATLAB主窗口中一样。在View下拉菜单的中选择Immediate Windows选项在开发环境中得到&立即窗口&,如图7-5所示。
VB中的立即窗口
例如,在&立即窗口&中输入如下命令:
  
A=eye(4,4)
  A.show
命令将产生一个4行4列的单位矩阵,并在MatrixVB的观察窗口Matrix Viewer中显示结果,如图7-6所示。
在VB立即窗口中产生矩阵
或者,在&立即窗口&中输入命令:
  
mesh(peaks(3))
将在MatrixVB的图形窗口Figure1中绘制并显示一个曲面网线图,如图7-7所示。
通过立即窗口绘制曲面图
2.在VB程序代码中使用
可以将MatrixVB的函数与命令调用嵌入到VB程序代码中实现相应的功能,其函数与命令的使用方式类似于在MATLAB环境中的使用方式。例如,我们可以将上例中的功能在VB代码中实现,步骤为:
(1) 在上例的主窗口中增加一个按钮,如图7-8所示。
为窗口Form1增加按钮
(2) 在按钮的Click事件处理过程中产生一个4行4列单位矩阵并显示,代码如下:
  Private Sub Command1_Click()
  A = eye(4, 4)
  A.Show
  End Sub
单击命令按钮运行程序,运行结果如图7-9所示。
VB代码中用MatrixVB产生矩阵
同样,在代码中也可以嵌入MatrixVB绘制图形的函数与命令,将该例按钮的Click事件处理过程中的代码进行如下修改。
  
Private Sub Command1_Click()
  
mesh(peaks(30))
  End Sub
运行结果如图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中定义MATLAB矩阵变量;也可以使用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 double
  Dim i,j As integer
  for i=1 To 3
  for j=1 To 3
  A(i,j)=CDbl(i+j)
  Next
  Next
  B=mabs(A)
  A. show
  End Sub
该段代码首先定义了一个二维VB数组A,然后将其赋值,通过mabs函数转化为MatrixVB矩阵B并将其显示出来。
运行程序并单击该按钮,运行的结果如图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 Matrix
  Dim x As Variant
  Set mat=zeros(3,4)
&#39;赋值为3×4的0矩阵
  Set x=zeros(3,4)
&#39;赋值为3×4的0矩阵
3.通过函数 CreateMatrix
通过函数CreateMatrix创建的矩阵可以在创建过程中直接赋值,格式为:
  
CreateMatrix(p1 , p2 ,..., pn ,)
  
p1 , p2 ,..., pn 为矩阵的值。
函数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所示。
由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矩阵A
  A.r1(i)=12&#39;写操作
  a=A.r1(i+1) &#39;读操作
将矩阵A的第i个元素赋值为12,将第i+1个元素赋值给VB中的变量a。
再如,对于二维矩阵B
  B.r2(i,j)=12
  
a=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 Double
  A=CreateMatrix(1.0)
  S=A.simple
若X为一个字符的单元素矩阵,则X.simple返回一个VB中的字符串类型;若X为由多个元素的一维或者多维矩阵,则该表达式将返回一个矩阵,但不能自动转换为VB中相应的一维或者多维数组。
2.矩阵的显示
属性show具有打开Matrix viwer窗口显示矩阵内容的功能,格式为:
  X.Show
3.获得矩阵的行、列、维数
利用函数rows()、cols()、dims()、dimension(n)返回矩阵的行数、列数、维数及第n维数的个数属性,与这些属性相关的VB中的数据类型一般为integer类型,如,对于二维矩阵A,下面的代码将得到矩阵的函数与列数,并将其赋值给VB中的变量。
a=A.rows()&#39;
获得矩阵的行数
  
b=A.cols()&#39;
获得矩阵的列数
  
c=dims()&#39;
获得矩阵的维数
  
d=dimension(1) &#39;
第一维的个数
例如,在VB程序中产生一个MatrixVB矩阵并修改其元素的值,获得其属性并输出,修改图7-8中command按钮的Click事件的处理过程。代码为:
  Private Sub Command1_Click()
  &#39;定义变量用于接收MatrixVB中矩阵元素的值或属性值
  Dim xr As double
  Dim xi As double
  Dim i As integer
  Dim row As integer
  Dim col As integer
  Dim dims As integer
  A=zeros(3) &#39;产生一个3行3列的零矩阵
  &#39;给矩阵赋值
  for i=1 To 3
   for j=1 To 3
  A(i,j)=CDbl(i+j)
  Next
  Next
  A.show&#39;显示矩阵
  xr=A.r2(2,2) &#39;获得矩阵2行2列的值
  
row=A.rows()&#39;获得行数
  
col=A.col()&#39;获得列数
  dims=A.dims()&#39;获得维数
  &#39;输出属性
  Print &行数为:&;
  P
  Print &列数为:&;
  P
  Print &维数为:&;
  P
  
End Sub
运行程序并单击command1按钮,结果如图7-13和7-14所示。
显示矩阵元素的值及属性
2.3.3
矩阵的保存与载入
使用vbsave命令将矩阵写入磁盘文件中,并将数据文件中保存的文件读到程序中。语法格式分别为:
  vbsave filename variable
  vbload(filename)
例如以下代码将产生的魔方矩阵A保存到文件magic.txt中,并读到B中
  A=magic(3)
  vbsave &magic.txt&
A
  B=vbload(&magic.txt&)
也可以使用MatrixVB提供的与C语言语法格式相似的函数来对特定格式的文件进行读写,把矩阵所有的元素都输出为一列,数据文件只能用Dos方式打开,如:
  Dim fid As Variant
  Dim A As Variant
  Dim B As Variant
  A = magic(4)
  fid = fopen(&one.txt&, &w&)
  Call fprintf(fid, &%g\n&, A)
  Call fscanf(fid, &%g\n&, B)
  fclose (fid)
2.3.4
应用举例
我们下面考虑将第5章中的计算器用MatrixVB来实现,并增加矩阵的行列式运算,LU分解。
(1) 建立一个工程,工程名为Project1,工程类型为Standard EXE,如图7-15所示。
新建VB工程
(2) 按照7.2节步骤创建工程并设置环境。
(3) 在主窗口上添加若干控件,如图7-16所示。
应用主界面
各控件的类型、名称、标题及作用如表7-1所示:
表7-1
主窗口控件
控 件 类 型
控 件 名 称


Label
Label1
Label1
显示正在输入的行、列
TextBox
Text1
接受输入数据
ComboBox
Comb1
选择运算
选择运算类型
CommandButton
Command1
计算
执行运算命令
CommandButton
Command2
下一个
切换下一条数据输入
CommandButton
Command3
关闭
关闭主窗口
CommandButton
Command4
重置
清除主窗口中的打印内容
(4) 声明模块级的变量。
  &#39;定义保存原始数据的矩阵及表示当前行列的变量
  Dim mat As Variant
  Dim i As Integer
  Dim j As Integer
(5) 为主窗口Form的Load事件编写代码。
   Private Sub Form_Load()
   Set mat = zeros(4, 4) &#39;产生一个4×4的零矩阵
   &#39;向组合框增加计算选项字符串
  Combo1.AddItem &转置&
  Combo1.AddItem &逆矩阵&
  Combo1.AddItem &特征值&
  Combo1.AddItem &LU分解&
  Combo1.AddItem &SVD分解&
  Combo1.AddItem &行列式&
  i = 1
  j = 1
  End Sub
(6) 为Command2的Click事件处理过程编写代码。
  Private Sub Command2_Click()
  Dim row As Integer
  Dim col As Integer
  Dim temp As Double
   Label1.Caption = &当前行,列为& & CStr(i) & &,
& & CStr(j)
   mat(i, j) = CDbl(Text1.Text) &#39;接收文本框中输入的数据到mat中
  
temp = CDbl(Text1.Text)
  
P &#39;将当前输入的数据输出
  
&#39;设置输出的行,列值,当行数大于4时输出结束
  
If j Mod 4 = 0 Then
  
i = i + 1
  
j = 1
  
Print
  
j = j + 1
  
End If
  
Text1.Text = &0&
  
If i = 4 Then
  
i = 1
   j = 1
  
Text1.Text = &&
   MsgBox &输入已经结束&
  
Command2.Enabled = False
   Exit Sub
  
End If
  End Sub
(7) 为Command1的Click事件编写代码。
  &#39;判断计算类型然后对mat矩阵进行相应的操作并将结果输出
  Private Sub Command1_Click()
   If Combo1.Text = &转置& Then
   A = transpose(mat)
   A.Show
  ElseIf Combo1.Text = &逆矩阵& Then
   B = inv(mat)
   B.Show
  ElseIf Combo1.Text = &特征值& Then
  C = eig(mat)
  v = C(1) &#39;C(1)为特征值向量,C(2)为主对角线为特征值的方阵
  v.Show
  ElseIf Combo1.Text = &LU分解& Then
  D = lu(mat)
  l = D(1) &#39;D(1)为下三角矩阵,D(2)为上三角矩阵,D(3)为交换矩阵
  l.Show
  ElseIf Combo1.Text = &SVD分解& Then
  E = svd(mat) &#39;E[2]为对角线为奇异值的矩阵,E[1],E[3]为正交矩阵
  v = E(1)
  v.Show
  ElseIf Combo1.Text = &行列式& Then
  F = det(mat)
  Print F.Simple &#39;将行列式的值输出到窗口上
  End If
  End Sub
(8) 为Command 4的Click事件处理过程编写代码。
  i = 1
  j = 1
  Form1.Cls
  If Command2.Enabled = False Then
  
Command2.Enabled = True
  End If
此外读者可以尝试进行编程求矩阵的范数,秩等运算。
说明:
(1) 与通过ActiveX自动化服务器方式相比,采用MatrixVB使得代码简练,它不需要在不同的环境中交换数据,也不必启动MATLAB的环境即可得到运算的结果。
(2) 有些矩阵运算函数可以返回若干个矩阵,如LU分解等,一般可以通过X(n)方式来区分。
(3) 有些针对一个二维矩阵的运算返回的是一个一维向量或单独的值,如矩阵的特征值或行列式值、范数等。
3.4
MatrixVB的运算符
VB不支持运算符的重载,例如&+&只能用于标量的加法运算,但在MatrixVB组件包中提供了一组函数用于扩展VB本身的运算符的适用范围,这些函数不仅能对MatrixVB矩阵进行算术运算,而且可以对VB支持的数据类型进行相同的运算,或者进行二者的混合运算。因此这些函数相当于扩展了VB运算符的范围。可以像使用MatrixVB组件包中其他函数一样对这些函数进行调用。我们可以将MatrixVB运算符函数分为算术运算符函数、关系运算符函数和逻辑运算符函数等。
值得注意的是,虽然MatrixVB的这一组函数可以用于VB的某些数据类型的变量或常量,但VB的运算符却不能用于MatrixVB矩阵。
3.4.1
算术运算符
矩阵的算术运算符及与VB对应的运算符如表7-2所示。
表 7-2
MatrixVB的算术运算符函数及与VB相关运算符的对应关系
Visual Basic
MatrixVB
MatrixVB运算函数说明
   a^b
power(a,b)
a的b次方
   a*b
   times(a,b)
a乘b
   a/b
rdivide(a,b)
a右除b
   a\b
ldivide(a,b)
a左除b
   a Mod b
a对b求余
   a+b
a加b
   a-b
   minus(a,b)
a减b
   -a
取a的每一个元素的相反数
说明:
(1) a和b可以都为VB所支持的整型,浮点型变量或者常量,运算的结果为MatrixVB标量矩阵,此时与VB的运算符所起的作用是一样的,如:
  Dim x As Double
  Dim y As integer
  x=4.0
  y = 2
  C = power(x, y)
  C.Show
运算的结果为16,如图7-17所示。
4.0的2次方
(2) a与b都为MatrixVB矩阵,此时二者的维数、大小均要一致,所做的运算为二个矩阵对应元素的运算,如:
  A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)
  B = CreateMatrix(2, 2, 2, 3, 3, 3, 4, 4, 4)
  A = reshape(A, 3, 3)
  B = reshape(B, 3, 3)
  C = power(A, B)
  C.Show
结果将产生一个矩阵C,其中任一元素C(i,j)的值为A矩阵对应元素A(j,i)的B(j,i)次方,计算结果如图7-18所示。
矩阵A的B次方
(3) a与b中一个为MatrixVB矩阵,一个为VB中的数据类型(整型,浮点型)的标量,所做的运算为该标量对矩阵每个元素的算术运算,如:
  A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)
  A = reshape(A, 3, 3)
  B = power(A, 2)
  B.Show
结果产生一个每一个元素为矩阵A对应元素值2次方的矩阵,如图7-19所示。
矩阵的2次方
3.4.2
关系运算符
矩阵的关系运算符及与VB对应的运算符如表7-3所示。
表7-3
MatrixVB的关系运算符函数及与VB相关运算符的对应关系
Visual Basic
MatrixVB
MatrixVB运算函数说明
lt(a,b)
a若小于b则结果为真否则为假
le((a,b)
a若小于等于b则结果为真否则为假
gt(a,b)
a若大于b则结果为真否则为假
ge(a,b)
a若大于等于b则结果为真否则为假
eq(a,b)
a若等于b则结果为真否则为假
ne(a,b)
a若不等于b则结果为真否则为假
说明:
a 和b可以都为VB所支持的整型、浮点型变量或者常量,此时与VB的运算符所起的作用是一样的,如:
(1) 如果a,b都为VB所支持的类型,运算的结果为MatrixVB标量矩阵,其中的值为0或1,如:
  Dim x As integer
  Dim y As integer
  x=1
  y=2
  C = ge(x, y)
  
结果如图7-20所示。
VB类型的比较运算
(2) a与b都为MatrixVB矩阵,此时二者的维数,大小均要一致,所做的运算为两个矩阵对应元素的运算,运算结果为由1,0构成的矩阵,如:
  A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)
  B = CreateMatrix(2, 2, 2, 3, 3, 3, 4, 4, 4)
  A = reshape(A, 3, 3)
  B = reshape(B, 3, 3)
  C = ge(A, B)
  C.Show
结果如图7-21所示。
矩阵的比较运算
(3) a与b中一个为matricVB矩阵,一个为VB中的数据类型(整型,浮点型)的标量,所做的运算为该标量对矩阵每个元素的逻辑运算,如:
  A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)
  A = reshape(A, 3, 3)
  B = ge(A, 5)
  B.Show
运算结果如图7-22所示。
矩阵与标量的比较运算
3.4.3
逻辑运算符
矩阵的逻辑运算符及与VB对应的运算符如表7-4所示。
表7-4
MatrixVB的逻辑运算符函数及与VB相关运算符的对应关系
Visual Basic
MatrixVB
MatrixVB运算函数说明
a
mand(a,b)
a与b做与运算
a
mnot(mxor(a),b
当a与b同时为真或假时结果为真,否则为假
a
mor(mnot(a),b)
a为真b为假时结果为假,否则为真
not a
mnot(a)
a做非运算
a Or b
mor(a,b)
a与b做或运算
a Xor b
mxor(a,b)
a与b做异或运算
有关矩阵逻辑运算符的数据类型说明与关系运算符相同,所得到的结果值为由0,1构成的矩阵或标量。
3.4.4
一些常用的运算函数
在前几节中我们介绍了矩阵的操作及与VB运算符有对应关系的运算符函数,其中包含了一些矩阵进行运算的函数。除此之外,MatrixVB还提供了大量运算函数,本节我们将介绍几个常用的运算符函数,如表7-5所示。
表7-5
MatrixVB的一些其他运算符函数


函 数 说 明
Colon(a,b,c)
   产生一个从a到c步长为b的序列
Primes(n)
   产生小于n的素数序列
Rand(n)
   产生一个个数为n的随机序列
Logspace(a,b,n)
   产生一个个数为n的对数序列
vbfilter(a,b,c)
   FIR滤波函数,a,b为滤波器系数矩阵,c为一个数据向量
fft(a)
   快速傅立叶变换,a为一个输入序列
Roots(a)
   用来求多项式的根,a为输入的矩阵
Mldivide(a,b)
   解线性方程组,a为系数矩阵,b为方程组等号右边的向量
Strcat(a,b)
   连接两个矩阵
例:给定一个线性方程组:
代码为:
  A = CreateMatrix(2, 11, 7, 3, -4, 5, 1, 8, -8)
  B = CreateMatrix(2, 6, 9)
  A = reshape(A, 3, 3)
  B = reshape(B, 3, 1)
  C = mldivide(A, B)
  D=strcat(A,B)
  E=vertcat(C,D)
  D.Show
运行的结果如图7-23所示。
求方程组的解
最后一列为方程组的解向量。
此外还有很多运算函数请参考帮助文档refguide.pdf,这里不一一介绍了。
3.5
图形图像处理
MatrixVB组件包提供了一整套用于二维或三维作图的函数、颜色处理函数、图像处理函数、图像句柄处理函数及用户界面对话框等工具。mattrixVB同时支持在figuer窗口及VB窗口中绘制图形与图像处理。
本节将介绍如何使用这些函数和工具来为VB程序创建和处理图形。
3.5.1
在figure窗口中绘制图形
在MatrixVB组件包中包含了用于生成圆饼图、直方图、频率图、等高线图、极坐标图和散点图等函数,可以基本满足图形绘制应用需求,同时也提供了能读取多种格式图像的处理函数。
借助这些函数及数学运算函数、颜色处理函数,可以方便地作出各种图形。下面以一个具体的二次曲线的例子来说明MatrixVB组件包在该领域的应用方法。假设该曲线的方程为:
(1) 参照7.2节建立VB工程,引入MatrixVB,在程序主窗口中添加一个按钮控件,如图7-24所示。
图形绘制程序主窗口
(2) 为按钮的click事件的处理过程编写代码:
  Private Sub Command1_Click()
  a = colon(1, 1, 10) &#39;产生一个序列
  y = times(2,power(a, 2))
  y = plus(y, 3)
  figure (1) &#39;生成绘制图形的窗口
  plot (y) &#39;绘制曲线
  End Sub
运行程序点击按钮得到的结果如图7-25所示。
二次方程曲线
说明:
(1) figure命令用来生成空白的图形绘制窗口,当在一段代码中有多个绘制图形时,参数用来标识不同的窗口,利用gcf命令可以设置当前窗口。如下列代码:
  a = colon(1, 1, 10)
  y = times(2, power(a, 2))
  y = plus(y, 3)
  figure (1) &#39;生成绘制图形的窗口
  plot (y)
  figure (2)
  plot (randn(10))
所绘制的两个图形分别在窗口figure1与figure2上。
(2) 每一个figure窗口都有一个系统默认的菜单,该命令菜单主要包括File 、Edi、Control等,可以将所绘制的图形保存成常用的图形图像格式,控制图形显示、设置和修改图形的属性,对图形窗口进行设置和控制等。
3.5.2
在VB窗口或控件中绘制图形
MatrixVB也支持直接在VB窗口或控件中绘图,此时需要用到MatrixVB函数vbaxes来为窗口添加一个axes对象,代码为:
  
ax=vbaxes(FormHandle)
ax为一个axes对象,FormHandle为窗口或者控件的句柄。下面我们在VB的窗口中绘制出7.5.1中的图形。步骤如下:
(1) 修改上例中的主窗口,增加一个PictureBox控件,名称为Picture1。如图7-26所示。
程序主窗口
(2) 在command1按扭的click事件处理过程中添加如下代码:
  ax = vbaxes(Picture1.hWnd)
  a = colon(1, 1, 10)
  y = times(2, power(a, 2))
  y = plus(y, 3)
  plot (y)
运行程序,点击按扭运行的结果如图7-27所示。
在PictureBox控件中绘图
3.6
线 性 规 划
MatrixVB也支持线性问题的求解,下面以求解线性规划问题为例,介绍MatrixVB的线性求解应用。问题如下:
求 -x+3y-2z 的最小值,其中 x, y, z均为非负数。问题的约束条件可以表示为:
该问题的求解过程在VB中可以由以下代码段实现:
  c = zeros(3,1)
  c(1) = -1
  c(2) = 3
  c(3) = -2
  a =CreateMatrix(1,3,0,2,0,5,0,4,6)
  a = reshape(a,3,3)
  b = zeros(3,1)
  b(1) = 3
  b(2) = 7
  b(3) = 2
  lb = zeros(3,1)
  x = lp(c,a,b,lb)
  x.show
上述代码中有绝大部分代码是用于整理相应的输入条件,关键的语句是对函数lp(c,a,b,lb)的调用,其运行结果由MatrixVB提供的矩阵浏览器显示。结果为:
  [17/9 0 1/3]
本文介绍了五种 VB 不 MATLAB 混合编程接口的方法,并对各方 法性能的优劣进行了比较和评价。 关键词: Matlab;Visual BActiveX;DDE;MatrixVB;DLL;COM 1 ...关于实现VB与matlab混合编程的方法_计算机软件及应用_IT/计算机_专业资料。关于实现...(2)通过使用嵌入VB的矩阵函数库MatrixVB的方法.MatrixVB是由原MathTo ols公司...因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的技术支 持。 1...MatrixVB是由原MathTools公司开发的第三方插件,利用与MATLAB相似的函数、语法嵌入...这种混合编程 实现了 VB 的可视化界面与 MATLAB 强大的数值分析能力的结合。 ...MatrixVB 是一个独立的产品, 安装完成后, 先在 Visual Basic 中新建一个工程,...因此实现 VB 与 MATLAB 混合编程,可以为科研工作和工程应用提供有 力的技术支持...(2)通过使用嵌入 VB 的矩阵函数库 MatrixVB 的方法。MatrixVB 是由原 Math...造成在 vb 环境下开发的应用程序执行 效率低等问题,提出了基于 vb 与 matlab 混合编程的数据库图形显 示方法,采用 matrixvb 插件进行数据库中数据图形显示的开发...使用MATLAB Engine 实现与 C 混合编程 (五)引擎应用程序 1、简介 引擎应用程序...VB 用 matrixVB mathtool 在主页上提供免费试用,快去下吧。matlab 的功能 可...MATLAB与VB混合编程方式简... 29页 免费 VB实现对MATLAB程序的调用 3页 免费...四、引入 MatrixVB MatrixVB 是 MathWorks 针对 VB 提供的一个 Matlab 库,它...通过两者的混合编 程实现了 VB 的可视化界面与 Matlab 强大的数值分析和图形图像处 理能力的结合。 关键词:ActiveX 无缝链接 DDE MatrixVB Visual Basic 是 ...软件英才网 软件行业驰名招聘网站 matlab 混合编程向导 matlab 混合编程向导(vc,...matlab 与 vb 混编 1.mathworks 公司专为 vb 开发了一个 com 组件:matrixvb,...
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 matlab调用m文件 的文章

 

随机推荐