日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

vb调用matlab工具箱,Matlab与VB集成 - 关于VB的经验之谈 - VB爱好者乐园(VBGood) - 关于VB的经验,电子教程,代码,控件,论坛,博客,微博等....

發布時間:2025/3/19 循环神经网络 38 豆豆

工業生產中經常遇到復雜的數據信息處理問題,需要大運算量的矩陣計算及對分析結果進行實時、直觀的圖形化顯示。Matlab是集數值分析、矩陣運算、信號處理和圖形顯示于一體的高性能數學軟件,將其強大的計算功能與VB在圖形用戶界面開發方面的優勢結合起來,實現應用系統的無縫集成,對于有效縮短開發周期、優化系統性能是十分有意義的。下面將分別討論Matlab與VB集成的四種方法。

一、借助 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方法類似。

示例代碼如下:

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)

’將結果分別存入實部、虛部數組

二、借助DDE技術

DDE(Dynamic Data Exchange)允許Microsoft Windows應用程序通過交換數據實現彼此間的通信。應用程序間彼此通信要先建立一個DDE會話,對會話進行初始化的應用程序稱為客戶端(Client),對Client端作出響應的應用程序稱為服務器(Server)。圖1描述了Matlab作為服務器時與其他應用程序的通信機制。

圖1 借助DDE時應用程序通信機制

圖1 借助DDE時應用程序通信機制

其中,DDE功能函數既可以由應用程序提供,也可以由Matlab引擎庫提供。

初始化會話時,客戶端應用程序必須指定兩個參數service name(服務器應用程序的名稱)和topic(會話主題)。

下面的示例說明了VB與Matlab建立并完成DDE會話的全過程:

說明: TextInput是輸入文本框,TextOutput是輸出文本框。在TextInput中輸入Matlab命令回車后,由Matlab在后臺執行并將結果返回給TextOutput顯示。

Sub TextInput_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn then

’初始化TextInput與Matlab間的DDE會話

TextInput.LinkMode = vbLinkNone

TextInput.LinkTopic = “MATLAB|Engine”

TextInput.LinkItem =“EngEvalString”

TextInput.LinkMode = vbLinkManual

szCommand = TextInput.Text

’執行Matlab命令

TextInput.LinkExecute szCommand

TextInput.LinkMode = vbLinkNone

’初始化TextOutput與Matlab間的DDE會話

TextOutput.LinkMode = vbLinkNone

TextOutput.LinkTopic = “MATLAB|Engine”

TextOutput.LinkItem =“EngStringResult”

TextOutput.LinkMode = vbLinkManual

’返回執行結果并顯示

TextOutput.LinkRequest

TextOutput.LinkMode = vbLinkNone

End If

End Sub

三、通過M文件

Matlab產生的M文件不能直接在VB中調用,可利用mcc將M文件直接編譯成.EXE文件,然后在VB中聲明下面三個API函數,最后使用Shell命令即可實現VB與Matlab的無縫集成。

1. 用mcc生成獨立的外部應用程序。可使用如下兩種命令:

mcc -p file.m 或 mcc -m file.m

2. 在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 Long

3. 示例代碼:

Dim lTask As Long, lret As Long, lHandle As Long

’執行file.exe文件

lTask = Shell(“file.exe”, vbNormalFocus)

lHandle = OpenProcess(SYNCHRONIZE, False, lTask)

’等待進程執行完畢

lret = WaitForSingleObject(lHandle, INFINITE)

lret = CloseHandle(lHandle)

’ file.exe文件執行完畢后,繼續執行應用程序

……

通過以上編碼,應用程序可以在執行過程中調用.EXE完成特定的計算或圖形功能后,再繼續其執行過程,從而實現與Matlab的集成。

四、引入MatrixVB

MatrixVB是MathWorks針對VB提供的一個Matlab庫,它提供了600多個函數,包括基本的數學運算和功能強大的信號處理、線性代數、串運算及圖形圖像處理功能等,為VB提供了強大的功能擴展。在VB中使用該數學工具包可避免重復性勞動,從而減少開發人員實現算法和界面設計的困難。

MatrixVB是一個獨立的產品(可以從www.mathworks.com得到),其使用十分方便。MatrixVB安裝完成后,只需在VB工程中引用Mmatrix即可。

示例代碼如下:

說明: 工業生產中經常需要對采集到的原始信號進行分析,并對分析結果進行實時的圖形化顯示,下面通過在VB中引用Mmatrix來實現這一功能。代碼如下:

Dim ax as Variant ’聲明坐標軸

Private Sub Form_Resize()

vbrefresh ax ’刷新坐標軸

End Sub

Private Sub Form_Load()

ax = vbaxes(Form1.hWnd)

’將坐標軸置于窗體

Call Form_Resize

End Sub

Private Sub Command1-Click()

Dim I,C As Matrix ’聲明向量

Dim m As Integer

’從數據庫中取原始信號存入一維向量I,取其對應的碳含量存入一維向量C

’m為向量I、C的元素個數

Call Icheck ( I , C , m )

’調用校正函數

End Sub

Private Sub Icheck (I As Variant, C As Variant, ByVal m As Integer)

Dim II,CC,Z As Matrix

Dim a0,a1,a2 As Double

II = zeros(m,1)

CC = zeros(m,1)

II(colon(1,m)) = I(colon(1,m))

CC(colon(1,m)) =C(colon(1,m))

’多項式擬和求解

Z = polyfit ( II, CC, 2 )

’2 說明用二項式擬和

a0= Z.r1(1) ’a0為二次項系數

a1= Z.r1(2) ’a1為一次項系數

a2= Z.r1(3) ’a2為0次項系數

Clear axes ’清除坐標軸

T = Sort ( II )

’對原始信號排序,以確定作圖區間

J = Linspace (T(1).r1(1),T(1).r(m),20)

’橫坐標向量

Cuv = plus (plus (times (a0,times (X,X) ),

times (a1,X) ),a2) ’縱坐標向量

Tmp = plot (J,Cuv) ’繪制曲線

Hold (“on”)

Tmp = plot (II, CC,“r.”) ’繪制點

Hold (“off”)

End Sub

執行以上代碼,結果如圖2所示:

總 結

以上幾種方法對于Matlab與VB的集成都是行之有效的,但在實際應用中究竟采用哪一種方式應視具體情況而定。前兩種方式比較適合Client/Server模式,后兩種方式則應視應用系統的具體要求來做選擇,相比較而言,借助M文件在執行效率上略高一籌,而引入MatrixVB在使用上更為方便。總而言之,Matlab與VB集成可大大提高開發效率,對于解決工程問題是十分有意義的。

總結

以上是生活随笔為你收集整理的vb调用matlab工具箱,Matlab与VB集成 - 关于VB的经验之谈 - VB爱好者乐园(VBGood) - 关于VB的经验,电子教程,代码,控件,论坛,博客,微博等....的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。