SymPy -- 定义变量域

SymPy -- define domain of variable

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

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

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

对于符号的假设,您可以使用positivenegative:

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

但是这只能定义 p>0(或者 p<0 如果你使用 negative=True).

对于更复杂的表达式细化,请尝试 refine(expression, assumption):

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,并且传递给 refine.

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

预计在 SymPy 的未来版本中将扩展对 Q.statement( ... ) 的支持,因为目前有很多工作正在进行中关于这个。