SymPy 与假设的集成

SymPy integration with assumptions

基本上我正在尝试 运行 以下代码。

import sympy as sp

alpha = sp.Symbol(r'\alpha')
x = sp.Symbol('x')
sp.Q.is_true(alpha != -1)

sp.integrate(x**alpha, x)

这导致以下 Piecewise 函数。

因为我指定了 alpha != -1 的全局假设,所以我希望它只会给我第一个表达式。所以我有两个问题:

  1. 您如何正确定义假设,以便 sp.integrate 不会忽略它们;
  2. 有没有办法从 Piecewise 函数访问(提取)第一个(或第二个)表达式?

提前致谢!

PS。由于某种原因,仅在 sp.integrate 中定义 conds='separate' 第一个表达式 returns 。因此,如果我需要分段函数的第二部分,我将无法获得它。

PPS。如果这很重要,我有 python 3.8.0sympy 1.4.

无法为符号提供特定值作为假设,因此无法在集成中使用它。您可以做的最好的事情就是指定正数、负数等……但是至于从 Piecewise 中提取所需的表达式,您可以将其作为特定参数获取,或者为 x 提供一个虚拟值来提取它。像下面这样:

>> from sympy.abc import x
>> from sympy import Piecewise, Dummy
>> eq = Piecewise((x + 1, x < 0), (1/x, True))
>> eq.args[0]
(x + 1, x < 0)
>> _.args[0]
x + 1
>> d = Dummy(negative=True)
>> eq.subs(x, d)
d + 1
>> _.subs(d, x)
x + 1