Sympy不简化自然平方数的平方根

时间:2017-11-02 17:35:11

标签: python python-3.x sympy

进入

sympy.simplify(sympy.sqrt(3)/3)

它返回: sqrt(3)/ 3 而不是 1 / sqrt(3)
我怎样才能得到简化的表达式?
特别是对于更大的数字,这将是非常有用的。

sympy.simplify(3/sympy.sqrt(3))

有效,所以我认为它优先从分母中删除根?我怎么能改变它?

2 个答案:

答案 0 :(得分:2)

由于sympy使用了符号内容,因此它只是作为输出格式打印为sqrt(3) / 3;在内部,sqrt(3) / 31 / sqrt(3)没有区别。从计算上看,并没有什么区别。

如果你想显示它翻转,你可以尝试平方顶部和底部,将其表示为分子和分母,然后将它们单独平方根,如下所示:

def stringify(frac):
    if frac<0:
        sign_str = "-"
    else:
        sign_str = ""
    frac = frac ** 2
    numer, denom = frac.as_numer_denom()
    return sign_str + str(sympy.sqrt(numer)) + "/" + str(sympy.sqrt(denom))

Try it Online!

答案 1 :(得分:1)

您可以尝试使用以下内容进行试验:

>>> def isurd(eq):
...     s = [p for p in eq.atoms(Pow) if p.exp is S.Half and p.base.is_Integer]
...     d = {}
...     reps = {}
...     for p in s:
...         q = Dummy()
...         d[q] = sqrt(p.base)
...         reps[p] = p.base/q
...     rv = eq.xreplace(reps)
...     with evaluate(False):
...         return rv.xreplace(d)
>>> isurd(1/sqrt(32))
1/(4*sqrt(2))