Sympy似乎无法简化涉及变量平方的平方根的表达式:
In [28]: a = x**2
In [29]: b = a**(1/2)
In [30]: b
Out[30]:
0.5
⎛ 2⎞
⎝x ⎠
In [31]: b.simplify()
Out[31]:
0.5
⎛ 2⎞
⎝x ⎠
我不认为这与simplify
的其他变种一起使用,特别是我认为b.powsimp()
应该有效。
In [32]: b.powsimp()
Out[32]:
0.5
⎛ 2⎞
⎝x ⎠
有谁知道为什么这不起作用,或者我做错了什么?
答案 0 :(得分:6)
您的示例有两个问题。
仅正实数的第一个sqrt(x**2)==x
。
其次,对于SymPy 1/2
和0.5
并不是一回事。第一个是Rational
实例,第二个是float
实例。
最后,一个例子:
>>> x = Symbol('x', real=True)
>>> (x**2)**(1./2)
∣x∣**1.0
>>> (x**2)**(S(1)/2) # S() is short for sympify()
∣x∣
sympify
将python对象转换为更合适的SymPy对象。
答案 1 :(得分:3)
我假设您将x
声明为x = Symbol('x')
。如果将其更改为x = Symbol('x', real=True)
,则应简化表达式。您可以找到必须在sympy bugtracker中明确声明您的变量为real
的原因。
答案 2 :(得分:2)
您想要的功能是powdenest
。如果传递force=True
参数,它将忽略假设
>>> powdenest(sqrt(x**2), force=True)
x