2016-12-24 102 views
1

我試圖解決這三個方程:的Python/Sympy:求解方程具有不同值的

a1 + a2 = b1 
a2 + a3 = b2 
b1 + b2 = c1 

我生成用於隨機選擇三個變量的值(不允許的組合B1,B2和C1) ,所以我可能有a1 = 5,a3 = 10,c1 = 100,所以我可以用sympy解出這個方程。

我的問題是,我似乎無法將隨機輸入傳輸到代碼的sympy部分並在其上循環。

a1, a2, a3, b1, b2, c1 = symbols('a1 a2 a3 b1 b2 c1') 
solve([a1.subs(a1, 5) + a2 - b1, a2 + a3.subs (a3, 10) - b2, b1 + b2 - c1.subs (c1, 100)], (a1, a2, a3, b1, b2, c1)) 

當我假設a1,a3和c1如我在示例中提到的那樣工作時,但我事先隨機選擇這些變量。我試圖根據哪些變量被選擇來創建for循環,但是有太多可能的三個變量組合,所以我放棄了。

+1

我不是100%清楚你期望得到什麼,什麼你有試過嗎?你想告訴sympy'a1','a3'和'c1'的值嗎? – doctorlove

+1

如果我理解正確:馬克,你想從六個變量中隨機選取三個,只給出這三個數值,然後用sympy解決其餘三個? –

+0

@DavidZ:是的,這就是我想要做的! –

回答

4

如果我正確地理解了你所問的內容,可以使用Sympy的linsolve函數首先象徵性地求解方程,然後用數字替換。關鍵的一步是告訴linsolve你想要解決哪些變量。我建議使用set s將要解決的變量與要插入值的變量分開。你可以聲明變量是這樣的:

all_vars = symbols('a1 a2 a3 b1 b2 c1') 
# randomly choose which variables will have values 
plug_in_for_vars = ... 
solve_for_vars = tuple(set(all_vars) - set(plug_in_for_vars)) 

然後,你可以定義你的方程

equations = [a1 + a2 - b1, a2 + a3 - b2, b1 + b2 - c1] 

,並通過他們所選擇的變量linsolve

solution = linsolve(equations, solve_for_vars) 

然後你就可以在插件選擇的值。

solution.subs({variable: value(variable) for variable in plug_in_for_vars}) 

當然value(variable)中是不管你做什麼,以確定要在堵塞。該數值的代理

+0

嗨,我花了我很長一段時間才完成這項工作,但現在它工作。從隨機選擇的變量從包含所有變量的元組中移除的部分,我遇到了一些麻煩。出於某種原因,沒有任何工作,所以最後,我把這兩個集合放在一個列表中,並使用'del'去除這三個變量。非常感謝你的幫助。 –

+0

那麼,這絕對不是做這件事的理想方式,但是無論對你而言,我想都是如此。真高興你做到了。 –