假设我有一个方程组如下,但我要求在我的方程组中我需要2个语句中的1个为真。
示例:
sympy.solve([eq1或eq2,eq3或eq4,eq5或eq6,...],[vars])
当我把or语句放入时,它并没有像我预期的那样工作(总是评估第一个eq)。如何用或按照我的意图表达方程组?
感谢。
答案 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 = 0
或x**2 - 4 = 0
,则应使用solve((x**2 - 1)*(x**2 - 4), x)
。