高斯消元 解求精技術 Python

2021-08-11 08:18:15 字數 2201 閱讀 9790

最近剛學習了高斯消元,老師要求我們用python實現高斯消元的解求精技術。所謂高斯消元的解求精技術主要包含以下三種:

在方程的規範化過程中,會出現除零的問題。

所謂除零問題,就是:在方程組相應的係數矩陣中,主對角線的值出現0或全為0時,用程式設計方式實現高斯消元法時,就要對各個方程的順序進行調整,稱為除0。

因為計算機是不會像人類一樣,知道出現0,就會自動地將方程調換順序,對計算機來說,實現高斯消元還要加上除零這個步驟。這個時候,就需要交換主元。

首先要確定主元下的列的最大係數。

1.將最大係數的行和原主元的行進行交換,成為新的主元行,這個方法稱為部分交換主元

2.將行和列都進行最大值的選擇搜尋並交換,成為新主元的行和列,這個方法稱為完全交換主元

一般來說,常使用部分交換主元法。

例如:

使用高斯消元法求解方程組:

0.0003 x1 + 3.0000 x2 = 2.0001

1.0000 x1 + 1.0000 x2 = 1.0000

準確解應為: x1 = 1/3,x2 = 2/3

# coding=utf-8

# 高斯消元法

# 0.0003x1+3.0000x2=2.0001

# 1.0000x1+1.0000x2=1.0000

# 交換主元

defgauss

(): matrix1 = [[0.0003, 3.0000], [1.0000, 1.0000]]

matrix2 = [2.0001, 1.0000]

result = [0, 0]

k = 0

p = k

big = matrix1[k][k]

for i in range(k+1, 1):

dummy = matrix1[i][k]

if dummy > big :

big = dummy

p = i

if p != k :

for j in range(k, 1):

dummy = matrix1[p][j]

matrix1[p][j] = matrix1[k][j]

matrix1[k][j] = dummy

dummy = matrix2[p]

matrix2[p] = matrix2[k]

matrix2[k] = dummy

for w in range(0, 0):

for i in range(w+1, 1):

factor = matrix1[i][w]/matrix1[w][w]

for j in range(w+1, 1):

matrix1[i][j] = matrix1[i][j] - factor * matrix1[w][j]

matrix2[i] = matrix2[i] - factor * matrix2[w]

for w in range(0, 1):

result[w] = matrix2[w] / matrix1[w][w]

for i in range(0, 0):

sum = matrix2[i]

for j in range(i+1, 1):

sum = sum - matrix1[i][j] * result[j]

result[i] = sum / (matrix1[i][j] * 10000)

print result

if __name__ == '__main__':

res = gauss()

print res

各位大佬請注意!

程式執行結果是有問題的,但是由於我不會改,於是就這樣了,**僅供參考。

結果求得: x1 = 6667.000000000001, x2 = 0

跪求知道原因的大佬指出錯誤,交流學習。

將某行方程組的係數進行縮小或放大,可以使得行列式的大小標準化,還可以減小捨入誤差。

但是需要注意的是,縮放的目的只是判斷是否需要交換主元,並不是為了真正的縮小放大方程係數。

縮小或放大係數後模擬高斯消元解方程的過程,若合適,再交換主元,而不是縮放。

希望有更多的人跟我**這個程式的解決辦法!再次感謝!

高斯消元法求方程組的解

高斯消元法 也叫行化簡法 簡單地來說就是構造方程組的增廣矩陣,將增廣矩陣化為階梯型,將每一行主元位置化為1,主元下面元素都為0。最後從下往上依次代入求解。至於主元的選擇,最簡單的就是從第一行開始依次選取主對角線上的元素,但是這樣做的有一點需要注意就是如果主元非常小,就可能除了之後產生非常大的數字,可...

矩陣求逆 高斯消元拓展

高斯消元 對於兩個矩陣a,b a,ba,b,如果a b e a times b e a b e 其中e ee 為單位矩陣,那麼我們稱b bb是a aa的逆矩陣,a aa為可逆矩陣。前置 單位矩陣 eee 單位矩陣的定義 乙個從左上角到右下角的對角線 主對角線 的元素全部為1 11,其餘元素全部為0 ...

高斯消元法求逆矩陣

僅供自己學習記錄。沒有處理主對角線有0得情況與沒有逆矩陣的情況,但也基本夠用了。const int row 4 int res row row void gauss float mat row row else 2.化為行階梯形式 特殊處理第一行 for int i 1 i row i 對角線元素歸...