Python:使用 Sympy 积分函数

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

我有一个函数想要使用 Sympy 库进行符号集成。我按照网站中概述的步骤进行操作:https://docs.sympy.org/latest/modules/integrals/integrals.html

但是,当我尝试积分时,我只是以符号形式返回积分:Sympy 积分函数似乎根本没有积分。

我不确定我的代码有什么问题:

s = Symbol('s')
s0 = Symbol('s0')
k = Symbol('k')
u = Symbol('u')
E = Symbol('E')
init_printing(use_unicode=False, wrap_line=False)

func = (np.pi - 2)*s/s0*(1/((1/s0**2)*(1 - k*u/E - s**2*u**2))**0.5)

integrate(func,(u,0,1/a))

我相信我正确地遵循了所有内容,但在集成简单功能时,我没有得到应该像网站中那样显示的输出。想知道是否有人可以帮助我解决这个问题。

python sympy integrate
1个回答
0
投票

在 SymPy 领域时,使用 SymPy。就像 @kikon 所说,除了 SymPy 提供的 pi 之外,无需使用 pi。由于您要除以

s0
a
,因此最好告诉 SymPy 您知道它们不为零。以下对我有用:

from sympy import symbols, integrate
s, k, u, E = Symbol('s k u E')
a,s0 = symbols('a s0', nonzero=True)
func = (pi - 2)*s/s0*(1/((1/s0**2)*(1 - k*u/E - s**2*u**2))**0.5)
integrate(func,(u,0,1/a))

Piecewise((-s*(-2 + pi)*log(2*sqrt(-s**2) - k/E)/sqrt(-s**2) + s*(-2 + pi)*log(2*sqrt(-s**2)*sqrt(1 - s**2/a**2 - k/(E*a)) - 2*s**2/a - k/E)/sqrt(-s**2), s0 >= 0), (-s*(-s0)**1.0*(-2 + pi)*log(2*sqrt(-s**2) - k/E)/(s0*sqrt(-s**2)) + s*(-s0)**1.0*(-2 + pi)*log(2*sqrt(-s**2)*sqrt(1 - s**2/a**2 - k/(E*a)) - 2*s**2/a - k/E)/(s0*sqrt(-s**2)), True))

如果您使用

sqrt
而不是
**0.5
,您将得到不同的形式:

>>> from sympy import nsimplify
>>> integrate(nsimplify(func), (u,0,1/a))
Piecewise((-s*(-2 + pi)*log(2*sqrt(-s**2) - k/E)/sqrt(-s**2) + s*(-2 + pi)*log(2*sqrt(-s**2)*sqrt(1 - s**2/a**2 - k/(E*a)) - 2*s**2/a - k/E)/sqrt(-s**2), ((s0 >= 0) & Ne(s**2, 0)) | ((s0 >= 0) & Ne(s**2, 0) & Ne(k/E, 0))), (-2*E*s*(-2 + pi)*sqrt(1 - k/(E*a))/k + 2*E*s*(-2 + pi)/k, (s0 >= 0) & Ne(k/E, 0)), (s*(-2 + pi)/a, s0 >= 0), (s*(-2 + pi)*log(2*sqrt(-s**2) - k/E)/sqrt(-s**2) - s*(-2 + pi)*log(2*sqrt(-s**2)*sqrt(1 - s**2/a**2 - k/(E*a)) - 2*s**2/a - k/E)/sqrt(-s**2), ((s > -oo) & (s < oo) & Ne(s, 0)) | (Ne(s**2, 0) & Ne(k/E, 0))), (2*E*s*(-2 + pi)*sqrt(1 - k/(E*a))/k - 2*E*s*(-2 + pi)/k, Ne(k/E, 0)), (-s*(-2 + pi)/a, True))
© www.soinside.com 2019 - 2024. All rights reserved.