轉自: 農夫漁夫
以下講述如何使用c#來調用matlab函數實現北斗定位算法的仿真
3.matlab程序處理爲dll文件,供c#調用,處理的基本步驟如下:
(1)打開matlab,選擇File->New->Deployment Project,按如圖填寫(其中前倆個空需要自己填寫對應自己的內容),其中Name相當於c#中的命名空間
(3)完成上述操作之後,點擊右上角按鈕Build開始生成dll文件,這個過程需要幾分鐘,請耐心等待
然後會生成1個文件和一個文件夾,請將文件夾location(針對我自己的名稱)下的文件夾src中的location.dll拷貝出來
(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.經上述所有的步驟之後即可運行程序,運行結果如下: