2009-08-29 130 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程序集。