亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于.NET的MATLAB與Visual Basic混合編程的研究

        2012-09-22 10:30:04覃釗
        城市勘測 2012年6期
        關(guān)鍵詞:窗體數(shù)組調(diào)用

        覃釗

        (河池市城市規(guī)劃測繪綜合技術(shù)服務(wù)中心,廣西河池 547000)

        1 前言

        在測繪等科學(xué)研究和工程計算領(lǐng)域經(jīng)常要運用到微分、線性代數(shù)等數(shù)學(xué)知識進行公式的推導(dǎo),運用到大量的矩陣運算,過去人們耗費大量的時間來進行公式推導(dǎo)和編寫數(shù)學(xué)計算函數(shù)。MATLAB的出現(xiàn)使公式的微分、線性化等工作可以用軟件來進行,也提供了一般的高級編程語言都沒有的強大矩陣計算、數(shù)值分析等功能,把人們從低級的算法程序編寫及公式推導(dǎo)中解放出來。本文將研究如何用Visual Basic通過.Net調(diào)用MATLAB函數(shù)來提高軟件編寫的效率。

        2 Visual Basic簡介

        Visual Basic是一種由微軟公司開發(fā)的包含協(xié)助開發(fā)環(huán)境的事件驅(qū)動編程語言。從任何標準來說,VB都是世界上使用人數(shù)最多的編程語言——不僅是盛贊VB的開發(fā)者還是抱怨VB的開發(fā)者的數(shù)量。它源自于BASIC編程語言。Visual Basic擁有圖形用戶界面(GUI)和快速應(yīng)用程序開發(fā)(RAD)系統(tǒng),可以輕易地使用DAO、RDO、ADO連接數(shù)據(jù)庫,或者輕松創(chuàng)建ActiveX控件。程序員即使是初學(xué)者都可以輕松使用Visual Basic提供的組件快速建立一個應(yīng)用程序,特別適合廣大工程技術(shù)人員用來開發(fā)本專業(yè)的應(yīng)用軟件。Visual Basic 2011是微軟公司推出的Visual Basic最新版本,其功能比以前任何版本都強大,可與C++等語言相媲美。

        3 MATLAB簡介

        MATLAB是由美國MathWorks公司發(fā)布的主要面對科學(xué)計算、可視化以及交互式程序設(shè)計的高科技計算環(huán)境。它將數(shù)值分析、矩陣計算、科學(xué)數(shù)據(jù)可視化以及非線性動態(tài)系統(tǒng)的建模和仿真等諸多強大功能集成在一個易于使用的視窗環(huán)境中,為科學(xué)研究、工程設(shè)計以及必須進行有效數(shù)值計算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案,并在很大程度上擺脫了傳統(tǒng)非交互式程序設(shè)計語言(如C、Fortran)的編輯模式,代表了當今國際科學(xué)計算軟件的先進水平。在MATLAB環(huán)境下,許多復(fù)雜的數(shù)學(xué)運算,如求矩陣的行列式值、求矩陣的逆及其特征值、求函數(shù)的微分、求函數(shù)的積分、進行多項式插值、解微分方程等,都有現(xiàn)成的函數(shù)可以調(diào)用。MATLAB的基本數(shù)據(jù)單位是矩陣,它的指令表達式與數(shù)學(xué)、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,F(xiàn)ORTRAN等語言完成相同的事情簡捷得多。但是,很多時候僅僅依靠MATLAB環(huán)境還是不能很好地完成工作,MATLAB和其他程序之間的數(shù)據(jù)交換就顯得十分必要。MATLAB程序接口的出現(xiàn),就解決了這些問題,通過接口與其他編程環(huán)境交互,各取所長,充分發(fā)揮 MATLAB計算的優(yōu)點。MATLAB從R2006a開始,就開始用.NET接口逐漸取代了.COM接口。

        4 .NET簡介

        .NET是微軟公司的一組軟件技術(shù),核心部分是.NET Framework,最新版本為4.0,它提供CLR(公共語言運行庫)對各種程序的支持,通常將在CLR的控制下運行的代碼,稱為托管代碼(managed code),使用.NET開發(fā)的程序需要在.NET Framework下才能運行。通過使用Visual Studio.NET開發(fā)工具,可以使用多種語言開發(fā),采用公共語言規(guī)范(CLS)后,編譯為中間語言,這種語言是專門針對公共語言的,和其他高級語言無關(guān),因此,高級語言可以在這個層面上實現(xiàn)融合和互通。MATLAB Builder NE就是將M文件編譯為位于Basic Class Library同一層,實現(xiàn)了程序的運行。

        5 Visual Basic調(diào)用MATLAB函數(shù)

        為了將MATLAB中的程序作為組件提供給其他.NET程序使用,需要做兩方面的工作:首先是在MATLAB環(huán)境中將M文件打包編譯為.NET程序集,其次在外部程序中添加對程序集的引用。

        5.1 M文件打包編譯.NET程序集

        在這里以一個平面坐標轉(zhuǎn)換四參數(shù)的計算為例子,四個參數(shù)分別是:平移參數(shù)x0,y0,旋轉(zhuǎn)參數(shù)θ,尺度參數(shù)m。

        四參數(shù)坐標轉(zhuǎn)換函數(shù)模型為:

        已知2個公共點(見表1):

        公共點坐標表 表1

        把2個公共點代入可得到4個方程,寫成矩陣形式:

        系數(shù)陣 A為4×4方陣,可以直接求逆,因此V=A-1F。

        V為各參數(shù)改正數(shù)矩陣,X為參數(shù)矩陣,X0為參數(shù)近似值矩陣。

        上述公式中需要運用到矩陣的乘法、逆運算、加法。為了在Visual Basic中能直接進行矩陣運算,需要把MATLAB中的3個矩陣運算函數(shù)打包發(fā)行為.NET程序集。

        在MATLAB環(huán)境下,把外部程序需要調(diào)用的函數(shù)保存為M文件,通過deploytool把數(shù)個M文件編譯為.NET程序集。

        (1)建立M文件

        點擊菜單File→New→Function M-File,建立新的函數(shù)型M文件,在編輯窗口出現(xiàn)下列函數(shù)原型:

        這個函數(shù)是用于返回m*n階的所有元素為0的矩陣。然后把這個函數(shù)保存為NewWmarray.m文件,MATLAB的默認文件名就是函數(shù)名.m。逆運算、加法、乘法的M文件以此依次建立,下面是各個函數(shù)的代碼:

        從這些函數(shù)我們可以看出,我們不需要知道這些矩陣運算是怎么進行的,也不需要寫太多的代碼就可以完成MATLAB的函數(shù)打包,省去了大量用于編寫函數(shù)的時間。

        (2)編譯.NET程序集

        ①新建工程項目

        在MATLAB命令窗口中輸入:

        在出現(xiàn)的Deployment Tool工具中選擇新建工程項目將出現(xiàn)圖1所示對話框。

        圖1 新建MATLAB.NET項目

        選擇 MATLAB Builder NE→.NET Component,設(shè)置好項目名稱、保存位置,在這里把項目名稱設(shè)置為MatrixNet,然后按確定。

        ②為項目添加M文件

        在Deployment Tool中把與項目名稱相同的類改名為Functions,并為該類添加我們事先準備好的M文件,如圖2所示。

        圖2 Deployment Tool界面

        M文件中的函數(shù)將作為Functions類的方法而存在。再點擊settings按鈕,在.NET選項里,把 Microsoft Framework設(shè)置為 default,Assmly Type設(shè)置為 private,如果開發(fā)的軟件需要通過網(wǎng)絡(luò)遠程連接的點選Enable.NET remoting,見圖3,最后按 OK。

        圖3 .NET設(shè)置界面

        ③編譯

        在Deployment Tool窗體中點擊Build the project按鈕進行編譯,編譯后的文件保存在項目目錄下的distrib子目錄中,共3個文件:項目名.dll(MATLABNet.dll),項目名 Native.dll(MATLABNetNative.dll),Readme.txt,若在圖 3 中勾選了 Enable .NET remoting了,還應(yīng)包括2個文件:I項目名.dll(IMATLABNet.dll),I項目名 Native.dll(IMATLABNetNative.dll)。

        ④打包與發(fā)布

        為了使編譯獲得的.NET程序集能在沒有安裝MATLAB軟件的計算機或服務(wù)器上運行,發(fā)布程序時需與MATLAB組件運行環(huán)境(MCR)一起打包,當然,如果已經(jīng)安裝有MCR的計算機或本地計算機可以直接復(fù)制使用。MCR全稱是 MATLAB Compiler Runtime,是一個由MATLAB共享類庫構(gòu)成的執(zhí)行引擎,它能夠使MATLAB文件在沒有安裝MATLAB的機器上運行。在MATLAB中輸入命令“mcr”或者“mcrinstaller”后獲得下面信息:

        第一行是說明當前MCR安裝程序為WIN64位,版本號為7.10,第二行為其保存路徑;第三、四、五行說明MCR其他平臺的安裝程序位置,可忽略;第六、七行為當前可用的MCR完整路徑。

        在Deployment Tool窗體中點擊 settings..按鈕,在出現(xiàn)的工程項目設(shè)置窗體中選擇Packaging選項,勾選Include MATLAB Compiler Runtime(MCR),然后依次設(shè)置當前MCR保存路徑、打包后的安裝文件名,見圖4,最后OK按鈕,回到Deployment Tool窗體后,點擊Package the project按鈕,完成MATLAB工程項目的打包工作。

        圖4 打包設(shè)置界面

        把打包獲得的安裝程序復(fù)制到目標計算機上運行,設(shè)置好安裝路徑并安裝,即可完成MATLAB.NET程序集的發(fā)布。

        5.2 Visual Basic調(diào)用MATLAB.NET程序集

        (1)建立工程項目

        啟動Micsoft Visual Studio后建立新建Visual Basic應(yīng)用程序窗體程序,把項目名稱改為平面坐標轉(zhuǎn)換。把Form1窗體設(shè)置成圖5形式。

        圖5 軟件運行界面

        (2)Visual Basic調(diào)用MATLAB程序集

        ①添加引用

        找到MCR安裝目錄和發(fā)布的程序集安裝目錄,分別添加引用 Mwarray.dll和 MatrixNet.dll,若是使用網(wǎng)絡(luò)連接的本地計算機,那么選擇IMwarray.dll和IMatrixNet.dll,另外還需要配置好服務(wù)器端,在這里就不加細述。

        ②導(dǎo)入命名空間

        為應(yīng)用程序添加一個模塊module1,并在該模塊的模塊代碼頭部添加下列代碼:

        ③MATLAB函數(shù)的調(diào)用

        MatrixNet即我們引用打包編譯的MatrixNet.dll后獲得的命名空間,前面提到過M文件里面的函數(shù)將作為Functions類的方法存在,我們需要定義一個新的Functions類并經(jīng)過初始化才能調(diào)用這些方法:

        ④Mwarray類型數(shù)組與MWNumericArray類型數(shù)組

        MathWorks.MATLAB.NET.Arrays命名空間提供從其他任何兼容CLS(Common Language Specification)語言訪問MATLAB中數(shù)組的功能,這些類支持數(shù)組格式化、類型的特定索引和錯誤處理的功能。MATLAB函數(shù)的輸入?yún)?shù)和返回值都是Mwarray型數(shù)組,但是Visual Basic并不能操作這種類型的數(shù)組,故MATLAB又定義了一些中間類型數(shù)組,其中MWNumericArray類型數(shù)組是數(shù)值型數(shù)組,可以在Visual Basic中進行數(shù)值運算操作。例如在平面坐標轉(zhuǎn)換參數(shù)計算的系數(shù)矩陣A,它是一個4×4維的方陣,如果直接定義為Mwarray型,我們在實際中很難對它的維數(shù)進行定義和更改,也無法轉(zhuǎn)換成雙精度類型進行計算,因此我們定義它為MWNumericArray,但是這個 MWNumericArray類型數(shù)組又不是MATLAB函數(shù)的標準數(shù)組,也無法操作它的維數(shù)和元素。因此我們還是需要定義一個Mwarray類型的數(shù)組c(),然后通過前面定義了一個返回m×n階的零矩陣的mwarray矩陣進行初始化:c=MatrixLib.NewWmarray(1,4,4),然后把這個數(shù)組克隆給 A,A=c(0).Clone,A就變成4×4的零矩陣,也可以被MATLAB的函數(shù)所接受,最后c()矩陣不需要了,我們要把他釋放掉以節(jié)約空間:c(0).Dispose()。強調(diào)一點,不能直接這樣寫A=c(0),否則就是把數(shù)組A的地址指向了數(shù)組c(0)的地址,假若同時初始化幾個同樣的數(shù)組,這些數(shù)組都會指向同一個地址,那么這些數(shù)組其實就是同一個數(shù)組,其中一個數(shù)組改變,那么其他數(shù)組都改變,要避免出現(xiàn)這種情況。具體代碼如下:

        這樣就可以完成一個4*4階的MWNumericArray矩陣的定義和初始化,且現(xiàn)在這個矩陣也能被MATLAB函數(shù)所接受。

        ⑤Form1窗體代碼

        程序運行結(jié)果如圖5所示。

        6 結(jié)語

        本文的編程環(huán)境為 Visual Studio 2010、MATLAB R2009a和.NET3.5,事實證明基于.NET的Visual Basic調(diào)用MATLAB函數(shù)脫離MATLAB運行環(huán)境的混合編程是可行的,在軟件開發(fā)中,開發(fā)人員不再需要耗費時間在編寫數(shù)值分析、矩陣計算、科學(xué)數(shù)據(jù)可視化等函數(shù)上,甚至也不需要了解很深的這方面的知識,把這一切都交給MATLAB去做,大大提高了程序編寫和科研學(xué)習(xí)的效率。由于本文主要研究如何進行混合編程,因此本文的坐標轉(zhuǎn)換參數(shù)的計算僅計算簡單的2個公共點的情況,若多于2個公共點,系數(shù)陣不能求逆,需要采用最小二乘法進行平差計算及殘差計算、剔除不合格公共點、精度評定等。另外MATLAB的符號運算能力也很強,在公式推導(dǎo)時可以加快推導(dǎo)速度,但是在這里由于篇幅有限就不多加敘述。

        [1]孔祥元,郭際明,劉宗泉.大地測量學(xué)基礎(chǔ)[M].武漢:武漢大學(xué)出版社,2001.

        [2]武漢測繪科技大學(xué)測量平差研究室.測量平差基礎(chǔ)[M].武漢:武漢大學(xué)出版社,1996.

        [3]楊永健.基于.NET平臺的MATLAB應(yīng)用程序集成研究[J].軟件導(dǎo)刊,2009.

        [4]董維國.深入淺出MATLAB7.X混合編程[M].北京:機械工業(yè)出版社,2005.

        [5]洪一新,吳燦銘.Visual Basic 2008程序設(shè)計完全自學(xué)教程[M].北京:清華大學(xué)出版社,2009.

        [6]馬莉.MATLAB語言實用教程[M].北京:清華大學(xué)出版社,2010.

        猜你喜歡
        窗體數(shù)組調(diào)用
        JAVA稀疏矩陣算法
        電腦報(2022年13期)2022-04-12 00:32:38
        JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
        電腦報(2020年24期)2020-07-15 06:12:41
        核電項目物項調(diào)用管理的應(yīng)用研究
        試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應(yīng)用
        檔案天地(2019年5期)2019-06-12 05:12:02
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        尋找勾股數(shù)組的歷程
        基于LayeredWindow的異形窗體局部刷新
        中文信息(2014年2期)2014-03-06 23:49:14
        巧設(shè)WPS窗體控件讓表格填寫更規(guī)范
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        亚洲最大av在线精品国产| 国产成人精品一区二区三区| 久久精品国产成人午夜福利| 国产成人自拍视频播放| 嫩呦国产一区二区三区av| 最新国产熟女资源自拍| 日韩精品成人区中文字幕| 欧美v国产v亚洲v日韩九九| 米奇7777狠狠狠狠视频影院| 人妻丰满熟妇av无码区hd | 久久黄色精品内射胖女人| av免费一区二区久久| 亚洲熟女一区二区三区250p | av永久天堂一区二区三区| 天天色影网| 人妻少妇不满足中文字幕| 中文字幕一区二区三区人妻精品 | 国产日韩欧美视频成人| 国产精品丝袜美女在线观看| 亚洲AV永久无码精品一区二国| 精品一区二区三区四区少妇 | 精品一区二区三区长筒靴| 手机在线观看成年人视频| 蜜桃成熟时日本一区二区| 国产激情久久久久久熟女老人| 国内最真实的xxxx人伦| 免费a级毛片无码av| 丝袜足控一区二区三区 | 亚洲综合精品中文字幕| 青青手机在线观看视频| 在线天堂www中文| 国产在线视频一区二区三区| 免费人成再在线观看网站| 无码天堂在线视频| 国产视频一区二区三区在线看 | 日本最新免费二区三区| 一个人看的视频www免费| 亚洲日韩精品欧美一区二区一| 极品美女扒开粉嫩小泬| 好看午夜一鲁一鲁一鲁| 女同重口味一区二区在线|