Python 不求值的辛积分
我不能用辛解这个不定积分。我检查了一下,结果很明显是一致的Python 不求值的辛积分,python,sympy,Python,Sympy,我不能用辛解这个不定积分。我检查了一下,结果很明显是一致的 import sympy as sp a, b, C = sp.symbols("a, b, C", real=True) E = sp.symbols("E", real=True, positive=True) chi = C * sp.exp(-a * E) * sp.sinh(sp.sqrt(b * E)) sp.integrate(chi, E) 我试图用指数函数重写表达式,但没有成功: sp.integrate(chi.r
import sympy as sp
a, b, C = sp.symbols("a, b, C", real=True)
E = sp.symbols("E", real=True, positive=True)
chi = C * sp.exp(-a * E) * sp.sinh(sp.sqrt(b * E))
sp.integrate(chi, E)
我试图用指数函数重写表达式,但没有成功:
sp.integrate(chi.rewrite(sp.exp).expand().powsimp(), E)
我还尝试指定不同的算法,即meijerg=True,而不是risch=True。。。没用
有没有可能用Sympy来解决这个问题?什么可能导致这种行为?如果
integrate
返回一个未计算的积分,这意味着没有任何算法知道如何计算该积分。将各种选项设置为True没有任何作用,因为默认情况下,它们都会被尝试(只有在您想尝试特定算法时,它们才会出现)
如果您将双曲正弦重写为指数(
rewrite(exp)
),执行替换sqrt(E)=x
(SymPy可以使用Integral.transform(sqrt(E),x)
)为您完成此操作,您可能会得到SymPy可以积分的东西,然后完成指数中的平方。感谢@asmurer建议使用方法transform()
。我试图编辑他的答案,以包括解决方案的代码,不幸的是,它被拒绝了
对守则:
# added positive=True, necessary to solve this integral
a = sp.symbols("a", real=True, positive=True)
b, C = sp.symbols("b, C", real=True)
E = sp.symbols("E", real=True, positive=True)
chi = C * sp.exp(-a * E) * sp.sinh(sp.sqrt(b * E))
f = chi.rewrite(sp.exp).expand().powsimp()
x = sp.symbols("x", real=True, positive=True)
r = f.func(*[sp.Integral(a, E).transform(sp.sqrt(E), x).doit() for a in f.args])
r = r.subs(x, sp.sqrt(E))
请注意,我可以使用sp.Integral(f,E).transform(sp.sqrt(E),x).doit()
,但至少需要几分钟的计算时间
通过使用积分的线性特性,我使用命令
r=f.func(…)
将积分应用于表达式的不同项。计算时间减少到几秒钟 没有一个计算机代数系统能解所有可以表示为闭式的不定积分。有时,社科院所做的隐含假设也有所不同。在任何情况下,Symphy都不能解Wolfram Alpha可以解的积分,或者反之亦然,这并不意外。