如何在Sympy中定义函数的范围(Python 2.7)?

1 投票
1 回答
543 浏览
提问于 2025-04-18 15:46

我正在做一个项目,使用Sympy来定义一系列有两个变量的函数,使用Eq()这个语句(比如:“Eq(j, Abs(i))”),然后把这些表达式转化成可以计算的形式,接着把其中一个变量替换成已知的值,最后求出另一个缺失的值。

不过,我想问的是,是否可以为这个工作定义一个范围?举个例子:用上面的方程,j = |i|,如果我只想要j在-5到5之间的答案,有没有简单的方法让它在代入不在这个范围内的i时返回False?

1 个回答

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

注意,我这里允许条件中包含已知值和未知值。如果条件中只有未知值,你就不需要复制和更新已知值的字典。你可能还想把这个过程封装成一个函数。

撰写回答