《计算方法》
实验报告
学 院: 信息学院
专 业: 计算机科学与技术
指导教师: 郭卫斌
班级学号: 10101438 计102
姓 名: 闻翰
计算机科学与工程系
实验五 线性方程组的迭代法实验
一. 实验目的
(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭
代过程的收敛性,以及解决某些实际的线性方程组求解问题。 (2)熟悉Matlab编程环境,利用Matlab解决具体的方程求根问题。
二. 实验要求
建立Jacobi迭代公式、Gauss-Seidel迭代公式和超松弛迭代公式,用Matlab软件实现线性方程组求解的Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法,并用实例在计算机上计算。
三. 实验内容
1. 实验题目
(1)分别利用Jacobi迭代和Gauss-Seidel迭代求解下列线性方程组,取
T5
x0,0,0,0,0,0,要求精度10:
410100
141010
014001
100410
010141
0x10
x0521x300x461x5246x6
(2)分别取1、1.05、1.1、1.25和1.8,用超松弛法求解上面的方程组,要求精度
为105。 2. 设计思想 1.Jacobi迭代:
Jacobi迭代的设计思想是将所给线性方程组逐步对角化,将一般形式的线性方程组的求解归结为对角方程组求解过程的重复。 2.Gauss-Seidel迭代:
Gauss-Seidel迭代的设计思想是将一般形式的线性方程组的求解过程归结为下三角方程组求解过程的重复。 3.超松弛迭代:
基于Gauss-Seidel迭代,对i=1,2,…反复执行计算迭代公式,即为超松弛迭代。
3. 对应程序 1.Jacobi迭代:
function [x,k]=Jacobimethod(A,b,x0,N,emg)
%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值
% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解 n=length(A);
x1=zeros(n,1);x2=zeros(n,1); x1=x0;k=0;
r=max(abs(b-A*x1)); while r>emg for i=1:n sum=0; for j=1:n if i~=j
sum=sum+A(i,j)*x1(j); end end
x2(i)=(b(i)-sum)/A(i,i); end
r=max(abs(x2-x1)); x1=x2; k=k+1; if k>N
disp('迭代失败,返回'); return; end end x=x1;
2.Gauss-Seidel迭代:
function [x,k]=Gaussmethod(A,b,x0,N,emg)
%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值 % N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解 n=length(A);
x1=zeros(n,1);x2=zeros(n,1); x1=x0;
r=max(abs(b-A*x1)); k=0;
while r>emg for i=1:n sum=0; for j=1:n if j>i
sum=sum+A(i,j)*x1(j); elseif j
sum=sum+A(i,j)*x2(j); end end
x2(i)=(b(i)-sum)/A(i,i); end
r=max(abs(x2-x1)); x1=x2; k=k+1; if k>N
disp('迭代失败,返回'); return; end end x=x1;
3.超松弛(SOR)迭代:
function [x,k]=SORmethod(A,b,x0,N,emg,w)
%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值 % N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解 %w表示松弛因子
n=length(A);
x1=zeros(n,1);x2=zeros(n,1); x1=x0;
r=max(abs(b-A*x1)); k=0;
while r>emg for i=1:n sum=0; for j=1:n if j>=i
sum=sum+A(i,j)*x1(j); elseif j
sum=sum+A(i,j)*x2(j); end end
x2(i)=x1(i)+w*(b(i)-sum)/A(i,i); end
r=max(abs(x2-x1)); x1=x2; k=k+1; if k>N
disp('迭代失败,返回'); return; end end x=x1;
4. 实验结果 1.Jacobi迭代:
2.Gauss-Seidel迭代:
3.超松弛(SOR)迭代: w=1:
w=1.05:
w=1.1:
w=1.25:
w=1.8:
四. 实验体会
在同等精度下,Gauss-Seidel迭代法比Jacobi迭代法收敛速度快。一般来说,Gauss-Seidel迭代法比Jacobi迭代法收敛要快,但有时反而比Jacobi迭代法要慢,而且Jacobi迭代法更易于优化。因此,两种方法各有优缺点,使用时要根据所需适当选取。
当松弛因子为1时,超松弛迭代方法等同于Gauss-Seidel迭代法,这和理论推导完全相同。另外,超松弛迭代法的收敛速度完全取决于松弛因子的选取,一个适当的因子能大大提高收敛速度。