SymPy - 定义变量的域

时间:2015-10-19 14:15:10

标签: python sympy

我正在编写一个程序来计算物理实验室的精确差分。我知道我可以设置真正的域名或正面(from sympy import *):

x, y, z = symbol('x y z', positive = True)

我的问题是指定域名n>1。可能吗? 在我的输出中,我得到了|n^2-1|这样的表达式,并设置了此域n>1我会接受n^2-1之类的输出(没有绝对值“||”)

1 个答案:

答案 0 :(得分:3)

对于符号的假设,您可以使用正面否定

p = Symbol('p', positive=True)

但是这只能定义 p> 0 (如果使用 negative = True ,则 p< 0 )。

要进行更复杂的表达式细化,请尝试 refine(表达式,假设)

In [1]: n = Symbol('n')

In [2]: refine(Abs(n-1), Q.positive(n-1))
Out[2]: n - 1

In [3]: refine(Abs(n-1))
Out[3]: │n - 1│

即,您创建 Q.positive(n-1)的假设,即 n> 1 ,并将其传递给精简

目前正在进行将此假设样式移植到其他算法的工作,但支持仍然不完整(简化似乎无法识别这种假设)。

预计 Q.statement(...)的支持将在未来的SymPy版本中得到扩展,因为目前正在进行大量的工作。