实验报告
专业:数学与应用数学(师范)
年级:09级班级:as09101 学号:as0910135 姓名:曾晓冰
一、实验目的
1.掌握用迭代法求解线性方程组的基本思想和计算步骤;
2.能熟练地写出Jacobi迭代法的迭代格式的分量形式,并能比较它们各自的特点及误差估计;
3.理解迭代法的基本原理及特点,并掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代格式的分量形式、矩阵形式及其各自的特点;
4.掌握Jacobi迭代Gauss-Seidel迭代和SOR迭代算法的MATLAB程序实现方法,及了解松弛因子对SOR迭代的影响;
5.用SOR迭代法求解线性方程组时,超松弛因子ω的取值大小会对方程组的解造成影响,目的就是能够探索超松弛因子ω怎样对解造成影响,通过这个实验我们可以了解ω的大致取值范围。
二、实验题目
题目1、解线性方程组的迭代法
书本P33 (Ⅱ)上机实验2.1(1)
利用算法2.1(Jacobi迭代法),编制Mathlab程序,求线性方程组
(1)
1
2
3
4 144444 4144416 4414436 4441756
x
x
x
x
-
??
????
?
? ?
?
? ?
=
?
? ?
?
? ? ? ?
?
????
??
题目2、解线性方程组的直接法
书本P59 (Ⅱ)上机实验3.1(2)
3.1利用算法3.1(顺序Gauss消去法),编制Mathlab程序,求线性方程组
(2)
1
2
3
4
10.4 1.2 2.2 1.910.54
1.511.2 3.5
2.522.47
2.1 1.59.6 1.818.27 1.6 4.5 1.412.829.93
x
x
x
x
??
????
?
? ?
-
?
? ?
=
?
? ?
-
?
? ? ? ?
?
????
??
三、实验原理
题目1:运用了Jacobi 迭代算法思想:
Jacobi 的迭代格式:
(1)1()1()k K x D D A X D b +--=-+
1. 取初始点x(0),精度要求ε,最大迭代次数N ,置k :=0;
2. 由n 1i ),x a -
(b x n i j 1,j (k)
j j i i 11)(k i
,,?==∑≠=+ii a ,计算出x (k+1); 3. 若
ε≤-∞+)
()1(k k x x ,则停算,输出x(k+1)作为方程组的近
似解; 4. 若k=N ,则停算,输出迭代失败信息;否则置k :=k+1,转步2。
题目2:运用了Gauss-Seidel 迭代算法思想:
Gauss-Seidel 迭代的计算格式:
1(1)(1)()11
1()i n k k k i i i j j i j j j j i i j x b a x a x a -++==+=--∑∑ 1.输入矩阵A ,右端向量b ,初始点x(0),精度要求ε,最大迭代次数N ,置k:=0;
2.计算
nn
n ii i a x n i a xi a ???? ??=-?=???
? ??-=???
? ??=∑∑∑∑==+==1-n 1j (0)j nj n 1-i 1j n 1j (0)j ij j ij i 11n 2j (0)j 1j 11x a -b ,
1,,2,x a x a -b ,
x a -b x
3.
若
ε≤-∞)
0(x x ,则停算,输出x 作为方程组的近似解; 4. 若k=N ,则停算,输出迭代失败信息;否则置x (0):=x ,k:=k+1,
转步骤2。
四、实验内容
1、实验步骤
题目1、(1)打开matlab 软件,在matlab 命令窗口执行程序,并在命令窗口编
写程序,运行程序(见附录一),记录结果(见实验结果1.1)。
题目2、(1)打开matlab 软件,在matlab 命令窗口执行程序,并在命令窗口编
写程序,运行程序(见附录二),记录结果(见实验结果1.2)。
五、实验结果
1.1
1.2
六、实验结果分析
1、由实验结果1.1可以知道书本上机实验题2.1(1)解得的结果为x=(-2 0 2 4)’,由k=96知道方程组的迭代次数为96次,没有超出设定的迭代次数的上限。
2、由实验结果1.2可以知道书本上机实验题3.1(2)解得的结果为x=(1.1877 -2.1199 -2.4319 3.2011)’。
附录一:
% 第1题程序
·%建立M文件,并编写以下程序
function x=majacobi(A,b,x0,ep,N)
n=length(b);
if nargin<5,N=500;end
if nargin<4,ep=1e-6;end
if nargin<3,x0=zeros(n,1);end
x=zeros(n,1); k=0;
while k for i=1:n x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i); end if norm(x-x0,inf) x0=x;k=k+1; end if k==N,Warning('已达到迭代次数上限');end disp(['k= ',num2str(k)]) %在命令窗口编写以下程序 >> A=[14 4 4 4;4 14 4 4;4 4 14 4;4 4 4 14]; >> b=[-4 16 36 56]'; >> x=majacobi(A,b) k= 94 附录二: ·%建立M文件,并编写以下程序 %magauss.m function x=magauss(A,b,flag) if nargin<3,flag=0;end n=length(b); for k=1:(n-1) m=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k); A(k+1:n,k)=zeros(n-k,1); if flag~=0, Ab=[A,b], end end x=zeros(n,1); x(n)=b(n)/A(n,n); for k=n-1:-1:1 x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k); end %在命令窗口编写以下程序 >> A=[10.4 1.2 2.2 1.9;1.5 11.2 3.5 2.5;2.1 1.5 9.6 1.8;1.6 4.5 1.4 12.8]; >> b=[10.54 -22.47 -18.27 29.93]'; >> x=magauss(A1,b1);x1' (此报告版权归本人所有,任何单位或个人不得以任何形式传播、盗版此报告,否则将追究其法律责任)