Sympy: порядок результата от решения квадратного уравнения

Я решил квадратичное уравнение, используя sympy:

import sympy as sp
q,qm,k,c0,c,vt,vm = sp.symbols('q qm k c0 c vt vm')
c = ( c0 * vt - q * vm) / vt
eq1 = sp.Eq(qm * k * c / (1 + k * c) ,q)
q_solve = sp.solve(eq1,q)

Основываясь на некоторых тестах, я понял, что только q_solve[0] имеет физический смысл. Будет ли sympy всегда ставить (b - sqrt(b**2 - 4*a*c))/2a в первую очередь? Я думаю, это может измениться с обновлением?

Ответы

Ответ 1

Простой тест для ответа на ваш вопрос состоит в том, чтобы символически решить квадратичное уравнение, используя sympy для ниже:

import sympy as sp
a, b, c, x = sp.symbols('a b c x')
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)]

что заставляет меня думать, что в общем случае порядок - это сначала решение + sqrt(), а затем решение - sqrt().

Для вашей программы q_solve[0] вы получите:

(c0*k*vt + k*qm*vm + vt - sqrt(c0**2*k**2*vt**2 - 2*c0*k**2*qm*vm*vt + 2*c0*k*vt**2 + k**2*qm**2*vm**2 + 2*k*qm*vm*vt + vt**2))/(2*k*vm)

это еще ответ x= (-b + sqrt(b**2-4*a*c))/(2*a), отрицательный знак из члена b уходит в результате распределения знаков переменных в решении