【问题标题】:Sympy Integration returns 1.0*Integral(..)Sympy 集成返回 1.0*Integral(..)
【发布时间】:2018-04-02 02:23:01
【问题描述】:

每当我尝试使用 Sympy 来集成我的函数时,它都不会评估它,而只是返回我的输入乘以 1.0。

这是我的代码:

import sympy as sp

a = sp.Symbol('a')

Ωm = 0.31
Ωr = 9*(10**(-5))
ΩΛ = 0.69
Ω0 = Ωm + Ωr + ΩΛ


I = sp.integrate(((Ωm*a**(-1)) + (Ωr*a**(-2)) + (ΩΛ*a**(2)) + (1-Ω0))**(-0.5),a)
print(I)

这是我得到的答案:

1.0*Integral((0.69*a**2 - 8.99999999999235e-5 + 0.31/a + 9.0e-5/a**2)**(-0.5), a)

我哪里错了?这是超出 Sympy 能力的一个整体吗?如果是这样,是否有人知道评估该积分的更好方法。顺便说一下,限制是 0 和 a。

【问题讨论】:

    标签: python integration sympy astronomy


    【解决方案1】:

    您的代码运行良好。积分的结果是非收敛积分。您可以使用以下代码以更漂亮的形式(jupyter)打印它

    import sympy as sp
    sp.init_printing(wrap_line=False, no_global=True)
    
    a = sp.Symbol('a')
    
    Ωm = 0.31
    Ωr = 9*(10**(-5))
    ΩΛ = 0.69
    Ω0 = Ωm + Ωr + ΩΛ
    
    
    I = sp.integrate(((Ωm*a**(-1)) + (Ωr*a**(-2)) + (ΩΛ*a**(2)) + (1-Ω0))**(-0.5),a)
    I
    

    结果

    【讨论】:

      【解决方案2】:

      我在wolfram alpha 上运行了积分,它说它没有收敛(计算需要一段时间,所以除非你有一个 wolfram 高级帐户,否则它可能无法完成):

      试试你知道收敛的积分。

      所以试试类似的东西

      import sympy as sp
      
      sp.init_printing(wrap_line=False, no_global=True)
      a = sp.Symbol('a')
      
      I = sp.integrate(a**3,a)
      

      你应该得到一个**4/4

      【讨论】:

        【解决方案3】:

        当 SymPy 返回一个未计算的整数时,这意味着它不知道如何计算它。

        在这种情况下,被积函数是一个代数函数,SymPy 通常很难对其进行积分。

        【讨论】:

          猜你喜欢
          • 2016-12-20
          • 1970-01-01
          • 1970-01-01
          • 2023-02-07
          • 1970-01-01
          • 2021-05-19
          • 2023-04-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多