Как устранить отрицательные решения из результата `sympy.solve`?
Как я могу сделать sympy.solve
не вернуть отрицательные решения?
Это кажется другой задачей, чем добавление ограничения, такого как positive=True
к символу, для которого я решаю. В то время как
import sympy
x = sympy.symbols("x")
print(sympy.solve(x**2-4, x))
x = sympy.symbols("x", positive=True)
print(sympy.solve(x**2-4, x))
печать
[-2, 2]
[2]
как и ожидалось - я все еще получаю отрицательный результат решения для omega
с
import sympy
omega, omega_0, gamma = sympy.symbols("omega, omega_0, gamma", real=True, positive=True)
zeta = 1/((omega_0**2 - omega**2)**2 + gamma**2*omega**2)
omega_R = sympy.solve(sympy.diff(zeta, omega), omega)
print(omega_R)
который возвращается
[-sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2, sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2]
даже если -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2
никогда не будет положительным для реальных и положительных символов omega_0
а также gamma
,
Кроме того, каков наилучший способ устранить негативные решения впоследствии?
1 ответ
Система предположений SymPy недостаточно умна, чтобы понять, что -sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2
не может быть положительным дать real
а также positive
предположения о omega_0
а также gamma
(Я открыл для этого вопрос). Чтобы быть в безопасности, SymPy фильтрует решения, только если знает, что у них не может быть данных предположений. Если система предположений дает None
Это означает, что он не знает, он все равно включает. На данный момент лучше всего отфильтровать это решение вручную.