Gauss-Seidel迭代法
Gauss-Seidel迭代法與雅可比迭代法沒有什麼大致區別,我們分別比較一下:
我們對比發現,所不同的是,Gauss-Seidel總是採用最新信息。如計算 時,由於
已經算出,所以用 計算而不用 ,計算 時,用前兩者的信息,其餘同理。
知道這個原理,就不難理解下面的具體計算公式:
其中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
最後得出結果如下:
推薦閱讀: