2017-10-20 146 views
1

每当我尝试使用Sympy来整合我的函数时,它不评估它,只是简单地返回我的输入乘以1.0。Sympy集成返回1.0 * Integral(..)

这里是我的代码:

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和顺便说一下。

回答

-1

您的代码正常工作。积分的结果是非收敛积分。你可以在更美观的形式与下面的代码

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 

结果

打印(在jupyterenter image description here

-1

我跑了整体上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) 

你应该得到一个**四分之四

1

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

在这种情况下,被积函数是一个代数函数,SymPy经常在整合时遇到困难。