如何让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
产生正面影响。
或者,最后消除负面解决方案的最佳方法是什么?
答案 0 :(得分:1)
SymPy的假设系统不够聪明,无法知道-sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2
和real
的{{1}}和positive
假设omega_0
不能为正(I opened an issue for it)。为了安全起见,SymPy仅在知道解决方案不具备给定假设的情况下才对其进行过滤。如果假设系统给出gamma
(表示它不知道),则无论如何都将其包括在内。目前,最好的选择是手动过滤此解决方案。