資源描述:
《c#調用matlab函數(shù)(混合編程)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、第2部分實戰(zhàn)練習(自己做的)2.1c#調用matlab函數(shù)matlab版本2009b,c#版本vs2008.2.1.1matlab函數(shù)編譯成dll文件(1)首先編寫一個函數(shù)的m文件,如MatrixOpera表示兩個矩陣相加和相減。%--------------------------------------------------------function[addRlt,minusRlt]=MatrixOpera(a,b)%矩陣相加,相減[m1,n1]=size(a);[m2,n2]=size(b);ifm1~=m2
2、
3、
4、n1~=n2display('矩陣大小不相同')error('參數(shù)錯誤');endaddRlt=a+b;minusRlt=a-b;end%-----------------------------------------------------------兩個輸入?yún)?shù),兩個輸出參數(shù),并且都是矩陣形式(2)在matlab命令窗口輸入deploytool,彈出如下窗口或者點擊matlab的主菜單desktop→deploytool獲得如下面圖所示的窗口,然后在file→new→deploymentproject中點擊。獲得上圖
5、窗口,修改工程名稱和文件后綴名(必須是,.NetAssembly格式)修改(3)新建了一個叫matPrj的工程(它相當于c#中的命名空間namespace);然后給它增加class或類(它就是c#中的類),點[addclass]比如myMathClass;之后再給它添加方法(它就是函數(shù)了),點[addfiles],如下圖所示。本實例中給它添加了MatrixOpera等函數(shù)。方法class(4)完了之后就可以編譯了。編譯出來后需要一兩分鐘的時間。編譯(5)找到該工程存放的文件夾,從里面拷出matPrj.dll文件。同時還要從
6、G:ProgramFilesMATLABR2009btoolboxdotnetbuilderbinwin32v2.0拷貝出MWArray.dll和ManagedCPPAPI.netmodule。第二個文件必須要哦,否則可能會出錯。2.1.2c#添加matlab的dll引用(1)打開vs2008,新建一個窗體應用程序。(2)將剛才拷貝到的那3個文件一起放在vs工程(CallMatlabDllApp)的debug文件夾下面。然后右鍵下圖中的引用,選擇添加引用,彈出一個窗口,選擇其中的瀏覽頁面,分別添加matPr
7、j.dll文件和MWArray.dll文件。已經(jīng)添加了的引用右鍵,點添加引用(3)最后在前面,代碼的前面添加下面的命名空間即可。usingMathWorks.MATLAB.NET.Arrays;//在MWArray.dll,最常用的usingMathWorks.MATLAB.NET.Utility;//在MWArray.dll,最常用的usingmatPrj;//這個就是我們自己定義的,里面有matlab函數(shù)如果matlab函數(shù)復雜,還需要用到其他的空間,則視情況而定,自己憑經(jīng)驗添加。已經(jīng)添加了的引用至此,已經(jīng)可以利用c#
8、調用我們用matlab編寫的函數(shù)了。2.1.3函數(shù)調用函數(shù)調用前必須注意:(1)將c#的參數(shù)輸入到matlab函數(shù)時,要將參數(shù)轉化為matlab的參數(shù)形式,通常是MWArray類型。(2)matlab返回的參數(shù),也要轉化為c#用的類型,比如數(shù)組或者數(shù)值類型。下面是關于(1)和(2)的介紹,從別人那拷過來的,具體可參考http://apps.hi.baidu.com/share/detail/294982直接將值傳遞給已經(jīng)初始化的MWArray數(shù)組中的成員直接將數(shù)據(jù)類型賦值給已經(jīng)初始化的MWNumericArray變量。直接
9、將字符串類賦值給已經(jīng)初始化的MWCharArray變量。如果是數(shù)組類型:直接賦值給MWNumericArray變量;賦值給MWArray變量,則在前面加上類型轉換如:(MWNumericArray)進行強制轉換??傊琈WArray是總類型,其它的以MW開頭,以Array結尾的變量類型都可以直接對它進行賦值或取值。M類型到C++/C#數(shù)據(jù)類型MWArrayM類型,它是M文件的編譯后內(nèi)部的標準類型,一切C++/C#類型都要最終轉換成此類型,方可作為參數(shù)調用M語言函數(shù)。MWCharArrayM的字符串類型,使用它可以將M中的字
10、符類型轉換成C++/C#的字符串類型。MWNumericArrayMWNumericArray是MWArray與C#等語言的轉換中間類型。常用的轉換函數(shù):① publicArrayToArray(MWArrayComponentcomponent);將M類型轉換成C#的Array類型,然后可以直接轉換成