设线性方程组为AX=B,则SOR(超松弛)迭代法的迭代公式为
\[{x}_{m}^{k+1}=(1-w){x}_{i}^{k}+\frac{w}{{a}_{mm}}(-\sum_{i=1}^{m-1} {{a}_{mi}{x}_{i}^{k+1}-\sum_{i=m+1}^{n} {{a}_{mi}{x}_{i}^{k}}+{b}_{m}})\]
对应的矩阵表达式为
\[{x}^{\{k+1\}}={B}_{0}{x}^{k}+f\]
其中,B0为SOR(超松弛)迭代矩阵,B0=(DwL) –1[(1w)D+wU],f=w(D+wL)1b,D为对角矩阵,L和U分别为严格下三角矩阵和严格上三角矩阵。据此,可以编写实现Gauss-Seidel迭代法的M文件SOR.m,如下所示。[大谦MATLAB,dqmatlab点com]
code.matlab
function s=SOR(a,b,x0,w,eps)
% 用SOR(超松弛)迭代法解线性方程组
% a为系数矩阵,b为方程组ax=b的右端项
% x0为初值,w为松弛因子
if nargin==4
eps=1.0e-6;
elseif nargin<4
error
return
end
D=diag(diag(a)); %求对角矩阵
L=-tril(a,-1); %求严格下三角矩阵
U=-triu(a,1); %求严格上三角矩阵
C=inv(D-w*L);
B=C*[(1-w)*D+w*U];
f=w*C*b;
s=B*x0+f;
while norm(s-x0)>=eps
x0=s;
s=B*x0+f;
end
return
【例5】用上面编写的SOR(超松弛)函数求解下列方程组
\[\left\{ \begin{matrix} 4{x}_{1}+3{x}_{2}=24 \\ 3{x}_{1}+4{x}_{2}-{x}_{3}=30 \\ -{x}_{2}+4{x}_{3}=-24 \end{matrix} \right.\]
下面用MATLAB实现,在命令窗口中输入
code.matlab
>> a=[4 3 0;3 4 -1;0 -1 4];
>> b=[24 30 -24]';
>> x0=[1 1 1]';
>> w=1.25;
>> SOR(a,b,x0,w)
ans =
3.0000
4.0000
-5.0000