語言的混合編程方式_第1頁
語言的混合編程方式_第2頁
語言的混合編程方式_第3頁
語言的混合編程方式_第4頁
語言的混合編程方式_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、3.1  MATLAB與Visual Basic語言的混合編程方式MATLAB提供了與C/C+、Fortran語言的接口,但沒有與Vsiual Basic語言的接口,要想實(shí)現(xiàn)MATLAB與Visual Basic的混合編程可以通過以下途徑來實(shí)現(xiàn)。1通過ActiveX方式一是用Visual Basic開發(fā)服務(wù)器ActiveX組件,MATLAB作為客戶端程序使用,事實(shí)上無論是用VB還是VC或者其他語言環(huán)境開發(fā)的ActiveX組件,對于MATLAB來說集成與調(diào)用方式是一樣的,一般情況下很容易地將不同環(huán)境下開發(fā)的用途各異的ActiveX對象集成到一個(gè)MATLAB應(yīng)用中來。其使用方法見第5章關(guān)

2、于MATLAB作為ActiveX的客戶端使用方法。二是在VB環(huán)境下可以通過ActiveX自動化接口將MATLAB作為Visual Basic語言的一個(gè)ActiveX部件調(diào)用。MATLAB ActiveX自動化服務(wù)的功能主要包括在MATLAB工作空間執(zhí)行MATLAB命令,以及直接從工作空間存取矩陣等,我們在第5章中關(guān)于MATLAB作為服務(wù)器組件的部分的例子就是以Visual Basic應(yīng)用程序,以MATLAB作為服務(wù)器客戶端的。2通過動態(tài)鏈接庫方式該種方式是一種間接調(diào)用MATLAB命令的方式,借助于C+與MATLAB的接口,將MATLAB的程序文件(.M文件)編譯為動態(tài)鏈接庫(.DLL),VB在

3、代碼中與調(diào)用其他語言編寫的DLL文件一樣調(diào)用MATLAB中.M 文件生成的動態(tài)鏈接庫。這種方法可以脫離具體的MATLAB環(huán)境,運(yùn)行效率較高。3通過嵌入VB的矩陣函數(shù)庫MatrixVB的方法MatrixVB是由第三方(mathtools公司)提供的COM組件,包含了大量與MATLAB相似的函數(shù)與調(diào)用語法,可以加強(qiáng)VB內(nèi)建數(shù)學(xué)運(yùn)算與圖形展示功能,在VB程序代碼中可以像使用VB自己的函數(shù)一樣使用MatrixVB的函數(shù),而且可以不依賴于MATLAB的環(huán)境在Visual Basic中完成矩陣運(yùn)算與圖形繪制顯示等功能,這種方法使用起來簡單,編程效率較高。MatrixVB函數(shù)庫的功能大致可分為8大類(矩陣運(yùn)

4、算、運(yùn)算符重載、圖形圖像處理、最優(yōu)化運(yùn)算、多項(xiàng)式、信號處理、隨機(jī)與統(tǒng)計(jì)分析、控制系統(tǒng))。除以上3種方式外,我們還可以通過DDE的方式實(shí)現(xiàn)VB與MATLAB的數(shù)據(jù)通信。3.2  MatrixVB 環(huán)境設(shè)置  在VB應(yīng)用中引入MatrixVB1安裝MatrixVB(1) 系統(tǒng)要求為:     硬盤空間8.8M以上;     操作系統(tǒng)要求Windows 95及其以上版本,或者Windows NT 4.0及其以上版本。(2) 在安裝盤上找到Matrixvb4510.exe,雙擊后啟動安裝程序,并按照安裝

