【问题标题】:Define the range of a function in Sympy (Python 2.7)?在 Sympy (Python 2.7) 中定义函数的范围?
【发布时间】:2014-08-04 01:43:26
【问题描述】:

我正在做一个项目,它使用 Sympy 来定义一系列带有 Eq() 语句的双变量函数(例如:“Eq(j, Abs(i))”),稍后 'sympify' 的表达式,然后用已知值替换其中一个变量并求解缺失值。

我的问题是,如果可能的话,我如何为这项工作定义一个范围?例如:使用上面的等式,j = |i|,如果我只想要 j over -5 > i > 5 的答案,是否有一种优雅的方法让它在插入不在该范围内的 i 时返回 False?

【问题讨论】:

  • 我认为你的意思是-5 < i < 5
  • 啊,是的。意外的错字。

标签: python range sympy


【解决方案1】:

您可以使用布尔运算符AndOrNot 组合等式和不等式(您也可以分别使用&|~ 运算符)。

我将创建一个布尔表达式来表示您希望满足的约束,在本例中为And(-5 < i, i < 5),并在最后替换其中的解决方案。类似的东西

In [10]: expr = Eq(i, abs(j))

In [14]: constraint = And(-5 < i, i < 5)

In [15]: d = {j: 6}

In [16]: sols = solve(expr.subs(d), dict=True)

In [17]: sols
Out[17]: [{i: 6}]


In [21]: for sol in sols:
   ....:     full_d = d.copy()
   ....:     full_d.update(sol)
   ....:     print(constraint.subs(full_d))
   ....:
False

请注意,我已允许约束在此处包含已知值和未知值。如果它们只包含未知值,则不需要复制和更新已知值的字典。您可能希望将其包装在一个函数中。

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2015-01-16
    相关资源
    最近更新 更多