如何从'sympy.solve`结果中消除负面解决方案?

时间:2018-05-22 21:46:19

标签: python sympy scientific-computing

如何让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_0gamma产生正面影响。

或者,最后消除负面解决方案的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

SymPy的假设系统不够聪明,无法知道-sqrt(2)*sqrt(-gamma**2 + 2*omega_0**2)/2real的{​​{1}}和positive假设omega_0不能为正(I opened an issue for it)。为了安全起见,SymPy仅在知道解决方案不具备给定假设的情况下才对其进行过滤。如果假设系统给出gamma(表示它不知道),则无论如何都将其包括在内。目前,最好的选择是手动过滤此解决方案。