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
的全局假设,所以我希望它只会给我第一个表达式。所以我有两个问题:
- 您如何正确定义假设,以便
sp.integrate
不会忽略它们;
- 有没有办法从
Piecewise
函数访问(提取)第一个(或第二个)表达式?
提前致谢!
PS。由于某种原因,仅在 sp.integrate
中定义 conds='separate'
第一个表达式 returns 。因此,如果我需要分段函数的第二部分,我将无法获得它。
PPS。如果这很重要,我有 python 3.8.0
和 sympy 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
基本上我正在尝试 运行 以下代码。
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
的全局假设,所以我希望它只会给我第一个表达式。所以我有两个问题:
- 您如何正确定义假设,以便
sp.integrate
不会忽略它们; - 有没有办法从
Piecewise
函数访问(提取)第一个(或第二个)表达式?
提前致谢!
PS。由于某种原因,仅在 sp.integrate
中定义 conds='separate'
第一个表达式 returns 。因此,如果我需要分段函数的第二部分,我将无法获得它。
PPS。如果这很重要,我有 python 3.8.0
和 sympy 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