Sympy:简化方块的平方根

时间:2012-10-09 09:24:17

标签: python simplify sympy

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 ⎠   

有谁知道为什么这不起作用,或者我做错了什么?

3 个答案:

答案 0 :(得分:6)

您的示例有两个问题。

实数的第一个sqrt(x**2)==x

其次,对于SymPy 1/20.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