2009-08-29 105 views
13

什麼是計算的最佳工具(最有效率)在.NET(C#)可供選擇:複雜的計算

  • 積分
  • 偏導數
  • 其他非平凡的數學

請問人們可以對Mathematica和Matlab進行評論並將它們整合到C#

+1

數字或符號? – 2009-08-29 21:28:20

+0

爲了澄清你的最新編輯,你是否嘗試在C#中使用Mathematica和/或Matlab函數,或者你是否試圖從Mathematica或Matlab調用C#類? – las3rjock 2009-08-29 23:39:17

+0

應用程序是用C#編寫的 - 我需要從C#執行計算(調用外部函數) – mson 2009-08-30 00:00:47

回答

13

Math.NET是一個用C#編寫的用於Microsoft .NET平臺的數學開源工具包,旨在爲數值科學和符號代數計算提供一個自包含的清理框架。特別地,Math.NET NumericsdnAnalyticsMath.NET Iridium合併的結果,並且包括以下功能:

  • 實數和複數,密集和稀疏線性代數(與LUQReigenvalues,...分解)
  • 數字功能集成(正交)例程
  • 積分變換
+0

鏈接不工作:-) – 2009-08-29 21:55:09

+0

URL是錯誤的,應該是http://www.mathdotnet.com/ – 2009-08-29 21:56:32

0

你可能會看看http://www.dmoz.org/Science/Math/Software/ - 他們列出了幾個C#的。我會說幾個(演示版本如果是商業版本),並做一些分析,看看他們是否符合你的要求。您也可以使用MATLAB - 請參閱該條目的限制和備選部分。 (我對這些工具沒有親身經歷。)

1

我沒有與數學/ .NET橋的經驗,但我使用了Mathematica/Java橋,根據文檔判斷它非常相似。當然,我無法回答的一個問題是接口在穩定性和性能方面的好壞如何。

從概念上講,我發現調用Mathematica的Java接口非常好。您有一組對象和方法,可以讓您啓動Mathematica會話並將Mathematica表達式發送給他們進行評估。您可以發送文本(在簡單情況下很容易,但如果您想要一些不重要的東西,則很棘手),或者可以發送鏡像語法樹結構的更爲結構化的對象。這些表達式可以讓你做任何事情:以數字或符號方式評估積分,取出導數,求解ODE等等。

它掉落的一個區域處於錯誤處理狀態。 Mathematica本身沒有例外;相反,它會在遇到問題時產生「消息」,並繼續嘗試評估它正在處理的表達式。根據Mathematica相當不尋常的語義(它在重複規則重寫的表達式上操作),這是有道理的,但與Mathematica進行通信的默認方法不允許您輕鬆地從Java內部監視這些消息(或者,它出現,.NET),儘管可以編寫自己的方法來做得更好。

+0

Mathematica的MathLink.NET也是與複雜數字的鬥爭和Mathematica本身並不是特別擅長這類問題(例如,Mathematica的'傅里葉'比上一次看起來FFTW慢4倍,而Mathematica的多核支持太糟糕了。 – 2010-04-22 22:58:30

1

微軟Visual F#編程語言是專門爲這類工作的設計,所以你可能只是想調用一個現有的F#的解決方案來自您的C#代碼。例如,在Visual Studio 2010中我們安裝了F# for Numerics庫可以集成X -x-1從-3至3交互方式如下:

> Functional.integrate (fun [x] -> x**3.0 - x - 1.0) [-3.0, 3.0];; 
val it : float = -6.0 

,並計算與對於x該函數的偏導數x=2如下:

> Functional.d (fun x -> x**3.0 - x - 1.0) 2.0;; 
val it : float = 11.0 
0

如果你對.NET的附加產品MATLAB Builder,可以打包MATLAB代碼轉換成可從C#調用.NET程序集。