获取求解器/ sympy的返回对象的最小值/最大值[Python]

时间:2017-06-10 18:19:50

标签: python sympy

我在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 )

1 个答案:

答案 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_setboundary会产生所需的值。

希望知道这个技巧将有助于您在未来更快地发现其他问题的解决方案。