5、向?qū)О惭b。(3) 然后在“開始運(yùn)行”菜單中用命令regsvr32 mMatrix.dll注冊,如圖7-1所示。圖7-1  注冊 MatrixVb2建立EXE項(xiàng)目(1) 啟動VB開發(fā)環(huán)境并建立“標(biāo)準(zhǔn) EXE”項(xiàng)目,如圖7-2所示。圖7-2  選擇標(biāo)準(zhǔn)EXE工程模板(2) 單擊“打開”按鈕,所建立的項(xiàng)目及開發(fā)界面如圖7-3所示。圖7-3  VB項(xiàng)目及開發(fā)界面3. 為項(xiàng)目引入MatrixVB在project下拉菜單中單擊References,在彈出的對話框中選中MMatrix項(xiàng)目,系統(tǒng)將加載MatrixVB的動態(tài)鏈接庫MMatrix.DLL,如圖7-4所示。圖7-4&#

6、160; 引入MatrixVB的動態(tài)鏈接庫  在VB中使用MatrixVB的命令與函數(shù)1采用立即窗口的形式在項(xiàng)目中引入MatrixVB庫后,在VB中可以直接在開發(fā)環(huán)境的“立即窗口”中輸入MATLAB命令,讓VB編譯器立即執(zhí)行,如在MATLAB主窗口中一樣。在View下拉菜單的中選擇Immediate Windows選項(xiàng)在開發(fā)環(huán)境中得到“立即窗口”,如圖7-5所示。圖7-5  VB中的立即窗口例如,在“立即窗口”中輸入如下命令:      A=eye(4,4)A.show命令將產(chǎn)生一個(gè)4行4列的單位矩陣,并在MatrixVB的

