高斯消元(Gaussian elimination)
我們將分兩個部分來說明高斯消去,第一部分是數學方面,第二個部分是如何用 C++ 來實現。
第一部分 數學知識
什么是高斯消去
高斯消元法(或譯:高斯消去法),是線性代數規劃中的一個算法,可用來為線性方程組求解。
?
高斯消元的目標是將矩陣變為上三角矩陣,例如,對應的矩陣為就是一個上三角矩陣(upper triangular matrix)。
對于一個線性方程組,我們可以寫出兩個矩陣(系數矩陣 coefficient matrix 和增廣矩陣 Augmented?Matrix),如下圖所示。
下面我們用一個圖片簡單的說明一下高斯消去。
當形成上圖所示的上三角形狀,我們可以非常簡單的解出方程的解。這樣的方法就是高斯消去法。
高斯消去步驟
高斯消去法的過程可以分為以下幾步:
(一)、構造增廣矩陣。即系數矩陣 A 加上常數向量 b,也就是 (A|b)。
(二)、通過以交換行、某行乘以非負常數和兩行相加這三種初等變化將原系統轉化為更簡單的三角形式
(三)、得到簡化的三角方陣組。
(四)、使用向后替換算法(Algorithm for Back Substitution)求解得。
高斯消去步驟總結
方法一:原線性方程組?高斯消元法?上三角形式的線性方程組前向替換算法求解。
方法二:原線性方程組?高斯消元法下三角形式的線性方程組后向替換算法求解。
高斯消去細節
順序消去法雖然編程操作簡單,但是存在以下兩方面限制:
(1).每次運算時,必須保證對角線上的元素不為0(即運算中的分母不為0),否則算法無法繼續進行。
(2).即使的值不為零,但如果絕對值很小,由于第k次運算中在分母位置,因此作除數會引起很大的誤差,從而影響算法的穩定性。
正是由于順序消去法會因為的值過小而引入計算誤差,為了減少計算過程中舍入誤差對方程組求解的影響,因此是否可以選擇絕對值盡可能大的主元作為除數。基于這種思想就有了高斯消去法的改進型:部分主元消去法(Gaussian Elimination with Partial Pivoting)。
Gaussian Elimination with Partial Pivoting
下面我們使用一個詳細的例子,來說明一下整個過程。假設我們有這樣一個方程:
這樣,我們可以得到對應的增廣矩陣為,我們將使用列主元的方法。
Step 0a
找主元。主元就是左邊矩陣的第一列絕對值最大的數。
Step 0b
如果需要,進行行交換,這樣保證主元在第一行。
如上圖所示的增廣矩陣,第一列的主元為 1,因此我們需要進行行交換。交換后的矩陣如下圖。
Step 1
對第一列進行高斯消去,這樣我們可以得到下圖的增廣矩陣。
這樣,我們就完成了第一列的高斯消去。
Step 2
查找下一列(第二列)的主元。注意已經完成的列不需要參與。
Step 3
交換行,如果需要。我們必須保證這個主元在這列的對角線位置。
如上圖所示,我們可以看到第二列的主元為 1,因為第一行已經完成消元,不需要參與。
Step 4
對第二列進行高斯消去,這樣我們可以得到下圖的增廣矩陣。
Step 5
查找下一列(第三列)的主元。注意已經完成的列不需要參與。
Step 6
交換行,如果需要。
Step 7
對第三列進行高斯消去,這樣我們可以得到下圖的增廣矩陣。
Step 8
到這里,我們就形成了上三角矩陣,下面我們用后向替換算法求解。
利用主元法,我們可以消除舍入誤差(rounding errors)。
第二部分 算法實現
C++
Python
?
模板題
洛谷 P3389 【模板】高斯消元法,https://www.luogu.com.cn/problem/P3389。
總結
以上是生活随笔為你收集整理的高斯消元(Gaussian elimination)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联通系统升级服务器地址,联通iptv升级
- 下一篇: Typora编辑数学公式