实验五 线性方程组的迭代法实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算方法》实验报告
学院:信息学院
专业:计算机科学与技术
指导教师:郭卫斌
班级学号:10101438 计102
姓名:闻翰
计算机科学与工程系
实验五 线性方程组的迭代法实验
一. 实验目的
(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭
代过程的收敛性,以及解决某些实际的线性方程组求解问题。 (2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。
二. 实验要求
建立Jacobi 迭代公式、Gauss-Seidel 迭代公式和超松弛迭代公式,用Matlab 软件实现线性方程组求解的Jacobi 迭代法、Gauss-Seidel 迭代法和超松弛迭代法,并用实例在计算机上计算。
三. 实验内容
1. 实验题目
(1)分别利用Jacobi 迭代和Gauss-Seidel 迭代求解下列线性方程组,取
()T 0,0,0,0,0,0=x ,要求精度5
10-=ε:
⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤
⎢
⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---------------62605041
1
141010014001100410010141001014654321x x x x x x
(2)分别取1=ω、1.05、1.1、1.25和1.8,用超松弛法求解上面的方程组,要求精度
为510-=ε。 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迭代: