超鬆弛迭代法(SOR)
一般而言,因雅可比迭代收斂速度不夠快,所以在工程中應用不多。並且在雅可比迭代收斂速
度很慢的情況下,通常高斯-賽德爾方法也不會很快。我們可以對高斯-賽德爾方法做出一定的
修改,來提高收斂速度。本節,我們介紹超鬆弛迭代法。
下面我們對該演算法進行收斂性分析:
這裡我們解釋一下什麼叫嚴格對角佔優矩陣:嚴格對角佔優矩陣就是矩陣主對角線元素的的模
大於與他同行的其他元素的模的總和。
下面我們具體代碼實現一下:
%超鬆弛(SOR)迭代法,計算線性方程組的解nfunction [x,k] = SOR_iteration(A,b,x0,w,tol)n% tol為輸入誤差容限,x0為迭代初始值nn% 默認最多迭代300次,超出300次會給出警示nmax = 300;nnif(w<=0||w>=2)n % MATLAB中error語句用於報錯跳出,並可以給出相應提示n error(錯啦!w的值不符合要求);n n % 在MATLAB中遇到return的意思就是結束整個函數的執行,n % break是僅僅跳出循環體n return;nendnn% 取出X矩陣的對角元,然後構建一個以X對角元為對角的對角矩陣nD = diag(diag(A));nn% 求A的下三角矩陣,對角線元素為0,再每個矩陣元素取負號nL = -tril(A,-1);nn% 求A的上三角矩陣,對角線元素為0,再每個矩陣元素取負號nU = -triu(A,1);nn% 在MATLAB中inv是求矩陣的逆矩陣的意思,同具有一樣的功能nB = inv(D-L*w)*((1-w)*D+w*U);nf = w*inv((D-L*w))*b;nx = B*x0+f;nk = 1;nnwhile norm(x-x0)>=toln x0 = x;n x = B*x0+f;n k = k+1;n if(k>=max)n disp(迭代次數超過,max1,次,方程組可能不收斂);n return;n endn n [k,x]nendn
我們用超鬆弛迭代法求解一下下面的方程組:
在編輯界面輸入如下命令:
A = [4,-2,-1;-2,4,-2;-1,-2,3];nn% 注意必須加表示轉置nb = [0,-2,3];nx0 = [1,1,1];n[x,k] = SOR_iteration(A,b,x0,1.45,1e-6)n
最後計算結果如下:
推薦閱讀:
※迭代益於進步
※AP演算法中兩個參數的交替過程怎麼樣通俗的理解?
※客戶端產品迭代周期為多長時間比較合適?
※「遞歸」和「迭代」有哪些區別?