【问题标题】:Solving Inequalities in Sympy解决 Sympy 中的不等式
【发布时间】:2018-01-16 14:58:34
【问题描述】:

我尝试在 sympy 中解决以下不等式:

(10000 / x) - 1 < 0

于是我发出了命令:

solve_poly_inequality( Poly((10000 / x) - 1 ), '<')

但是,我得到了:

[Interval.open(-oo, 1/10000)]

但是,我的手动计算给出了 x 10000。

我错过了什么?由于 -1,我无法将其表示为有理函数。

提前致谢!

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    您正在使用低级求解程序。我建议使用更高级别的例程 solvesolveset,例如

    >>> solveset((10000 / x) - 1 < 0, x, S.Reals)
    (−∞, 0) ∪ (10000, ∞)
    

    您的尝试正确但看起来错误的原因是您没有指定要使用的生成器,因此 Poly 使用 1/x 作为其变量(我们称之为 g)因此它解决了问题 1000*g - 1 &lt; 0.. .当 g 小于您发现的 1/1000 时,这是正确的。

    你可以通过写来查看这个生成器标识

    >>> Poly(1000/x - 1)
    Poly(1000*1/x - 1, 1/x, domain='ZZ')
    

    【讨论】:

    • 完美!谢谢!可惜 sympy 有这么糟糕的文档。我曾多次遇到solveset,但从未设法理解它的文档。现在很清楚了。我被solve_poly_inequality 吸引的原因也是它的solve_poly_inequalities 不等式系统的变体。再次感谢!
    • @OlliD-Metz 如果您知道如何改进文档的这一部分,任何贡献几乎肯定会受到欢迎(无论多么小)。
    • 好吧,我没有找到Poly 命令的基本文档。因此,如果有人缺少基础知识,那么接下来的一切都会变得非常复杂。如果你在网上搜索“sympysolvequality”,你最终会在这里:docs.sympy.org/latest/modules/solvers/inequalities.html,没有任何评论说最好只使用 solveset(这也更舒服)
    【解决方案2】:

    10000/x-1 不是x 中的多项式,而是1/x 中的多项式。相反,10000/x-1x 中的rational function。虽然你可以尝试输入Poly(1000*1/x - 1, x, domain='ZZ'),但会有错误

    PolynomialError: 1/x contains an element of the generators set
    

    因为根据定义10000/x-1 不能是x 中的多项式。因此,你不能用这个来进行计算。

    您也可以尝试关注或其他求解器。

    from sympy.solvers.inequalities import reduce_rational_inequalities
    from sympy import Poly
    from sympy.abc import x
    reduce_rational_inequalities([[10000/x - 1 < 0]], x)
    ((-oo < x) & (x < 0)) | ((10000 < x) & (x < oo))
    

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2021-11-25
      • 2017-10-31
      • 2022-10-08
      • 1970-01-01
      • 2018-12-06
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多