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);
相關文章
相關標籤/搜索