【问题标题】:Complex Calculations in C#C# 中的复杂计算
【发布时间】:2009-08-29 21:24:05
【问题描述】:

.NET (C#) 中用于计算的最佳工具(最高效)有哪些:

  • 积分
  • 偏导数
  • 其他重要的数学运算

大家能否评论一下 Mathematica 和 Matlab 以及它们与 C# 的集成?

【问题讨论】:

  • 为了澄清您的最新编辑,您是尝试在 C# 中使用 Mathematica 和/或 Matlab 函数,还是尝试从 Mathematica 或 Matlab 调用 C# 类?
  • 应用程序是用 C# 编写的 - 我需要从 C# 执行计算(调用外部函数)

标签: c# math matlab wolfram-mathematica


【解决方案1】:

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

  • 实数和复数、稠密和稀疏线性代数(使用LUQReigenvalues、...分解)
  • 数值函数积分(正交)例程
  • 积分变换

【讨论】:

    【解决方案2】:

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

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

    也许对你有用。

    【讨论】:

      【解决方案3】:

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

      从概念上讲,我发现调用 Mathematica 的 Java 接口非常好。您有一组对象和方法,可让您启动 Mathematica 会话并将 Mathematica 表达式发送给它们以进行评估。您可以发送文本(这在简单的情况下很容易,但如果您想要一些不平凡的东西则很棘手)或更结构化的 Expr 对象,以反映语法树结构。这些表达式几乎可以让您做任何事情:以数值或符号方式计算积分、求导数、求解 ODE,等等。

      它失败的一个领域是错误处理。 Mathematica 本身没有例外。相反,当它遇到麻烦并继续尝试评估它正在处理的表达式时,它会产生“消息”。鉴于 Mathematica 相当不寻常的语义(它对具有重复规则重写的表达式进行操作),这是有道理的,但是与 Mathematica 通信的默认方法集不允许您轻松地从 Java 中监视这些消息(或者,看起来, .NET),尽管可以编写自己的方法来更好地完成此工作。

      【讨论】:

      • Mathematica 的 MathLink.NET 也与复数作斗争,而且 Mathematica 本身并不是特别擅长处理这类问题(例如,Mathematica 的 Fourier 比我上次查看的 FFTW 慢了大约 4 倍,而且 Mathematica 的多核支持是糟糕)。
      【解决方案4】:

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

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

      并计算该函数相对于xx=2 的偏导数,如下所示:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2021-02-08
              • 2011-10-16
              • 1970-01-01
              • 2018-10-11
              • 2017-11-04
              • 2012-12-31
              • 2019-03-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多