SQR迭代法是对GS迭代法的又一改进,在每一解向量分量处取其先前分量与GS迭代法算出的分量值的加权平均。
其中w松弛因子决定了加权的系数,若SQR方法收敛,则w的取值范围为0~2。
代码如下:
A=[4,3,0;3,4,-1;0,-1,4]
b=[24;30;-24]
function x=SQR(A,b)
% SQR逐次超松弛迭代法。
% 输入参数:
% A: 矩阵
% b: 向量
% w: 松弛因子
% x: 初始向量
% 输出参数:
% x:迭代得到的解向量
% 调用说明:
% x=SQR(A,b):调用函数迭代求出AX=b的解X。
% 版本号V1.5,编写于2019年8月20号,修改于2019年8月20号,作者:Hiper
n=length(b);
M=zeros(n);
N=-A;
for i=1:n
M(i,i)=A(i,i);
N(i,i)=0;
end
B=M^-1*N;
f=M^-1*b;
while 1
w=input('请输入松弛因子w:');
if w<0||w>2
disp('松弛因子大小不正确,请重新输入!');
else
break;
end
end
while 1
x=input('请输入初始解向量x_0:');
if size(x)~=size(b)
disp('解向量大小不正确,请重新输入!')
else
break;
end
end
time=0;
while 1 %实现do while循环
for i=1:n
x(i)=w*(B(i,:)*x+f(i))+(1-w)*x(i);
end
time=time+1;
if norm(b-A*x)<(10e-7) %当解向量收敛到小于10e-7时结束迭代。
break;
end
end
fprintf('总共迭代次数为%d',time);