2016-09-28 61 views
2

我目前正在研究求解方程組。命名一組等式方程Python

方程的一個子集:

eq1 = pi1 * q[0+1] == pi0 * r[0+1] 
eq2 = pi2 * q[0+1] == pi0 * r[1+1] + pi1 * r[1+1] 
eq3 = pi3 * q[0+1] == pi0 * r[2+1] + pi1 * r[2+1] + pi2 * r[1+1] 
eq4 = pi4 * q[0+1] == pi0 * r[3+1] + pi1 * r[3+1] + pi2 * r[2+1] + pi3 * r[1+1] 
eq5 = pi5 * q[0+1] == pi0 * r[4+1] + pi1 * r[4+1] + pi2 * r[3+1] + pi3 * r[2+1] + pi4 * r[1+1] 
eq6 = pi6 * q[0+1] == pi0 * r[5+1] + pi1 * r[5+1] + pi2 * r[4+1] + pi3 * r[3+1] + pi4 * r[2+1] + pi5 * r[1+1] 
eq7 = pi7 * q[0+1] == pi0 * r[6+1] + pi1 * r[6+1] + pi2 * r[5+1] + pi3 * r[4+1] + pi4 * r[3+1] + pi5 * r[2+1] + pi6 * r[1+1] 

不幸的是,這是行不通的,我希望它是工作的方式。我希望它被讀作如下:第一個方程的名字是'eq1'並且有一個確定的等式方程。其他行應該類似地閱讀。在我的代碼中,我有14個更長的方程。我想給他們一個名字,以避免在「solve([],[])」中出現很長的表達式。

這可能嗎?如果是這樣,該怎麼辦?

回答

0

您可以將方程存儲在字典中 - 您將映射方程(1,2等)的索引到一個元組,該元組將包含代表方程兩側的兩個項目。

equations = dict() 
equations[1] = (pi1 * q[0+1], pi0 * r[0+1]) 

你可以調用solve(equations[1]),並在solve()機能的研究做這樣的事情:

def solve(equation): 
    left_side_of_equation = equation[0] 
    right_side_of_equation = equation[1] 
    # Here do everything you need with this equation values. 

或者調用函數是這樣的:solve(equations[1][0], equations[1][1]),並有在solve()功能兩個參數。

編輯回答評論:

如果你想比只有==(大於,等於較大等)方程更需要保存的元組信息,以及。它可以是這樣的:

equations[42] = (pi1, 0, "ge") 

和實施solve()功能是這樣的:

def solve(equation): 
    left_side_of_equation = equation[0] 
    right_side_of_equation = equation[1] 
    operator = equation[2] 
    if operator == "ge": # Greater or equal 
     # Do your comparison 
    elif operator == "g": # Greater 
     # Do your comparison 
    # Add all remaining possibilities. 
+0

非常感謝!方程中的括號()是必要的嗎? –

+0

我該如何解決這個不等式,如ineq0 = pi0> = 0和 ineq1 = pi1> = 0? –

+0

不,它們不是必需的 - 它看起來對我更具可讀性。 – grael