#sympy
#симпатия
Вопрос:
Из другого кода sympy я получаю выражения типа :
u = (a**2*sqrt(1/(a**2 - 4*b)) - a - 4*b*sqrt(1/(a**2 - 4*b)))/(2*(a**2 -
4*b)*sqrt(1/(a**2 - 4*b)))
где a и b — символы sympy. Я пытался
u = u.simplify(), u = u.expand() and u = simplify(str(u)),
безрезультатно, код не меняется. Как я могу добиться упрощения такого рода выражений?
Комментарии:
1. Это
a**2-4*b
очень похоже на дискриминант 2-й степени , но, похоже, нет никакого способа использовать это..
Ответ №1:
Здесь я всего лишь пытаюсь упростить процесс вручную, с некоторыми примечаниями.
Сигналом было то, что подвыражение a**2 - 4*b
появляется 4 раза. Я не уверен, как это можно распространить на более общий метод.
from IPython.display import Math, display
from sympy import *
init_printing()
a,b,D=symbols('a b Delta')
u = (a**2*sqrt(1/(a**2 - 4*b)) - a - 4*b*sqrt(1/(a**2 - 4*b)))/(2*(a**2 - 4*b)*sqrt(1/(a**2 - 4*b)))
D_ = a**2 - 4*b
r = []
r.append(latex(u))
u = u.subs(D_,D)
r.append(latex(u))
u = u.subs(2*D_, 2*D)
r.append(latex(u))
u = collect(u, 1/D)
r.append(latex(u))
u = u.subs(D_,D)
r.append(latex(u))
u = u.expand()
r.append(latex(u))
u = u.subs(D,D_)
r.append(latex(u))
display(Math(" \Longrightarrow ".join(r)))
Выходной сигнал:
Комментарии:
1. Вы можете использовать
ratsimp(radsimp(u))
для получения того же результата.2. @OscarBenjamin Я не знал о radsimp и ratsimp, но все работает нормально, еще раз спасибо, что спасли мой день.
3. хотя решение Oscars отличное, ваш ответ также действителен и в качестве бонуса дает пример использования LaTeX, поэтому я приму ваш ответ