c#與matlab混合編程探索

轉自: 農夫漁夫

以下講述如何使用c#來調用matlab函數實現北斗定位算法的仿真

1.準備

首先需要matlab2010vs2010(其他版本是否可行,未知),另外需要安裝matlab的輔助工具MCRInstaller(該工具無需下載,在安裝好的matlab程序包中可以找到,例如:E:\matlab 2010\toolbox\compiler\deploy\win32

2.準備matlab程序

 

上述截圖是我的定位程序所涉及到的函數

3.matlab程序處理爲dll文件,供c#調用,處理的基本步驟如下:

1)打開matlab,選擇File->New->Deployment Project,按如圖填寫(其中前倆個空需要自己填寫對應自己的內容),其中Name相當於c#中的命名空間


2)點擊ok之後,出現如下的界面,在build中點擊Add class建立類,名稱爲demo(這裏的名字可以任意取,相當於c#中的類),點擊demo下的Add files選擇自己的matlab函數,完成之後,截圖如下:

 

3)完成上述操作之後,點擊右上角按鈕Build開始生成dll文件,這個過程需要幾分鐘,請耐心等待

然後會生成1個文件和一個文件夾,請將文件夾location(針對我自己的名稱)下的文件夾src中的location.dll拷貝出來

以上即完成了matlab的操作,接下來是c#的操作

4.c#語言編北斗定位界面如下:

 

接下來需要完成的步驟如下:

1)這裏最重要的是對按鈕開始計算代碼的編寫,代碼如下(下面會對代碼進行解釋):

 

location.demo output = new location.demo(); 
MWArray[] PO = output.main(3, year, month, day, hour, min1, sec,Xu,Yu,Zu); 
MWNumericArray po1 = (MWNumericArray)PO[0]; 
MWNumericArray po2 = (MWNumericArray)PO[1]; 
MWNumericArray po3 = (MWNumericArray)PO[2]; 
po1_d = (double)po1; 
po2_d = (double)po2; 
po3_d = (double)po3; 
textBox3.Text = po1_d.ToString();
textBox4.Text = po2_d.ToString();
textBox5.Text = po3_d.ToString();


下面按行號解釋:

1行實力化命名空間location.demo,注意這裏matlab函數所形成的命名空間不要與所編寫界面的命名空間相同,可能會出現意外的錯誤,稍加留意。

2行爲c#調用matlab函數進行求解的關鍵,其中main是我的定位程序的主函數,這裏曾遇到過許多爲題:

問題之一:MWMCR::EvaluateFunction error ... Error using ==> main Too many output arguments,這個原因是困擾我最大的一個問題,之前理解的是main後面的第一個參數爲輸入參數的個數,填寫的爲6一直出現上述錯誤,經查找發現這裏代表的意思爲輸出參數的個數,我的輸出參數有3個,故這裏應該填寫3,而不是6

3-5行爲將所求參數賦值給變量

6-8行爲對變量進行類型轉換

10-12行爲對數值進行顯示,顯示在相應的textbox

5.經上述所有的步驟之後即可運行程序,運行結果如下:

 

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章