Python 辛并没有简化自然平方数的平方根

Python 辛并没有简化自然平方数的平方根,python,python-3.x,sympy,Python,Python 3.x,Sympy,进入时 sympy.simplify(sympy.sqrt(3)/3) 它返回:sqrt(3)/3而不是1/sqrt(3) 如何获得简化表达式? 特别是对于更大的数字,这将是非常有用的 sympy.simplify(3/sympy.sqrt(3)) 行得通,所以我假设它优先从分母中移除根?我如何更改它?因为sympy使用符号,所以它被打印为sqrt(3)/3作为输出格式;在内部,sqrt(3)/3与1/sqrt(3)没有区别。所以从计算上来说,这并没有什么区别 如果要将其翻转显示,可以尝试将

进入时

sympy.simplify(sympy.sqrt(3)/3)
它返回:sqrt(3)/3而不是1/sqrt(3)
如何获得简化表达式?
特别是对于更大的数字,这将是非常有用的

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

行得通,所以我假设它优先从分母中移除根?我如何更改它?

因为
sympy
使用符号,所以它被打印为
sqrt(3)/3
作为输出格式;在内部,
sqrt(3)/3
1/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))
def字符串化(frac):

如果frac您可以尝试以下试验:

>>> 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))

你会注意到,总是把根放在分子中是最重要的。我不知道如何解决这个问题,只是指出了观察结果。有些人,包括我,认为<代码> Sqt(3)/3 比 1 /Sqt(3)< /C>更简单。有理分母是很好的选择。如果你的意思是它只适用于具有正值的sqrt,那么是的。但是如果您可以在
evaluate=False
上下文中进行计算/定义,那么它也将不使用负参数:
和evaluate(False):1/sqrt(-2)