SymPy: невозможно упростить довольно простое выражение - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть выражение (expr, см. Ниже), которое я не могу упростить в SymPy.Для действительных и положительных значений x, expr эквивалентно x**3 + 2*x, но simplify и refine вовсе не упрощают выражение.(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 голосов
/ 18 декабря 2018

Это можно сделать!

Я отменяю свой предыдущий ответ.Ваше выражение может быть упрощено с помощью 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)

По сути, я копался во всех документах на sympy.simplify до тех пор, пока янашел эту магическую комбинацию.Кроме того, вы должны определить x как positive при создании символа, как я делал в приведенном выше коде.

Комментарий к Mathematica

"Mathematica делает упрощение без каких-либоусилия "

Я не думаю, что вы когда-либо недооцениваете количество времени и денег, затраченных на то, чтобы сделать эвристический кошмар, который Simplify Математики казался" просто работающим ".К сожалению, во многих отношениях Sympy все еще находится в зачаточном состоянии по сравнению.sympy.simplify является одним из таких способов.

...