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);