C++ 中的 Mathematica NIntegrate 函数

计算科学 C++ 积分方程 数学
2021-12-02 21:53:17

我正在计算一个具有挑战性的积分。我正在与其他人合作,他在 Mathematica 中编写了一些代码来计算它。我没有mathematica,所以我试图在C++ 中做同样的事情。问题是,他使用 Mathematica 的NIntegrate 函数,我不知道如何重写。

如何用 C++(或任何其他语言)重写这个函数?

谢谢。 如果您投反对票,请告诉我原因,以便我改进这个问题。

1个回答

首先,不可能完全重写NIntegrate,因为通常它象征性地评估(部分)被积函数以检查某些属性。这意味着,您可能必须完全重新实现Mathematica

尽管如此,如果您正在处理一个特定的积分,我认为您很有可能通过在 C++ 中重新实现某些部分或使用库来获得类似的数值结果。

我将首先分析(在Mathematica中)您的积分使用什么算法。在本教程中,您可以找到有关MathematicaNIntegrate在使用时如何选择算法的详细信息Method->Automatic

在此之后,您应该仔细研究帮助页面NIntegrate了解其工作原理。然后你应该继续

  • 修复Method选项NIntegrate
  • 用于EvaluationMonitor查看被积函数的采样位置
  • 使用特定MaxPoints的 , MaxRecursion, 等设置

直到你最终得到同样好的结果。如果您已经实现了这一点,那么您就知道必须在 C++ 库中实现或找到什么算法。


让我说还有另一种方法:了解您要解决的积分!作为人类,你应该看看你有什么类型的被积函数,你可以查看文献,这些类型是如何用数值求解的。这可能比试图理解Mathematica的功能要快。