2015-10-12 54 views
1

假設我有一個如下的方程組,但是我有要求,在我的方程組中,我需要2個語句中的1個爲真。在解決()函數中的Sympy python OR語句

實施例:

sympy.solve([EQ1 EQ2或,EQ3或EQ4,EQ5或EQ6,...],[瓦爾])

當我把或語句,它不」按照我的意圖工作(第一個eq總是被評估)。我如何用或按照我的意圖表達方程組?

謝謝。

+0

請把你的代碼。你是通過Python還是使用or運算符,還是使用SymPy的Or對象? –

+0

或運算符不是對象 – jenny

回答

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()函數,它將始終返回一組或類似對象。交叉路口和工會將始終保證工作。但在此之前,嘗試像我的解決方案。

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)