SQR逐次超松弛迭代法(matlab代码实现)

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

你可能感兴趣的:(matlab)