1. 程式人生 > >數值分析--線性方程組解的演算法(6種)(附演算法百度雲連結,純手寫原創)

數值分析--線性方程組解的演算法(6種)(附演算法百度雲連結,純手寫原創)

先上乾貨百度雲(純手寫,純HTML,可直接開啟),如下:

注:參考書籍《數值分析》北京航空航天大學出版社

一、順序GUASS消去法

點進去如下,先輸入要解的N階矩陣:

比如,我們輸入3:

出現下方的矩陣框,為(N+1)*N的增廣矩陣,輸入待計算的矩陣,然後點選計算即可,比如:

所代表的含義即:

X1+X2+2X3=4

2X1+3X2+5X3=12

4X1+X2+2X3=2

之後所有的介面也雷同,只是計算演算法不一樣

順序GAUSS消去法演算法:通過最傳統的方式將矩陣化為上三角模式,這個過程叫消元,然後從最後一行開始進行回代計算,稱之為回代過程。

通過記事本開啟HTML或者在瀏覽器中按F12即可檢視原始碼,純開源:

順序GAUSS消去法演算法較簡單但注意失效條件,實質是滿足Cramer法則

附帶一個可設定有效數字的順序GAUSS法(就是在迭代過程加了設定有效數字)

二、列主元素的GAUSS消去法

主介面沒變化,如圖:

列主元的GAUSS消去與GAUSS消去大致步驟一致,只是在消元過程中,需要進行將k,k+1,....N行的矩陣進行大小排列,這樣做是為了減少舍入誤差,否則在數量級有差異的矩陣計算時就會出現較大的誤差(但其實,由於計算精度的提高,這些都很難造成影響,比如現在的精度是小數點後12位,那麼只有在數量級相差12以上才可能造成誤差,如10的12次方和0.1這種,也僅僅是可能,還要考慮計算過程中實際情況)

原始碼就不貼圖了,直接下載HTML自行檢視吧= = 。

三、Doolittle分解法和Crout分解法

這兩種方法都是直接三角分解法,利用的原理是A=LU,矩陣可分解為上三角矩陣和下三角矩陣的乘積。介面有微小變化,展示分解矩陣與中間過程的y向量。如下:

其中分解矩陣為:

利用分解矩陣減少矩陣計算過程中的計算量。

Crout分解和Doolittle分解大同小異,只是前者是單位下三角陣×上三角,後者是下三角陣×單位上三角

四、選主元的Doolittle分解

總的來說,選主元的思路都是一樣的,都是把對角線上大的數放在前面,減少舍入誤差。

注意:由於這部分學的並不好,so sorry,開啟“選主元Doolittle分解法.html”時給出了提示,需要執行兩次,第一次相當於改變方程組順序,第二次才是計算過程。如果有大神,歡迎自行去除BUG

五、追趕法求解三對角線方程組

三對角線矩陣即只有對角線上3條線有非零實數,上圖:

提供自動補零功能,計算示意:

因為此型別矩陣太過於稀疏,所以採用3個n長度的陣列來分別儲存三條對角線上的引數,減少儲存消耗。其核心仍是crout分解法,相當於crout分解法在三對角線矩陣時的應用。

本篇文章沒有具體演算法步驟,但是在程式原始碼裡都有展示。具體演算法參見《數值分析(第四版)》顏慶津 編著。此文主要是我的淺顯理解,莫怪莫怪!