Самый простой верный способ - написать a,b=expr_p2; Piecewise((a, Gt(a, b)), (b, True))
. Когда используются символы, SymPy должен быть каноническим, но канонический ответ может не поставить положительный ответ на 2-й:
>>> solve(a*x**2+b*x+c,x)
[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]
>>> solve(-a*x**2+b*x+c,x)
[(b - sqrt(4*a*c + b**2))/(2*a), (b + sqrt(4*a*c + b**2))/(2*a)]
В первом случае большее значение root является первым, если значение a
положительное, а в последнем второе, если a
положительно.