美文网首页
SQR逐次超松弛迭代法

SQR逐次超松弛迭代法

作者: Hiper | 来源:发表于2019-08-20 16:49 被阅读0次
    A=[4,3,0;3,4,-1;0,-1,4]
    b=[24;30;-24]
    

    SQR迭代法是对GS迭代法的又一改进,在每一解向量分量处取其先前分量与GS迭代法算出的分量值的加权平均。
    其中w松弛因子决定了加权的系数,若SQR方法收敛,则w的取值范围为0~2。

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

    相关文章

      网友评论

          本文标题:SQR逐次超松弛迭代法

          本文链接:https://www.haomeiwen.com/subject/itgusctx.html