在solve()函数中使用Sympy python OR语句

时间:2015-10-12 18:31:51

标签: python sympy

假设我有一个方程组如下,但我要求在我的方程组中我需要2个语句中的1个为真。

示例:

sympy.solve([eq1或eq2,eq3或eq4,eq5或eq6,...],[vars])

当我把or语句放入时,它并没有像我预期的那样工作(总是评估第一个eq)。如何用或按照我的意图表达方程组?

感谢。

2 个答案:

答案 0 :(得分:0)

尝试将结果转换为集合,然后使用的联合,的交叉点:

res1 = set(solve(eq1, x))

不幸的是,在某些情况下这可能不起作用(它希望结果是一个解决方案列表,如果出现复杂的条件,可能无效)。

In [2]: res1 = set(solve(x**2-1, x))

In [3]: res2 = set(solve(x-3, x))

In [4]: res2
Out[4]: set([3])

In [5]: res1 | res2
Out[5]: set([-1, 1, 3])

In [6]: res1 & res2
Out[6]: set([])

也就是说, | 运算符获取集合的并集(满足任何方程的解),而& 运算符获取集合的交集(即满足所有方程式的解决方案。)

SymPy的下一个版本将具有 solveset()函数,该函数将始终返回一个集合或类似集合的对象。交叉口和工会将始终保证有效。但在那之前,尝试类似我的解决方案。

答案 1 :(得分:0)

只需将方程式相乘即可。如果一个或另一个为零,则两个表达式的乘积为零。

在SymPy中,solve(expr, x)假定expr = 0(例如,solve(x**2 - 1, x)给出[-1, 1])。

如果您想要解决,例如x**2 - 1 = 0x**2 - 4 = 0,则应使用solve((x**2 - 1)*(x**2 - 4), x)