2010-12-22 104 views
6

我想從mathematica中調用一個matlab函數。如何最好地做到這一點?如何從mathematica調用matlab函數?

我發現一個ancient post on Wolfram site描述了一種方法來做到這一點,這仍然是連接兩者的方式?

+0

+1我很想知道如何做到這一點,在Matlab中有些事情更容易,Mathematica中的一些事情更容易! – mor22 2010-12-22 16:16:50

+0

約翰,你有沒有嘗試我在2013年5月發佈的其他答案? – Szabolcs 2014-06-14 14:15:21

回答

2

您可以使用mEngine。預編譯的Windows MathLink可執行文件適用於Mathematica 8.在Windows上,您可能需要add MATLAB to the system path

與NETLink方法相比,其優點是在Mathematica和MATLAB之間傳輸變量將如mGet["x"]mPut["x"]一樣簡單。雖然這也可能與NETLink一樣,但是mEngine的優勢在於你不需要自己實現它(如果像我一樣,你對COM或.NET一無所知,它是非常棒的)

1

我會想象這是一個普遍的難題,但可以通過針對特定情況的小編程輕鬆解決。我將用C#演示。

我會建立一個調用串,像這樣。

  • Mathematica調用C#程序,通過MathLink。這對於設置來說幾乎是微不足道的,Mathematica在Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink目錄中有一個示例項目。
  • C#程序調用Matlab。有幾種方法可以進行此調用,並且this handy link介紹瞭如何執行此操作並提供示例代碼。
  • C#程序返回Matlab結果。

總而言之,我可以在少於50行的C#代碼中完成這個工作,以解決特定的問題。換句話說,沒有太多的工作。可能存在的問題是數據轉換,但是如果您想發送來回數組數據,MathLink提供了很多開箱即用的功能。同樣,Mathematica可以通過Java連接到MATLAB,儘管我自己並沒有這樣做。

也許最簡單的連接可以通過Python進行。 Mathematica提供了一個可安裝的python庫,位於Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink,並且Matlab有一個名爲PyMat的插件庫,可以下載here,但是這個軟件包並沒有被長期保存時間和支持只有最古老的Matlabs。

或者,你可以放棄Matlab完全贊成SAGE和/或numpy。

6

您可以嘗試NETLink這至少在Windows下:

In[1]:= Needs["NETLink`"] 
matlab = CreateCOMObject["matlab.application"] 

Out[2]= «NETObject[COMInterface[MLApp.DIMLApp]]» 

然後你就可以調用Matlab的功能:

In[4]:= [email protected]["version"] 

Out[4]= " 
ans = 

7.9.0.529 (R2009b) 

" 

In[5]:= [email protected]["a=2"] 

[email protected]["a*2"] 

Out[5]= " 
a = 

    2 

" 

Out[6]= " 
ans = 

    4 

" 

HTH

0

現在有了一個新的包---這個--- MATLink。這是我知道的最完整的這種包。 (免責聲明:我是MATLink的開發人員之一。)

MATLink讓您...

  • 無縫調用MATLAB函數形成兩個系統

大多數MATLAB數據類型的支持,包括數學之間

  • 傳輸數據稀疏數組,結構體和單元格。

    更完整的說明可用here。有關詳細示例,請參閱website