>>> a, b = eq.args
>>> sqrt(a**2*b.args[0], evaluate=0)
sqrt(1.88379173728726*x0**2 + 1.07691441805435*x1)
您可以创建一个函数,该函数将任何文本数字规范地放在带有
def unfactor_radicals(eq):
"""put leading numbers in Mul under a radical, if possible
Examples
========
>>> from sympy import sqrt, root
>>> from sympy.abc import x
>>> eq = -7.2*root(x, 3)**4 + 3*x*sqrt(1/x)
>>> unfactor_radicals(eq)
-(4.39540980178165*x)**(4/3) + x*sqrt(9/x)
"""
from sympy import Pow, UnevaluatedExpr
def do(m):
args = m.args
c = args[0]
m = args[1:]
if c < 0:
s = -1
c = -c
else:
s = 1
rad = next(ordered([i for i in m if i.is_Pow and i.exp.is_Rational and i.exp.is_Integer is False]))
i = m.index(rad)
p = Pow(c**(1/rad.exp)*rad.base, rad.exp, evaluate=False)
return s*UnevaluatedExpr(m.func(*(m[:i]+(p,)+m[i+1:]), evaluate=False))
return eq.replace(
lambda x: x.is_Mul and x.args[0].is_Number and any(
i.is_Pow and i.exp.is_Rational and i.exp.is_Integer is False
for i in x.args),
lambda x: do(x))
SymPy拉出浮点数,使这些表达式成为规范表达式。你可以把它放回去
您可以创建一个函数,该函数将任何文本数字规范地放在带有
但是,它会产生未评估的Expr,我不知道会产生多少麻烦……但它可能会给出一些想法
相关问题 更多 >
编程相关推荐