我在Python脚本中使用sympy来获得不等式的解决方案。 然后,我想在返回的所有可能值中获得最小值和最大值,但无法找到方法。
返回对象的类型(x_sol)是'和'。
x = Symbol("x", real=True)
a = 1
b = 2
c = 3
d = 4
e = 5
CM = Matrix([ [0,1,1,1,1], [1,0,a,b,c], [1,a,0,d,e], [1,b,d,0,x], [1,c,e,x,0] ])
x_sol = solve_univariate_inequality( det(CM) >= 0, x, S.Reals )
答案 0 :(得分:3)
您可以使用xsol.as_set().boundary
:
import sympy as sym
x = sym.Symbol("x", real=True)
a, b, c, d, e = 1, 2, 3, 4, 5
CM = sym.Matrix([ [0,1,1,1,1], [1,0,a,b,c], [1,a,0,d,e], [1,b,d,0,x], [1,c,e,x,0] ])
x_sol = sym.solve_univariate_inequality( sym.det(CM) >= 0, x, sym.S.Reals )
x_set = x_sol.as_set()
x_min, x_max = x_set.boundary
print('{}, {}'.format(x_min, x_max))
打印
-sqrt(77)/2 + 9/2, sqrt(77)/2 + 9/2
了解人们如何找到答案通常比答案本身更有趣。
所以这就是我如何找到上面的答案。
IPython非常有用
制表符完成功能。输入x_sol.
并按TAB键,
In [129]: x_sol.[TAB]
IPython显示xsol
的所有属性:
x_sol.args x_sol.as_content_primitive
x_sol.as_poly x_sol.as_set
x_sol.assumptions0 x_sol.atoms
...
键入x_sol.as_set?
会提供有关属性或方法的文档:
In [129]: x_sol.as_set?
Signature: x_sol.as_set()
Docstring:
Rewrite logic operators and relationals in terms of real sets.
Examples
========
>>> from sympy import And, Symbol
>>> x = Symbol('x', real=True)
>>> And(x<2, x>-2).as_set()
(-2, 2)
File: ~/.virtualenvs/muffy/lib/python3.4/site-packages/sympy/logic/boolalg.py
Type: method
只需使用IPython探索可用属性,就不难了
发现as_set
和boundary
会产生所需的值。
希望知道这个技巧将有助于您在未来更快地发现其他问题的解决方案。