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
这样的输出(没有绝对值“||”)
对于符号的假设,您可以使用positive或negative:
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( ... ) 的支持,因为目前有很多工作正在进行中关于这个。
我正在编写程序来为我的物理实验室计算精确微分。我知道我可以设置实域或正域 (from sympy import *
):
x, y, z = symbol('x y z', positive = True)
我的问题是指定域,例如 n>1
。可能吗?
在我的输出中,我得到了一个像 |n^2-1|
这样的表达式,并且通过设置这个域 n>1
我会接受像 n^2-1
这样的输出(没有绝对值“||”)
对于符号的假设,您可以使用positive或negative:
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( ... ) 的支持,因为目前有很多工作正在进行中关于这个。