C#與Matlab混合編程的幾種方式

來源:互聯網
上載者:User

C#與Matlab混合編程的幾種方式

主要參考資料: 《Matlab C# Book》,我看的是第一版的電子書,網上可以搜到。

      說實話,我覺得C#與Matlab混合編程相比VC與Matlab混合編程沒有啥優勢,基本上還是通過P/V
Invoke操作Matlab mcc編譯器產生的C語言版本的DLL。此外,速度上也慢的嚇人-_-

     下面簡單寫寫C#與Matlab混合編程的4種方式(可能還不夠全,歡迎補充):

1. 通過從Matlab的*.m檔案中產生C語言版本的DLL

具體過程:

1)
在Matlab中寫好一個m檔案(比如一個簡單的加法函數myplus.m);

2) 使用Matlab的mbuild
-setup選擇編譯器,我機器上的編譯器有兩個LCC和VC2008(注意如果使用VS.net做應用的話,建議編譯器選VC2008,否則C#中會告訴你DLL找不到Entry
Point)

3) 在命令列中使用mcc -B csharedlib:mypluslib myplus.m
(如果是多個M檔案,接著往後寫),等待幾十秒之後會產生若干檔案(*.c, *.h, *.dll等), 其中.h檔案中有匯出的函數原型。

4) 建立C#工程,並將前面的dll拷貝到合適路徑,使用[ DllImport(
"mypluslib.dll ", CallingConvention = CallingConvention.Cdecl)]
將.h檔案中的函數使用C#的文法聲明。一般來說,這些函數中會有**Initialize,**Terminate和M檔案中定義的函數(**代表lib名稱)。

5) 使用CsharpMatlabCompilerVer4.cs將C#中的資料類型和Matlab中的矩陣等類型進行變換。該檔案定義了MatlabCSharp類,主要是匯入了libmx.dll中的一些函數,並封裝了一些實用的函數如double2mxArray_scalarReal等。

 

2. C#調用Matlab工作區計算並返回結果

主要使用engOpen, engClose, engPutVariable,
engEvalString, engGetVariable函數進行操作。

大致過程如下:

MatlabCSharp.engPutVariable(ep, "ml_a", mx_a);
MatlabCSharp.engPutVariable(ep, "ml_b", mx_b);
MatlabCSharp.engEvalString( ep, "ml_c = ml_a + ml_b ;" );
mx_c = MatlabCSharp.engGetVariable(ep, "ml_c" );

 

3. 使用Matlab DeployTool產生COM組件

注: 老版本的叫ComTool,現在叫做DeployTool。在Command
Window裡面直接輸入deploytool即可

1) 選擇New Deployment Project -> MATLAB
Builder NE -> Generic COM Component

2) 添加相應的M檔案

3) 儲存,編譯

4) 建立C#工程,添加Reference, Ok

 

4. 使用Matlab DeployTool產生.Net組件

1) 選擇New Deployment Project -> MATLAB
Builder NE -> .Net Component

2) 添加相應的M檔案

3) 儲存,編譯

4) 建立C#工程,由於經常要

using MathWorks.MATLAB.NET.Arrays;
using
MathWorks.MATLAB.NET.Utility;

因此需添加MWArray這個Reference,一般安裝玩MATLAB Builder
NE就有了,放在GAC當中的。

 

暫時就知道這麼多~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.