当系数矩阵A为正定对称阵时w取大于1小于2,算法阿苏有效否则无法加速,反而变慢。
代码:
close all; clear all; clc;
A = [2, -1, 0;
-1, 2, -1;
-0, -1, 2];%方程系数矩阵
b = [1; 0; 1.8]; %方程右端常数项
D = diag(diag(A)); %对角线
L = -( tril(A) - diag(diag(A)) ); %下三角矩阵
U = -( triu(A) - diag(diag(A)) ); %上三角矩阵
B = inv(D-L)*U;
f = inv(D-L)*b;
C = norm(B,2) / (1 - norm(B,2));
%传统高斯塞勒尔迭代法
Out = 1;
i = 0;
X = [0;0;0];
X_New = [0;0;0];
while Out>=0.0001
X_New = B*X + f;
Out = C*norm(X_New-X,2);
X = X_New;
i = i+1;
end
X %输出线性方程组的解
i %输出循环次数
%当A为正定对称阵时,使用SOR超松弛方法做算法加速
Out = 1;
i = 0;
X = [0;0;0];
X_New = [0;0;0];
while Out>=0.0001
X_New = -0.4*X+1.4*(B*X + f);
Out = C*norm(X_New-X,2);
X = X_New;
i = i+1;
end
i %输出循环次数
结果,高斯塞勒尔迭代法 i = 17 , SOR加速 i = 16 。