请告诉我,如何禁止打开括号?例如, 8 *(x + 1)应该是这样,而不是8 * x + 8 使用评估=假无济于事
答案 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