繁体   English   中英

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

[英]Get min/max of returned object of solver / sympy [Python]

我在Python脚本中使用sympy来获得不等式的解决方案。 然后,我想在返回的所有可能值中获取最小值和最大值,但无法找到方法。

返回的对象(x_sol)的类型为'And'。

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 )

您可以使用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产生了所需的值。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM