C#中的复杂计算

时间:2009-08-29 21:24:06

标签: c# math matlab wolfram-mathematica

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

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

有人可以评论Mathematica和Matlab以及它们与 C#的整合吗?

7 个答案:

答案 0 :(得分:13)

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

  • 真实而复杂,密集且稀疏的线性代数(LUQReigenvalues,...分解)
  • 数值函数积分(正交)例程
  • 整数转换

答案 1 :(得分:1)

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

您可以在此处找到它:http://code.msdn.microsoft.com/FinancialFunctions

也许它对你有用。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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处的x=2的偏导数,如下所示:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

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