SymPy:无法简化相当简单的表达方式

时间:2018-12-17 18:05:46

标签: sympy simplify

我有一个无法在SymPy中简化的表达式(expr,请参见下文)。对于实数和正数xexpr等效于x**3 + 2*x,但是simplifyrefine根本不简化表达式。 (Mathematica毫不费力地进行了简化)。 如何使用SymPy简化此表达式?

from sympy import *

x = var('x')

expr = 16*x**3/(-x**2 + sqrt(8*x**2 + (x**2 - 2)**2) + 2)**2 - 2*2**(S(4)/5)*x*(-x**2 + sqrt(8*x**2 + (x**2 - 2)**2) + 2)**(S(3)/5) + 10*x

expr1 = simplify(expr) # does nothing

expr2 = refine(expr, Q.positive(x)) # does nothing

1 个答案:

答案 0 :(得分:1)

可以做到!

我撤消了先前的答复。您可以使用Sympy简化您的表情。方法如下:

import sympy as sym

x = sym.symbols('x', positive=True)
expr = 16*x**3/(-x**2 + sym.sqrt(8*x**2 + (x**2 - 2)**2) + 2)**2 - 2*2**(sym.S(4)/5)*x*(-x**2 + sym.sqrt(8*x**2 + (x**2 - 2)**2) + 2)**(sym.S(3)/5) + 10*x

sym.simplify(sym.factor(sym.factor(sym.expand(sym.radsimp(expr))), deep=True))

输出:

x*(x**2 + 2)

基本上,我翻遍了docs上的所有sympy.simplify,直到找到了这种神奇的组合。另外,创建符号时必须将x定义为positive,就像我在上面的代码中所做的一样。

对Mathematica的评论

“ Mathematica毫不费力地进行了简化”

我认为您不应该低估使Mathematica的Simplify启发式噩梦看起来像“正当工作”的时间和金钱。可悲的是,相比之下,Sympy在很多方面仍处于起步阶段。 sympy.simplify是其中一种方式。