如何在sympy中禁用不必要的括号?

时间:2019-11-20 07:43:03

标签: sympy

请告诉我,如何禁止打开括号?例如, 8 *(x + 1)应该是这样,而不是8 * x + 8 使用评估=假无济于事

3 个答案:

答案 0 :(得分:2)

全局evaluate标志可让您以最自然的方式执行此操作:

>>> with evaluate(False):
...  8*(x+1)
...
8*(x + 1)

否则,Mul(8, x + 1, evaluate=False)是执行此操作的较低级别方法。并且可以从字符串(已经采用该格式)进行转换

>>> S('8*(x+1)',evaluate=False)
8*(x + 1)

答案 1 :(得分:1)

通常,SymPy会将表达式转换为其internal format,其中包括一些最小的简化。例如,sqrt在内部表示为Pow(x,1/2)。另外,可能还会对术语进行一些重新排序。

在您的特定情况下,您可以尝试:

from sympy import factor
from sympy.abc import x, y

y = x + 1
g = 8 * y
g = factor(g)
print(g)  # "8 * (x + 1)"

但是,例如,如果您有g = y * y,SymPy会将其表示为第二幂((x + 1)**2),或将其扩展为x**2 + 2*x + 1

PS:另请参阅SymPy维护者的this answer了解一些可能的解决方法。 (当您想在其他计算中评估或简化此表达式时,可能会使事情复杂化。)

答案 2 :(得分:0)

sympy.collect_const(sympy.S("8 * (x + 1)"), 8)怎么样?

通常,您可能会对其中的某些表达式操作感兴趣:https://docs.sympy.org/0.7.1/modules/simplify/simplify.html