如何在Sympy中定义函数的范围(Python 2.7)?
我正在做一个项目,使用Sympy来定义一系列有两个变量的函数,使用Eq()这个语句(比如:“Eq(j, Abs(i))”),然后把这些表达式转化成可以计算的形式,接着把其中一个变量替换成已知的值,最后求出另一个缺失的值。
不过,我想问的是,是否可以为这个工作定义一个范围?举个例子:用上面的方程,j = |i|,如果我只想要j在-5到5之间的答案,有没有简单的方法让它在代入不在这个范围内的i时返回False?
1 个回答
1
你可以用布尔运算符 And
、Or
和 Not
来组合等式和不等式(你也可以用 &
、|
和 ~
这几个符号)。
我会创建一个布尔表达式,表示你想要满足的条件,比如 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
注意,我这里允许条件中包含已知值和未知值。如果条件中只有未知值,你就不需要复制和更新已知值的字典。你可能还想把这个过程封装成一个函数。