7、觀察窗口Matrix Viewer中顯示結(jié)果,如圖7-6所示。圖7-6  在VB立即窗口中產(chǎn)生矩陣或者,在“立即窗口”中輸入命令:     mesh(peaks(3)將在MatrixVB的圖形窗口Figure1中繪制并顯示一個(gè)曲面網(wǎng)線圖,如圖7-7所示。圖7-7  通過立即窗口繪制曲面圖2在VB程序代碼中使用可以將MatrixVB的函數(shù)與命令調(diào)用嵌入到VB程序代碼中實(shí)現(xiàn)相應(yīng)的功能,其函數(shù)與命令的使用方式類似于在MATLAB環(huán)境中的使用方式。例如,我們可以將上例中的功能在VB代碼中實(shí)現(xiàn),步驟為:(1) 在上例的主窗口中增加一個(gè)按鈕,如圖

8、7-8所示。圖7-8  為窗口Form1增加按鈕(2) 在按鈕的Click事件處理過程中產(chǎn)生一個(gè)4行4列單位矩陣并顯示,代碼如下:Private Sub Command1_Click()A = eye(4, 4)A.ShowEnd Sub單擊命令按鈕運(yùn)行程序,運(yùn)行結(jié)果如圖7-9所示。圖7-9  VB代碼中用MatrixVB產(chǎn)生矩陣同樣,在代碼中也可以嵌入MatrixVB繪制圖形的函數(shù)與命令,將該例按鈕的Click事件處理過程中的代碼進(jìn)行如下修改。    Private Sub Command1_Click()  mesh(peaks(

9、30)End Sub運(yùn)行結(jié)果如圖7-10所示。圖7-10  通過嵌入MatrixVB命令繪圖在發(fā)布基于MatrixVB的VB應(yīng)用程序時(shí),應(yīng)將相應(yīng)的庫文件隨系統(tǒng)一起發(fā)布。這些文件包括:v4510v.dll、c4510v.dll、ago4510.dll、msvcrt.dll、msvcirt.dll和MMatrix.dll。由于MMatrix.dll是COM 服務(wù)器,所以必須在操作系統(tǒng)中注冊后方可使用,注冊時(shí)可使用如下命令行語句:regsvr32 mMatrix.dll如果目標(biāo)操作系統(tǒng)是Windows 95,還必須發(fā)布另外兩個(gè)OpenGL文件即opengl32.dll與glu32.dll,

10、但在其他操作系統(tǒng)如Windows 98/Me/NT 4/2000等環(huán)境下,則不需要安裝這些文件。2.3  MatrixVB 的矩陣操作矩陣是表示一組數(shù)據(jù)關(guān)系的組合,在MatrixVB中包含了許多矩陣分析函數(shù),為了在VB中直接應(yīng)用MatrixVB這些高效的計(jì)算方法,一般將VB中的數(shù)組當(dāng)成矩陣進(jìn)行處理,需要說明的是與matricVB矩陣元素相關(guān)的運(yùn)算在VB中對應(yīng)的數(shù)據(jù)類型一般為double類型。  在VB中生成MatrixVB矩陣可以像在MATLAB命令窗口中那樣,直接在VB中定義MATLAB矩陣變量;也可以使用VB的VARIANT通用型變量表示矩陣,其定義的方法如下:Dim

11、x As Variant一般在VB中產(chǎn)生MatrixVB的方法主要有以下幾種:1通過函數(shù)mabs轉(zhuǎn)化為MatrixVB的矩陣將VB中定義的數(shù)組通過函數(shù)mabs轉(zhuǎn)化為MatrixVB的矩陣,格式為:MATRIXVB_MATRIX=mabs(VB_ARRAY)MATRIXVB_MATRIX為MatrixVB的矩陣名稱,如同在MATLAB窗口中那樣,不需要事先定義,VB_ARRAY是VB程序中定義的數(shù)組,也可以是單獨(dú)的VB常量與變量。修改圖7-8中command按鈕的Click事件的處理過程代碼為:Private Sub Command1_Click()Dim A(1to 3,1to 3) 

12、; 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       該段代碼首先定義了一個(gè)二維VB數(shù)組A,然后將其賦值,通過mabs函數(shù)轉(zhuǎn)化為MatrixVB矩陣B并將其顯示出來。運(yùn)行程序并單擊該按鈕,運(yùn)行的結(jié)果如圖7-11所示。圖7-11  通過函數(shù)mabs產(chǎn)生的MatrixVB矩陣2通過MatrixVB函數(shù)生成矩陣可以使用MatrixVB中的特殊函數(shù)(如zeros()

13、、ones()、magic()等)直接生成矩陣。如在VB程序代碼中直接嵌入語句:A=zeros(3,4)A.show結(jié)果將產(chǎn)生一個(gè)3行4列元素都為0的矩陣并將其顯示出來。在應(yīng)用程序中我們也可以先定義變量,然后再賦值產(chǎn)生矩陣。產(chǎn)生矩陣VB支持的兩種類型為Matrix與Variant的如下語句,都將產(chǎn)生一個(gè)3×4的0矩陣。Dim mat As MatrixDim x As VariantSet mat=zeros(3,4)               '

14、;賦值為3×4的0矩陣Set x=zeros(3,4)              '賦值為3×4的0矩陣3通過函數(shù) CreateMatrix通過函數(shù)CreateMatrix創(chuàng)建的矩陣可以在創(chuàng)建過程中直接賦值,格式為:        CreateMatrix(p1 , p2 , pn ,)    p1 , p2 , pn 為矩陣的值。函數(shù)Reshape

15、用來設(shè)置由函數(shù)CreateMatrix所創(chuàng)建的函數(shù)的維數(shù),格式為:    Reshap(X,rows,cols)X為由CreateMatrix創(chuàng)建的矩陣,rows為指定的行數(shù),cols為指定的列數(shù),如下例所示:      A=CreateMatrix(1,2,3,4,5,6,7,8,9)      Reshap(A,3,3)      A.Show創(chuàng)建一個(gè)矩陣,并將其指定為3行3列,結(jié)果如圖7-12所示。 

16、 圖7-12  由CreateMatrix 產(chǎn)生的MatrixVB矩陣2.3.2  對矩陣元素進(jìn)行操作1矩陣元素的存取及與VB的數(shù)據(jù)轉(zhuǎn)換(1) 通過圓括號方式訪問MatrixVB矩陣,但是這種方式只能對矩陣元素進(jìn)行寫操作,其格式如同訪問VB的數(shù)組元素一樣,例如:A是一個(gè)二維矩陣則下列代碼:A(i,j)=2.0可以將矩陣的第i行第j列賦值為1。(2) MatrixVB矩陣屬性rN、iN可以以讀寫的形式訪問矩陣X中的每個(gè)元素的實(shí)部和虛部,其中N表示矩陣的維數(shù),例如,對于一維MatrixVB矩陣AA.r1(i)=12'寫操作a=A.r1(i+1) '讀操

17、作將矩陣A的第i個(gè)元素賦值為12,將第i+1個(gè)元素賦值給VB中的變量a。再如,對于二維矩陣BB.r2(i,j)=12       a=B.r2(i,j)將矩陣B的第i行j列元素賦值為12,將矩陣B的第i行第j列元素賦值給VB中的變量a,要通過iN的方式來訪問。(3) X.simple可以將MatrixVB矩陣X轉(zhuǎn)換為VB中的數(shù)據(jù)類型。在X為只有一個(gè)元素的矩陣情況下,若X為一個(gè)實(shí)數(shù)則將值轉(zhuǎn)換為VB中的Double類型,如:Dim S As DoubleA=CreateMatrix(1.0)S=A.simple若X為一個(gè)字符的單元素矩陣,

18、則X.simple返回一個(gè)VB中的字符串類型;若X為由多個(gè)元素的一維或者多維矩陣,則該表達(dá)式將返回一個(gè)矩陣,但不能自動轉(zhuǎn)換為VB中相應(yīng)的一維或者多維數(shù)組。2矩陣的顯示屬性show具有打開Matrix viwer窗口顯示矩陣內(nèi)容的功能,格式為:X.Show3獲得矩陣的行、列、維數(shù)利用函數(shù)rows()、cols()、dims()、dimension(n)返回矩陣的行數(shù)、列數(shù)、維數(shù)及第n維數(shù)的個(gè)數(shù)屬性,與這些屬性相關(guān)的VB中的數(shù)據(jù)類型一般為integer類型,如,對于二維矩陣A,下面的代碼將得到矩陣的函數(shù)與列數(shù),并將其賦值給VB中的變量。   a=A.rows()'

19、60;          獲得矩陣的行數(shù)     b=A.cols()'            獲得矩陣的列數(shù)     c=dims()'              獲得矩陣的維數(shù)   

20、;  d=dimension(1) '       第一維的個(gè)數(shù)例如,在VB程序中產(chǎn)生一個(gè)MatrixVB矩陣并修改其元素的值,獲得其屬性并輸出,修改圖7-8中command按鈕的Click事件的處理過程。代碼為:Private Sub Command1_Click()'定義變量用于接收MatrixVB中矩陣元素的值或?qū)傩灾礑im xr As doubleDim xi As doubleDim i As integerDim row As integerDim col As integerDim dims A

21、s integerA=zeros(3) '產(chǎn)生一個(gè)3行3列的零矩陣'給矩陣賦值for i=1 To 3 for j=1 To 3A(i,j)=CDbl(i+j)NextNextA.show'顯示矩陣xr=A.r2(2,2) '獲得矩陣2行2列的值    row=A.rows()'獲得行數(shù)    col=A.col()'獲得列數(shù)dims=A.dims()'獲得維數(shù)'輸出屬性Print "行數(shù)為:";Print  row;Print &

22、quot;列數(shù)為:";Print  col;Print "維數(shù)為:";Print  col;    End Sub運(yùn)行程序并單擊command1按鈕,結(jié)果如圖7-13和7-14所示。圖7-13  顯示矩陣圖7-14  顯示矩陣元素的值及屬性  矩陣的保存與載入使用vbsave命令將矩陣寫入磁盤文件中,并將數(shù)據(jù)文件中保存的文件讀到程序中。語法格式分別為:vbsave filename variablevbload(filename)例如以下代碼將產(chǎn)生的魔方矩陣A保存到文件magic.tx

23、t中,并讀到B中A=magic(3)vbsave "magic.txt"   AB=vbload("magic.txt")也可以使用MatrixVB提供的與C語言語法格式相似的函數(shù)來對特定格式的文件進(jìn)行讀寫,把矩陣所有的元素都輸出為一列,數(shù)據(jù)文件只能用Dos方式打開,如:Dim fid As VariantDim A As VariantDim B As VariantA = magic(4)fid = fopen("one.txt", "w")Call fprintf(fid, "%

24、gn", A)Call fscanf(fid, "%gn", B)fclose (fid)2.3.4  應(yīng)用舉例我們下面考慮將第5章中的計(jì)算器用MatrixVB來實(shí)現(xiàn),并增加矩陣的行列式運(yùn)算,LU分解。(1) 建立一個(gè)工程,工程名為Project1,工程類型為Standard EXE,如圖7-15所示。圖7-15  新建VB工程(2) 按照7.2節(jié)步驟創(chuàng)建工程并設(shè)置環(huán)境。(3) 在主窗口上添加若干控件,如圖7-16所示。圖7-16  應(yīng)用主界面各控件的類型、名稱、標(biāo)題及作用如表7-1所示:表7-1  主窗口控件控 件 類 型

25、控 件 名 稱標(biāo)    題作    用LabelLabel1Label1顯示正在輸入的行、列TextBoxText1接受輸入數(shù)據(jù)ComboBoxComb1選擇運(yùn)算選擇運(yùn)算類型CommandButtonCommand1計(jì)算執(zhí)行運(yùn)算命令CommandButtonCommand2下一個(gè)切換下一條數(shù)據(jù)輸入CommandButtonCommand3關(guān)閉關(guān)閉主窗口CommandButtonCommand4重置清除主窗口中的打印內(nèi)容          

26、;            (4) 聲明模塊級的變量。'定義保存原始數(shù)據(jù)的矩陣及表示當(dāng)前行列的變量Dim mat As VariantDim i As IntegerDim j As Integer(5) 為主窗口Form的Load事件編寫代碼。 Private Sub Form_Load() Set mat = zeros(4, 4) '產(chǎn)生一個(gè)4×4的零矩陣 '向組合框增加計(jì)算選項(xiàng)字符串Combo1.AddIt

27、em "轉(zhuǎn)置"Combo1.AddItem "逆矩陣"Combo1.AddItem "特征值"Combo1.AddItem "LU分解"Combo1.AddItem "SVD分解"Combo1.AddItem "行列式"i = 1j = 1End Sub(6) 為Command2的Click事件處理過程編寫代碼。Private Sub Command2_Click()Dim row As IntegerDim col As IntegerDim temp As Double&

28、#160;Label1.Caption = "當(dāng)前行,列為" & CStr(i) & ",  " & CStr(j) mat(i, j) = CDbl(Text1.Text) '接收文本框中輸入的數(shù)據(jù)到mat中   temp = CDbl(Text1.Text)   Print temp; '將當(dāng)前輸入的數(shù)據(jù)輸出   '設(shè)置輸出的行,列值,當(dāng)行數(shù)大于4時(shí)輸出結(jié)束   If j Mod 4 = 0 Then&#

29、160;  i = i + 1   j = 1   Print   Else   j = j + 1   End If   Text1.Text = "0"   If i = 4 Then   i = 1 j = 1   Text1.Text = "" MsgBox "輸入已經(jīng)結(jié)束"   Command2.E

30、nabled = False Exit Sub  End IfEnd Sub(7) 為Command1的Click事件編寫代碼。'判斷計(jì)算類型然后對mat矩陣進(jìn)行相應(yīng)的操作并將結(jié)果輸出Private Sub Command1_Click() If Combo1.Text = "轉(zhuǎn)置" Then A = transpose(mat) A.ShowElseIf Combo1.Text = "逆矩陣" Then B = inv(mat) B.ShowElseIf Combo1.Tex

31、t = "特征值" ThenC = eig(mat)v = C(1) 'C(1)為特征值向量,C(2)為主對角線為特征值的方陣v.ShowElseIf Combo1.Text = "LU分解" ThenD = lu(mat)l = D(1) 'D(1)為下三角矩陣,D(2)為上三角矩陣,D(3)為交換矩陣l.ShowElseIf Combo1.Text = "SVD分解" ThenE = svd(mat) 'E2為對角線為奇異值的矩陣,E1,E3為正交矩陣v = E(1)v.ShowElseIf Combo1.

32、Text = "行列式" ThenF = det(mat)Print F.Simple '將行列式的值輸出到窗口上End IfEnd Sub(8) 為Command 4的Click事件處理過程編寫代碼。i = 1j = 1Form1.ClsIf Command2.Enabled = False Then    Command2.Enabled = TrueEnd If此外讀者可以嘗試進(jìn)行編程求矩陣的范數(shù),秩等運(yùn)算。說明:(1) 與通過ActiveX自動化服務(wù)器方式相比,采用MatrixVB使得代碼簡練,它不需要在不同的環(huán)境中交換數(shù)據(jù),也

33、不必啟動MATLAB的環(huán)境即可得到運(yùn)算的結(jié)果。(2) 有些矩陣運(yùn)算函數(shù)可以返回若干個(gè)矩陣,如LU分解等,一般可以通過X(n)方式來區(qū)分。(3) 有些針對一個(gè)二維矩陣的運(yùn)算返回的是一個(gè)一維向量或單獨(dú)的值,如矩陣的特征值或行列式值、范數(shù)等。3.4  MatrixVB的運(yùn)算符VB不支持運(yùn)算符的重載,例如“+”只能用于標(biāo)量的加法運(yùn)算,但在MatrixVB組件包中提供了一組函數(shù)用于擴(kuò)展VB本身的運(yùn)算符的適用范圍,這些函數(shù)不僅能對MatrixVB矩陣進(jìn)行算術(shù)運(yùn)算,而且可以對VB支持的數(shù)據(jù)類型進(jìn)行相同的運(yùn)算,或者進(jìn)行二者的混合運(yùn)算。因此這些函數(shù)相當(dāng)于擴(kuò)展了VB運(yùn)算符的范圍??梢韵袷褂肕atrixV

34、B組件包中其他函數(shù)一樣對這些函數(shù)進(jìn)行調(diào)用。我們可以將MatrixVB運(yùn)算符函數(shù)分為算術(shù)運(yùn)算符函數(shù)、關(guān)系運(yùn)算符函數(shù)和邏輯運(yùn)算符函數(shù)等。值得注意的是,雖然MatrixVB的這一組函數(shù)可以用于VB的某些數(shù)據(jù)類型的變量或常量,但VB的運(yùn)算符卻不能用于MatrixVB矩陣。  算術(shù)運(yùn)算符矩陣的算術(shù)運(yùn)算符及與VB對應(yīng)的運(yùn)算符如表7-2所示。表 7-2  MatrixVB的算術(shù)運(yùn)算符函數(shù)及與VB相關(guān)運(yùn)算符的對應(yīng)關(guān)系Visual BasicMatrixVBMatrixVB運(yùn)算函數(shù)說明ab    power(a,b)a的b次方a*b 

35、0;    times(a,b)a乘ba/b     rdivide(a,b)a右除bab     ldivide(a,b)a左除ba Mod bmmod(a,b)a對b求余a+b    plus(a,b)a加ba-b    minus(a,b)a減b-a     uminus(a)取a的每一個(gè)元素的相反數(shù)說明:(1) a和b可

36、以都為VB所支持的整型,浮點(diǎn)型變量或者常量,運(yùn)算的結(jié)果為MatrixVB標(biāo)量矩陣,此時(shí)與VB的運(yùn)算符所起的作用是一樣的,如:Dim x As DoubleDim y As integerx=4.0y = 2C = power(x, y)C.Show運(yùn)算的結(jié)果為16,如圖7-17所示。圖7-17  4.0的2次方(2) a與b都為MatrixVB矩陣,此時(shí)二者的維數(shù)、大小均要一致,所做的運(yùn)算為二個(gè)矩陣對應(yīng)元素的運(yùn)算,如:A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)B = CreateMatrix(2, 2, 2, 3, 3, 3, 4, 4,

37、4)A = reshape(A, 3, 3)B = reshape(B, 3, 3)C = power(A, B)C.Show結(jié)果將產(chǎn)生一個(gè)矩陣C,其中任一元素C(i,j)的值為A矩陣對應(yīng)元素A(j,i)的B(j,i)次方,計(jì)算結(jié)果如圖7-18所示。圖7-18  矩陣A的B次方(3) a與b中一個(gè)為MatrixVB矩陣,一個(gè)為VB中的數(shù)據(jù)類型(整型,浮點(diǎn)型)的標(biāo)量,所做的運(yùn)算為該標(biāo)量對矩陣每個(gè)元素的算術(shù)運(yùn)算,如:A = CreateMatrix(1, 2, 3, 4, 5, 6, 7, 8, 9)A = reshape(A, 3, 3)B = power(A, 2)B.Show結(jié)果產(chǎn)

38、生一個(gè)每一個(gè)元素為矩陣A對應(yīng)元素值2次方的矩陣,如圖7-19所示。圖7-19  矩陣的2次方  關(guān)系運(yùn)算符矩陣的關(guān)系運(yùn)算符及與VB對應(yīng)的運(yùn)算符如表7-3所示。表7-3  MatrixVB的關(guān)系運(yùn)算符函數(shù)及與VB相關(guān)運(yùn)算符的對應(yīng)關(guān)系Visual BasicMatrixVBMatrixVB運(yùn)算函數(shù)說明a<blt(a,b)a若小于b則結(jié)果為真否則為假a<=ble(a,b)a若小于等于b則結(jié)果為真否則為假a>bgt(a,b)a若大于b則結(jié)果為真否則為假a>=bge(a,b)a若大于等于b則結(jié)果為真否則為假a=beq(a,b)a若等于b則結(jié)果為真否則

39、為假a<>bne(a,b)a若不等于b則結(jié)果為真否則為假說明:a 和b可以都為VB所支持的整型、浮點(diǎn)型變量或者常量,此時(shí)與VB的運(yùn)算符所起的作用是一樣的,如:(1) 如果a,b都為VB所支持的類型,運(yùn)算的結(jié)果為MatrixVB標(biāo)量矩陣,其中的值為0或1,如:Dim x As integerDim y As integerx=1y=2C = ge(x, y)   C.show   結(jié)果如圖7-20所示。圖7-20  VB類型的比較運(yùn)算(2) a與b都為MatrixVB矩陣,此時(shí)二者的維數(shù),大小均要一致,所做的運(yùn)算為兩個(gè)矩陣對應(yīng)元素的運(yùn)

40、算,運(yùn)算結(jié)果為由1,0構(gòu)成的矩陣,如: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   結(jié)果如圖7-21所示。  圖7-21  矩陣的比較運(yùn)算(3) a與b中一個(gè)為matricVB矩陣,一個(gè)為VB中的數(shù)據(jù)類型(整型,浮點(diǎn)型)的標(biāo)量,所做的運(yùn)算為該標(biāo)量對矩陣每個(gè)元素的邏輯運(yùn)算,如:A = CreateMat

41、rix(1, 2, 3, 4, 5, 6, 7, 8, 9)A = reshape(A, 3, 3)B = ge(A, 5)B.Show運(yùn)算結(jié)果如圖7-22所示。圖7-22  矩陣與標(biāo)量的比較運(yùn)算  邏輯運(yùn)算符矩陣的邏輯運(yùn)算符及與VB對應(yīng)的運(yùn)算符如表7-4所示。表7-4  MatrixVB的邏輯運(yùn)算符函數(shù)及與VB相關(guān)運(yùn)算符的對應(yīng)關(guān)系Visual BasicMatrixVBMatrixVB運(yùn)算函數(shù)說明a  And  b     mand(a,b)a與b做與運(yùn)算a  Eqv  b

42、     mnot(mxor(a),b當(dāng)a與b同時(shí)為真或假時(shí)結(jié)果為真,否則為假a  Imp  b      mor(mnot(a),b)a為真b為假時(shí)結(jié)果為假,否則為真not a        mnot(a)a做非運(yùn)算a Or b     mor(a,b)a與b做或運(yùn)算a Xor bmxor(a,b)a與b做異或運(yùn)算有關(guān)矩陣邏輯運(yùn)算符的數(shù)

43、據(jù)類型說明與關(guān)系運(yùn)算符相同,所得到的結(jié)果值為由0,1構(gòu)成的矩陣或標(biāo)量。  一些常用的運(yùn)算函數(shù)在前幾節(jié)中我們介紹了矩陣的操作及與VB運(yùn)算符有對應(yīng)關(guān)系的運(yùn)算符函數(shù),其中包含了一些矩陣進(jìn)行運(yùn)算的函數(shù)。除此之外,MatrixVB還提供了大量運(yùn)算函數(shù),本節(jié)我們將介紹幾個(gè)常用的運(yùn)算符函數(shù),如表7-5所示。表7-5  MatrixVB的一些其他運(yùn)算符函數(shù)函  數(shù)  名函 數(shù) 說 明Colon(a,b,c) 產(chǎn)生一個(gè)從a到c步長為b的序列Primes(n)產(chǎn)生小于n的素?cái)?shù)序列Rand(n)產(chǎn)生一個(gè)個(gè)數(shù)為n的隨機(jī)序列Logspace(a,b,n)產(chǎn)生一個(gè)個(gè)數(shù)為n

