概述
用MATLAB编程实现,形成m函数文件。输入A,b矩阵,与松弛因子 ω\omegaω,无返回值。设置精度要求ε=10−4\varepsilon=10^{-4}ε=10−4。所得解向量向量直接显示在命令行窗口,同时绘制出解向量的收敛曲线。
判断迭代方法收敛性时计算高斯塞德尔迭代矩阵谱半径以判断。
代码与运行结果
function [] = sor(A,b,w)
%基于高斯塞德尔的超松弛迭代求解向量
G=-(tril(A))\triu(A,1);
R=max(abs(eig(G)));
if(R>=1)
disp('SOR is not work');
else
disp('SOR is going well');
disp('x vector:')
l=length(b);
x=zeros(size(b));
xs=0;
xe=0;
for k=1:100
for i=1:l
for j=1:i-1
xs=xs+A(i,j)*x(j,k+1);
end
for j=i:l
xe=xe+A(i,j)*x(j,k);
end
x(i,k+1)=x(i,k)+(w/A(i,i))*(b(i)-xs-xe);
xs=0;
xe=0;
end
if(max(abs(x(:,k+1)-x(:,k)))<10^-4)
break;
end
end
disp(x(:,k+1));
e=1:k+1;
plot(e,x,'- o');
xlabel('generations');
ylabel('vector x');
end
end
令:
A=[51−1−228131−2−4−1−1327]b=[−2−6612]
A=\begin{bmatrix} 5&1&-1&-2\\2&8&1&3\\1&-2&-4&-1\\-1&3&2&7\end{bmatrix}
b=\begin{bmatrix} -2\\-6\\6\\12\end{bmatrix}\\
A=⎣⎢⎢⎡521−118−23−11−42−23−17⎦⎥⎥⎤b=⎣⎢⎢⎡−2−6612⎦⎥⎥⎤
ω=1.15\omega=1.15ω=1.15
A=[5 1 -1 -2;2 8 1 3;1 -2 -4 -1;-1 3 2 7];
b=[-2;-6;6;12];
sor(A,b,1.15);
SOR is going well
x vector:
1.0000
-2.0000
-1.0000
3.0000

与雅可比、高斯塞德尔方法比较
A=[51−1−228131−2−4−1−1327]b=[−2−6612]
A=\begin{bmatrix} 5&1&-1&-2\\2&8&1&3\\1&-2&-4&-1\\-1&3&2&7\end{bmatrix}
b=\begin{bmatrix} -2\\-6\\6\\12\end{bmatrix}\\
A=⎣⎢⎢⎡521−118−23−11−42−23−17⎦⎥⎥⎤b=⎣⎢⎢⎡−2−6612⎦⎥⎥⎤
ω=1.15\omega=1.15ω=1.15
雅可比方法

高斯塞德尔方法

相较之下,SOR方法迭代次数缩短,求解时间减少。但需要选择恰当的松弛因子ω\omegaω 。
本文介绍了如何使用MATLAB编程实现超松弛迭代(SOR)求解线性方程组,并展示了如何计算谱半径判断收敛性。通过A=[5 1 -1 -2; 2 8 1 3; 1 -2 -4 -1; -1 3 2 7]和b=[-2 -6 6 12]的示例,展示了SOR方法的求解过程和结果,以及与雅可比和高斯塞德尔方法的对比,突出了SOR在迭代效率上的优势。
8240

被折叠的 条评论
为什么被折叠?



