Sympy 积分返回 1.0*Integral(..)

问题描述 投票:0回答:3

每当我尝试使用 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 sympy numerical-integration astronomy
3个回答
1
投票

当 SymPy 返回未计算的积分时,意味着它不知道如何计算它。

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


-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

结果


-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)

你应该得到**4/4

© www.soinside.com 2019 - 2024. All rights reserved.