我遇到了問題。我已經到了我的應用程序能夠解決簡單系統的2個方程式這樣的點:具有2個變量的2個線性方程組的算法
1x + 2y + 3 = 0, 2x + 3y + 4 = 0
我正在使用消除方法。但是如果我想將等式乘以等於0的兩個數中的一個呢?然後它會扔垃圾。有沒有一些算法可以在a或b等於0時寫出幾個例外來解決這個問題? 非常感謝您提前。
我遇到了問題。我已經到了我的應用程序能夠解決簡單系統的2個方程式這樣的點:具有2個變量的2個線性方程組的算法
1x + 2y + 3 = 0, 2x + 3y + 4 = 0
我正在使用消除方法。但是如果我想將等式乘以等於0的兩個數中的一個呢?然後它會扔垃圾。有沒有一些算法可以在a或b等於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
有一些算法來解決,而不需要寫一對夫婦,當a或b等於0的異常?
如果行列式爲零,則不會有解。除非你可以拋棄ArithmeticException
除零,否則沒有辦法做到這一點,而不使用額外的if/else檢查或try/catch塊。
在2x2的情況下,使用Cramer規則(包含由行列式進行劃分)是我相信編程的最優雅的方式,因爲它並不特別關心哪些係數爲零;只是行列式不爲零。
如果行列式爲零,那麼不存在解。可能沒有解決方案或無限多的解決方案。 – Henry
有一個超級簡單的解決方案,使用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()
我以幾個(10)「if」語句結束。這些算法非常難以理解(至少對我而言),因爲我只是在高中。無論如何,非常感謝你所有的迴應:)
你知道克萊默算法求解方程組嗎? –
我從來沒有聽說過它。在Google上找不到任何可用的內容,您能解釋一下嗎? – bubakovsky
這是解決此類系統的最佳方法。 –