Gauss-Seidel迭代法

Gauss-Seidel迭代法與雅可比迭代法沒有什麼大致區別,我們分別比較一下:

Gauss-Seidel迭代格式

雅可比迭代格式

我們對比發現,所不同的是,Gauss-Seidel總是採用最新信息。如計算 x_2^{(k+1)} 時,由於 x_1^{(k+1)}

已經算出,所以用 x_1^{(k+1)} 計算而不用 x_1^{(k)} ,計算 x_3^{(k+1)} 時,用前兩者的信息,其餘同理。

知道這個原理,就不難理解下面的具體計算公式:

其中D是對角陣,L是對角線元素為0的下三角矩陣的倒數。

在雅可比迭代那一節我們講過A=D-L-U,如果忘了可以去看看:雅可比迭代

我們下面舉個例子:

代碼實現如下:

%高斯-賽德爾迭代法,計算線性方程組的解nfunction [x,k] = Gauss_Seidel_interation(A,b,x0,tol)n% tol為輸入誤差容限,x0為迭代初始值nn% 默認最多迭代300次,超出300次會給出警示nmax1 = 300;nn%% diag(diag(X))n%% 取出X矩陣的對角元,然後構建一個以X對角元為對角的對角矩陣。nD = diag(diag(A));nn%求A的下三角矩陣,對角線元素為0,再每個矩陣元素取負號nL = -tril(A,-1);nn%求A的上三角矩陣,對角線元素為0,再每個矩陣元素取負號nU = -triu(A,1);nn% 表示對(D-L)求逆nG = (D-L)U;nf = (D-L)b;nx = G*x0+f;nk = 1;nnwhile norm(x-x0)>=toln x0 = x;n x = G*x0+f;n k = k+1;n if (k>=max1)n disp(迭代次數超過,max1,次,方程組可能不收斂);n %% 在MATLAB中遇到return的意思就是結束整個函數的執行,n %% break是僅僅跳出循環體n return;n endn n %該命令的作用是顯示每一步的迭代結果,注意x是列向量,』表示轉置的意思,所以要加』n [k,x]nendn

我們在編輯界面輸入如下命令:

A = [8,-3,2;4,11,-1;2,1,4];nb = [20,33,12];nx0 = [0,0,0];n[x,k] = Gauss_Seidel_interation(A,b,x0,1e-7)n

最後得出結果如下:


推薦閱讀:

迭代益於進步
客戶端產品迭代周期為多長時間比較合適?
「遞歸」和「迭代」有哪些區別?

TAG:迭代 | 数值分析 |