是否有解决方法SymPy明显无法简化sqrt(x ** 2 + 2 * x + 1)?
from sympy import *
x = Symbol('x', real=True, positive=True)
simplify(sqrt(x**2)) # returns x
simplify(sqrt(x**2+2*x+1)) #fails to return x+1
SymPy不会尝试简化所有内容,如果有的话,会有太多问题(从性能开始)。请参阅SymPy wiki中的文章Automatic Simplification。
如果你想要一个表达式,你应该告诉SymPy这样做。
factor(sqrt(x**2+2*x+1)) # returns x+1
公式sqrt(x**2)
变成x
,因为当基数为正且指数是实数时,(x**a)**b
可以安全地组合到x**(a*b)
。 (即便如此,“可以”并不总是意味着“应该”。在SymPy中存在一些自动简化,可能太多了。)
两者之间的关键区别在于,x**2
明确是一种力量,而x**2 + 2*x + 1
是一个总和。