C#中的复杂计算

.NET(C#)中用于计算的最佳工具(效率最高)是什么:

  • 积分
  • 偏导数
  • 其他非平凡的数学

人们可以评论Mathematica和Matlab以及它们与C#的集成吗?

Math.NET是一个用C#编写的Microsoft .NET平台的数学开源工具包,旨在为数值科学和符号代数计算提供一个独立的清晰框架。 特别是, Math.NET Numerics是dnAnalytics与Math.NET Iridium合并的结果,包括以下function:

  • 实数和复数,密集和稀疏线性代数(具有LU , QR , 特征值 ,…分解)
  • 数值函数积分(正交)例程
  • 积分变换

我不能保证它是最好的或更有效的,但几天前我了解到Luca Bolognese已经为.NET开发了一个财务函数库。

你可以在这里找到它: http : //code.msdn.microsoft.com/FinancialFunctions

也许这对你有用。

我没有使用Mathematica / .NET桥的经验,但我使用了Mathematica / Java桥,从文档来看,它非常相似。 当然,我无法回答的一个问题是界面在稳定性和性能方面的实施有多好。

从概念上讲,我发现调用Mathematica的Java接口非常好。 您有一组对象和方法,可以让您启动Mathematica会话并将Mathematica表达式发送给它们进行评估。 您可以发送文本(在简单的情况下很容易,但如果您想要一些非常重要的事情则很棘手)或者更多结构化的Expr对象,它们反映了语法树结构。 这些表达式允许您执行任何操作:以数字或符号方式评估积分,获取导数,解决ODE等。

它倒下的一个区域是error handling。 Mathematica本身没有例外; 相反,它会在遇到麻烦时产生“消息”并继续尝试评估它正在处理的表达式。 根据Mathematica相当不寻常的语义(它在具有重复规则重写的表达式上操作),这有一定意义,但是与Mathematica通信的默认方法集不允许您从Java中轻松监视这些消息(或者,它出现,.NET),尽管可以编写自己的方法来更好地完成这项工作。

Microsoft的Visual F#编程语言专门为此类工作而设计,因此您可能只想从C#代码中调用现有的F#解决方案。 例如,在安装了我们的F#for Numerics库的Visual Studio 2010中,您可以交互式地将x 3 -x-1从-3到3集成,如下所示:

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

并计算该函数关于x=2处的x=2的偏导数,如下所示:

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

您可以查看http://www.dmoz.org/Science/Math/Software/ – 它们列出了几个C#。 我会说尝试一些(如果是商业版的演示版)并做一些分析,看看它们是否符合你的要求。 您也可以使用MATLAB – 请参阅该条目的限制和替代部分。 (我对这些工具没有个人经验。)

看看f# http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/

它将成为Visual Studio 2010的一部分。

如果您有一个附加产品MATLAB Builder for .NET,您可以将MATLAB代码打包到可以从C#调用的.NET程序集中。