Matlab-8:松弛迭代法(SOR)
1 function [x,n,flag]=sor(A,b,eps,M,max1) 2 %sor函数为用松弛迭代法求解线性方程组 3 %A为线性方程组的系数矩阵 4 %b为线性方程组的常数向量 5 %eps为精度要求 6 %M为超弛因子 7 %max1为最大迭代次数 8 %u为线性方程组的解 9 %n为迭代次数 10 %flag为指标变量,flag='OK!'表示迭代收敛达到指标要求 11 %flag='fail!'表示迭代失败 12 if nargin<5 13 max1=10000; 14 end 15 if nargin<4 16 M=1; 17 end 18 if nargin<3 19 eps=1e-11; 20 end 21 k=length(A); 22 n=0; 23 x=zeros(k,1); 24 y=zeros(k,1); 25 flag='OK!'; 26 while 1 27 y=x; 28 for i=1:k 29 z=b(i); 30 for j=1:k 31 if j~=i 32 z=z-A(i,j)*x(j); 33 end 34 end 35 if abs(A(i,i))<1e-10 | n==max1 36 flag='fail!'; 37 return; 38 end 39 z=z/A(i,i); 40 x(i)=(1-M)*x(i)+M*z; 41 end 42 if norm(y-x,inf)<eps 43 break; 44 end 45 n=n+1; 46 end
算法推导:
胡冬冬