Как устранить отрицательные решения из результата `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Это означает, что он не знает, он все равно включает. На данный момент лучше всего отфильтровать это решение вручную.

Другие вопросы по тегам