44、的對數(shù)序列vbfilter(a,b,c)FIR濾波函數(shù),a,b為濾波器系數(shù)矩陣,c為一個(gè)數(shù)據(jù)向量fft(a)快速傅立葉變換,a為一個(gè)輸入序列Roots(a)用來求多項(xiàng)式的根,a為輸入的矩陣Mldivide(a,b)解線性方程組,a為系數(shù)矩陣,b為方程組等號右邊的向量Strcat(a,b)連接兩個(gè)矩陣       例:給定一個(gè)線性方程組:     代碼為:A = CreateMatrix(2, 11, 7, 3, -4, 5, 1, 8, -8)B = CreateMatrix(2, 6

45、, 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運(yùn)行的結(jié)果如圖7-23所示。圖7-23  求方程組的解最后一列為方程組的解向量。此外還有很多運(yùn)算函數(shù)請參考幫助文檔refguide.pdf,這里不一一介紹了。3.5  圖形圖像處理 MatrixVB組件包提供了一整套用于二維或三維作圖的函數(shù)、顏色處理函數(shù)、圖像處理函數(shù)、圖像句柄處理函數(shù)及用戶界面對話框等工具。mattrixVB同時(shí)支持在figuer窗口及VB窗口中繪制圖形與圖像處理。本節(jié)將介紹如何使用這些函數(shù)和工具來為VB程序創(chuàng)建和處理圖形。  在figure窗口中繪制圖形在MatrixVB組件包中包含了用于生成圓餅圖、直方圖、頻率圖、等高線圖、極坐標(biāo)圖和散點(diǎn)圖等函數(shù),可以基本滿足圖形繪制應(yīng)用需求,同時(shí)也提供了能讀取多種格式圖像的處理函數(shù)。借助這些函數(shù)及數(shù)學(xué)運(yùn)算函數(shù)、顏色處理函數(shù),可以方便地作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論