具有假设的Sympy积分

问题描述 投票:0回答: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功能。

enter image description here

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

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

提前感谢!

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

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

python sympy symbolic-math
1个回答
0
投票

无法给出特定值作为符号的假设,因此可以在积分中使用它。您可以做的最好的事情是将正,负等分开。但是,对于从逐段中提取所需的表达式,您既可以将其作为特定参数获取,也可以输入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
© www.soinside.com 2019 - 2024. All rights reserved.