2014-01-11 26 views
-1

我遇到了問題。我已經到了我的應用程序能夠解決簡單系統的2個方程式這樣的點:具有2個變量的2個線性方程組的算法

1x + 2y + 3 = 0, 2x + 3y + 4 = 0 

我正在使用消除方法。但是如果我想將等式乘以等於0的兩個數中的一個呢?然後它會扔垃圾。有沒有一些算法可以在a或b等於0時寫出幾個例外來解決這個問題? 非常感謝您提前。

+0

你知道克萊默算法求解方程組嗎? –

+0

我從來沒有聽說過它。在Google上找不到任何可用的內容,您能解釋一下嗎? – bubakovsky

+0

這是解決此類系統的最佳方法。 –

回答

0

The pseudocode from Wikipedia包含一個檢查以確保您不會被零除。爲了完整起見,這裏是一個副本:

for k = 1 ... m: 
    Find pivot for column k: 
    i_max := argmax (i = k ... m, abs(A[i, k])) 
    if A[i_max, k] = 0 
    error "Matrix is singular!" 
    swap rows(k, i_max) 
    Do for all rows below pivot: 
    for i = k + 1 ... m: 
    Do for all remaining elements in current row: 
     for j = k ... n: 
     A[i, j] := A[i, j] - A[k, j] * (A[i, k]/A[k, k]) 
    Fill lower triangular matrix with zeros: 
    A[i, k] := 0 
0

有一些算法來解決,而不需要寫一對夫婦,當a或b等於0的異常?

如果行列式爲零,則不會有解。除非你可以拋棄ArithmeticException除零,否則沒有辦法做到這一點,而不使用額外的if/else檢查或try/catch塊。

在2x2的情況下,使用Cramer規則(包含由行列式進行劃分)是我相信編程的最優雅的方式,因爲它並不特別關心哪些係數爲零;只是行列式不爲零。

+0

如果行列式爲零,那麼不存在解。可能沒有解決方案或無限多的解決方案。 – Henry

0

有一個超級簡單的解決方案,使用Python和sympy庫來解決方程。

from sympy import solve, symbols 
x,y = symbols('x,y') 
sis = solve([x + 2 * y + 3, 2 * x + 3 * y + 4], [x,y]) 
print sis[x].evalf() 
print sis[y].evalf() 
0

我以幾個(10)「if」語句結束。這些算法非常難以理解(至少對我而言),因爲我只是在高中。無論如何,非常感謝你所有的迴應:)

相關問題