进入
时sympy.simplify(sympy.sqrt(3)/3)
它返回: sqrt(3)/ 3 而不是 1 / sqrt(3)
我怎样才能得到简化的表达式?
特别是对于更大的数字,这将是非常有用的。
sympy.simplify(3/sympy.sqrt(3))
有效,所以我认为它优先从分母中删除根?我怎么能改变它?
答案 0 :(得分:2)
由于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))
答案 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))