使用scipy和sympy进行Python集成

时间:2018-04-26 07:27:53

标签: python scipy sympy symbolic-math numerical-integration

我想要一个自定义的python函数:

  1. 采用数学表达式f(x),积分x1,x2和期望容差的范围tol
  2. 使用sympy.integrate(y, x)检查是否有解析/符号解决方案,如果有,则使用sympy.integrate(y, (x,x1,x2).evalf())
  3. 返回结果
  4. 如果它没有sympy之外的分析解决方案,那么它会使用scipy.integrate.quadother numerical functions来计算积分。
  5. 原因在于,使用这种方法,它可能更快,更准确,因为我使用的大多数数学表达式都具有分析积分。

    但我有一些问题

    • 首先是scipy.integrate.quadsympy.integrate两种截然不同的功能形式。 scipy采用python def y(x): return f(x)或lambda y=lambda x: f(x)函数。但同情采用mathematica表达式y=f(x),其中x已由sympy.Symbol('x')表示。我需要找到一种方法将一个同情符号数学表达式转换为python / lambda函数,反之亦然。
    • 我的第二个问题是,当表达式没有分析积分时,sympy不会给出任何错误。它只是打印积分! (对于这个问题,我发布了一个不同的问题here
    • 最后一个我不知道如何控制同情evalf()中的容忍度。我认为scipy.integrate.quad可以通过epsabs输入来控制容差吗?

    如果您能告诉我是否可行以及如何做,我将不胜感激。

0 个答案:

没有答案