线性方程组的数值解法实验

合集下载

实验5_线性代数方程组的数值解法

实验5_线性代数方程组的数值解法

实验5 线性代数方程组的数值解法化工系 毕啸天 2010011811【实验目的】1. 学会用MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2. 通过实例学习用线性代数方程组解决简化的实际问题。

【实验内容】题目3已知方程组Ax=b ,其中A ,定义为⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------=32/14/12/132/14/14/12/132/14/14/12/132/14/12/13A试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对收敛速度的影响。

实验要求:(1)选取不同的初始向量x (0)和不同的方程组右端项向量b ,给定迭代误差要求,用雅可比迭代法和高斯-赛德尔迭代法计算,观测得到的迭代向量序列是否均收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论;(2)取定右端向量b 和初始向量x (0),将A 的主对角线元素成倍增长若干次,非主对角线元素不变,每次用雅可比迭代法计算,要求迭代误差满足 ,比较收敛速度,分析现象并得出你的结论。

3.1 模型分析选取初始向量x(0) =(1,1,…,1)T ,b=(1,1,…,1)T ,迭代要求为误差满足 ,编写雅各比、高斯-赛德尔迭代法的函数,迭代求解。

3.2 程序代码function x = Jacobi( x0,A,b,m ) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); B1=D\(L+U); f1=D\b; x(:,1)=x0;x(:,2)=B1*x(:,1)+f1; k=1;while norm((x(:,k+1)-x(:,k)),inf)>m x(:,k+2)=B1*x(:,k+1)+f1; k=k+1; endendfunction x = Gauss( x0,A,b,m )D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B2=(D-L)\U;f2=(D-L)\b;x(:,1)=x0;x(:,2)=B2*x(:,1)+f2;k=1;while norm((x(:,k+1)-x(:,k)),inf)>mx(:,k+2)=B2*x(:,k+1)+f2;k=k+1;endendA1=3.*eye(20,20);A2=sparse(1:19,2:20,-1/2,20,20);A3=sparse(1:18,3:20,-1/4,20,20);AA=A1+A2+A3+A2'+A3';A=full(AA);b=ones(20,1); %输入自选右端项向量b x0=ones(20,1); %输入自选初始向量x0 m=1e-5;x1=Jacob(x0,A,b,m);x2=Gauss(x0,A,b,m);结果输出数据:3.3.1将x0各分量初值置为0【分析】从数据中可以看出,当迭代的初值变化了,达到相同精度所需要的迭代次数也变化了。

线性方程组的数值解法实验报告

线性方程组的数值解法实验报告

实验报告——线性方程组的数值解法姓名:班级:学号:日期:一 实践目的1. 熟悉求解线性方程组的有关理论和方法。

2. 会编列主元消去法,全主元消去法,雅克比迭代法及高斯-赛德尔迭代法的程序。

3.通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

4. 进一步应用数学知识,扩展数学思维,提高编程能力。

二 问题定义及题目分析1.求解线性方程是实际中常遇到的问题。

而一般求解方法有两种,一个是直接求解法,一个是迭代法。

2.直接法是就是通过有限步四则运算求的方程准确解的方法。

但实际计算中必然存在舍入误差,因此这种方法只能得到近似解。

3.迭代法是先给一个解的初始近似值,然后按一定的法则求出更准确的解,即是用某种极限过程逐步逼近准确解的方法。

4.这次实践,将采用直接法:列主元高斯消去法,全主元高斯消去法;迭代法:雅克比迭代法和高斯-赛德尔迭代法。

三 详细设计 设有线性方程组11112211n n a x a x a x b +++=21122222n n a x a x a x b +++= 1122n n nn n n a x a x a x b +++=令A= 111212122212n n n n nn a a a aa a a a a ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ x=12n x x x ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ b= 12n b b b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦一. 上三角方程组的求解很简单。

所以若能将方程组化为上三角方程组,那就很容易得到方程的解,高斯消去法则是一种简洁高效的方法,可以将方程组化为上三角方程组,但是这种方法必须满足每一步时0kk a =才能求解,还有当kk a 绝对值很小时,作分母会引起较大的舍入误差。

因此在消元过程中应尽量选择绝对值较大的系数作为主元素。

1.列主元消去法很好的解决这一问题。

将1x 的系数1(1)k a k n ≤≤中绝对值最大者作为主元素,交换第一行和此元素所在的行,然后主元消去非主元项1x 的系数,。

数值计算08-线性方程组数值解法(优选.)

数值计算08-线性方程组数值解法(优选.)

0
(k=1,2,…,n) ,则可通过高斯消元法求出Ax=b 的解。
引理
A的主元素
a(k) kk
0
(k=1,2,…,n) 的充要条件
是矩阵A的各阶顺序主子式不为零,即
a11
a1k
D1 a11 0 Dk
0, k 2, 3, , n
ak1
akk
定理2 Ax=b 可用高 斯消元法求解的充分必要条件是: 系数矩阵 A 的各阶顺序主子式均不为零。
Page 5
线性代数方程组的计算机解法常用方法:
直接法 迭代法
消去法 矩阵三角分解法
Page 6
直接法:经过有限步算术运算,可求得方程组
的精确解的方法(若在计算过程中没有舍入误差)
迭代法:用某种极限过程去逐步逼近线性方程
组精确解的方法 迭代法具有占存储单元少,程序设计简单,原
始系数矩阵在迭代过程中不变等优点,但存在收 敛性及收敛速度等问题
a(k) ik
a(k) kk
aijk
mik
a
k
kj
bik1 bik mikbkk
xn
bnn annn
bii
n
a
i
ij
x
j
,
xi
ji1
aiii
i, j k 1, k 2,, n
i n 1,,2,1
高斯消元法的条件
Page 20
定理1
如果在消元过程中A的主元素
a(k) kk
即:
a111
a112 a222
a11n a22n
x1 x2
bb1212
an22
an2n
xn
bn2
其中:

实验五(线性方程组的数值解法和非线性方程求解)

实验五(线性方程组的数值解法和非线性方程求解)

1大学数学实验 实验报告 | 2014/4/5一、 实验目的1、学习用Matlab 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2、通过实例学习用线性代数方程组解决简化问题。

二、 实验内容项目一:种群的繁殖与稳定收获:种群的数量因繁殖而增加,因自然死亡而减少,对于人工饲养的种群(比如家畜)而言,为了保证稳定的收获,各个年龄的种群数量应维持不变。

种群因雌性个体的繁殖而改变,为方便起见以下种群数量均指其中的雌性。

种群年龄记作k=1,2,…,n ,当年年龄k 的种群数量记作x k ,繁殖率记作b k (每个雌性个体1年的繁殖的数量),自然存活率记作s k (s k =1−d k ,d k 为1年的死亡率),收获量记作ℎk ,则来年年龄k 的种群数量x ̌k 应该为x ̌k =∑b k n k=1x k , x ̌k+1=s k x k −ℎk , (k=1,2,…,n -1)。

要求各个年龄的种群数量每年维持不变就是要求使得x ̌k =x k , (k=1,2,…,n -1).(1) 如果b k , s k 已知,给定收获量ℎk ,建立求各个年龄的稳定种群数量x k 的模型(用矩阵、向量表示).(2) 设n =5,b 1=b 2=b 5=0,b 3=5,b 4=3,s 1=s 4=0.4,s 2=s 3=0.6,如要求ℎ1~ℎ5为500,400,200,100,100,求x 1~x 5.(3) 要使ℎ1~ℎ5均为500,如何达到?问题分析:该问题属于简单的种群数量增长模型,在一定的条件(存活率,繁殖率等)下为使各年龄阶段的种群数量保持不变,各个年龄段的种群数量将会满足一定的要求,只要找到种群数量与各个参量之间的关系,建立起种群数量恒定的方程就可以求解出各年龄阶段的种群数量。

模型建立:根据题目中的信息,令x ̌k =x k ,得到方程组如下:{x ̌1=∑b k nk=1x k =x 1x ̌k+1=s k x k −ℎk =x k+1整理得到:{−x 1∑b k nk=1x k =0−x k+1+s k x k =ℎk2 大学数学实验 实验报告 | 2014/4/52写成系数矩阵的形式如下:A =[b 1−1b 2b 3s 1−100s 2−1…b n−1b n0000⋮⋱⋮000000000⋯00−10s n−1−1]令h =[0, ℎ1,ℎ2,ℎ3,…,ℎn−2,ℎn−1]Tx =[x n , x n−1,…,x 1]T则方程组化为矩阵形式:Ax =h ,即为所求模型。

第12章 实验十线性方程组的数值解法

第12章 实验十线性方程组的数值解法

第12 章 实验十一线性方程组的数值解法实验目的:理解线性方程组基本定理,掌握求解线性方程组的各种方法,逆矩阵求法、高斯消去法、带选主元的分解法、迭代法。

12.1 线性方程组(基本定理) 已知m 个方程n 个未知量的方程组:⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++m n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a 22112222212********* (12.1)其中ij a 为已知系数,j x 未知,j b 为已知项,当),,2,1(n j b j =全为零时,称(12.1)方程组为线性齐次方程组,当),,2,1(n j b j =不全为零时,称(12.1)方程组为线性非齐次方程组。

上述方程组也可表示如下矩阵形式:b Ax = 其中A 、x 和y 分别定义为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=mn m n a a a a A LL L L L 1111⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=n x x x 1 ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=m b b b 1。

方程组(12.1)中的m 与n 有三种情况:m=n 或m<n 或m>n ,m=n 是最常见的。

当m=n 时,有系数矩阵的行列式0≠A ,方程组(12.1)有唯一解。

用矩阵的秩可以得到更满意的结果:(1)当n B R A R ==)()(时,方程组(12.1)有唯一解, (2)当n B R A R <=)()(时,方程组(12.1)有无穷多组解, (3)当)()(B R A R ≠时,方程组(12.1)无解。

12.2举例例12.1 用MATLAB 求解线性方程组:⎪⎪⎩⎪⎪⎨⎧=+++-=+++=+++=+++62332022428340213424321432143214321x x x x x x x x x x x x x x x x解法一:逆矩阵求法设 A=[1 2 1 4 ; 2 0 4 3 ;4 2 2 1 ;-3 1 3 2 ]; det(A)=-180, B=[13 28 20 6]’; 则:X=A\B % A\表示矩阵A 的逆,或用1-A 表示得到X =3.0000 -1.00004.0000 2.0000也可以用如下命令: X=B ’/A ’ 得到X =3.0000 -1.00004.0000 2.0000解法二:在MA TLAB 上,用高斯消去法求解方程组:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-62028132313122434024214321x x x x (12.2) 首先写出方程组对应的增广矩阵:a=[ 1 2 1 4 13; ... 2 0 4 3 28 ; ... 4 2 2 1 20 ; ...-3 1 3 2 6 ]其中前四列是系数矩阵,最后一列是方程组的常数列。

数值分析实验报告-清华大学--线性代数方程组的数值解法

数值分析实验报告-清华大学--线性代数方程组的数值解法

数值分析实验报告-清华大学--线性代数方程组的数值解法(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--线性代数方程组的数值解法实验1. 主元的选取与算法的稳定性问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。

但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。

主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

实验内容:考虑线性方程组 n n n R b R A b Ax ∈∈=⨯,,编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。

实验要求:(1)取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。

取n=10计算矩阵的条件数。

让程序自动选取主元,结果如何?(2)现选择程序中手动选取主元的功能。

每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。

若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。

重复上述实验,观察记录并分析实验结果。

程序清单n=input('矩阵A 的阶数:n=');A=6*diag(ones(1,n))+diag(ones(1,n-1),1)+8*diag(ones(1,n-1),-1); b=A*ones(n,1);p=input('计算条件数使用p-范数,p='); cond_A=cond(A,p) [m,n]=size(A);Ab=[A b];r=input('选主元方式(0:自动;1:手动),r=');Abfor i=1:n-1switch rcase(0)[aii,ip]=max(abs(Ab(i:n,i)));ip=ip+i-1;case (1)ip=input(['第',num2str(i),'步消元,请输入第',num2str(i),'列所选元素所处的行数:']);end;Ab([i ip],:)=Ab([ip i],:);aii=Ab(i,i);for k=i+1:nAb(k,i:n+1)=Ab(k,i:n+1)-(Ab(k,i)/aii)*Ab(i,i:n+1);end;if r==1Abendend;x=zeros(n,1);x(n)=Ab(n,n+1)/Ab(n,n);for i=n-1:-1:1x(i)=(Ab(i,n+1)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);endx运行结果(1)n=10,矩阵的条件数及自动选主元Cond(A,1) =×103Cond(A,2) = ×103Cond(A,inf) =×103程序自动选择主元(列主元)a.输入数据矩阵A的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=0b.计算结果x=[1,1,1,1,1,1,1,1,1,1]T(2)n=10,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[, , , , , , , , , ]Tb. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=10计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k 步选择主元处于第k+1行) 最终计算得x=[1,1,1,1,1,1,1,1,1,1]T(3)n=20,手动选主元a. 每步消去过程总选取按模最小或按模尽可能小的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:1(2)(2) 6.0000 1.00007.00004.6667 1.0000 5.66678.0000 6.000015.0000[]8.00001.000015.00006.0000 1.00008.0000 6.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:2…(实际选择时,第k 步选择主元处于第k 行) 最终计算得x=[,,,,,,,,,,,,,,,,,,,]T b. 每步消去过程总选取按模最大的元素作为主元 矩阵A 的阶数:n=20计算条件数使用p-范数,p=1选主元方式(0:自动;1:手动),r=1(1)(1)61786115[]861158614A b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第1步消元,请输入第1列所选元素所处的行数:2(2)(2)8.0000 6.0000 1.000015.0000-3.50000.7500-4.250008.0000 6.0000 1.000015.0000[]8.0000 6.000015.00008.0000 1.00006.0000 1.000015.00008.0000 6.000014.0000A b ⎡⎤⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦第2步消元,请输入第2列所选元素所处的行数:3…(实际选择时,第k步选择主元处于第k+1行)最终计算得x=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]T(4)A分别为幻方矩阵,Hilbert矩阵,pascal矩阵和随机矩阵简要分析计算(1)表明:对于同一矩阵,不同范数定义的条件数是不同的;Gauss消去法在消去过程中选择模最大的主元能够得到比较精确的解。

数值分析实验报告

数值分析实验报告
end
%消元过程
fori=k+1:n
m=A(i,k)/A(k,k);
forj=k+1:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*A(k,k);
end
det=det*A(n,n);
%回代过程
ifabs(A(n,n))<1e-10
flag='failure';return;
*x=(x0,x1….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Pn(x)在t处的函数值
*返回值 插值函数Pn(x)在t处的函数值
*/
procedureNewton
forj=0to n
d1jyj;
endfor
forj=1to n
fori=j to n
[n,m]=size(A);nb=length(b)
%当方程组行与列的维数不相等时,停止计算,并输出出错信息
ifn~=m
error('The row and columns of matrix A must beepual!');
return;
end
%当方程组与右端项的维数不匹配时,停止计算,并输出错误信息
clear
fprintf('gauss-seidel迭代法')
x1_(1)=0;
x2_(1)=0;
x3_(1)=0;
fori=1:9
x1_(i+1)=7.2+0.1*x2_(i)+0.2*x3_(i);

线性方程组的数值解法

线性方程组的数值解法

《大学数学实验》作业线性方程组的数值解法班级:姓名:学号:日期:目录目录 (2)【实验目的】 (3)【实验内容】 (3)【题目1】(课本习题第五章第3题) (3)【第(1)问求解】 (3)【第(2)问求解】 (11)【本题小结】 (12)【题目2】(课本习题第五章第5题) (13)【第(1)问求解】 (14)【第(2)问求解】 (15)【本题小结】 (16)【题目3】(课本习题第五章第7题) (16)【第(1)问求解】 (16)【第(2)问求解】 (18)【本题小结】 (19)【实验心得、体会】 (19)注:本实验作业matlab脚本文件均以ex5_3形式命名,其中ex代表作业,5_3表示第五章第三小题【实验目的】1.学会用MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2.通过实例学习用线性代数方程组解决简化的实际问题。

【实验内容】【题目1】(课本习题第五章第3题)已知方程组Ax=b,其中2020A R⨯∈,定义为31/21/41/231/21/41/41/231/21/41/41/231/431/21/41/231/21/41/23A --⎡⎤⎢⎥---⎢⎥⎢⎥----⎢⎥-⎢⎥⎢⎥=-⎢⎥⎢⎥⎢⎥--⎢⎥--⎢⎥⎢⎥--⎣⎦试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对收敛速度的影响。

实验要求:(1)选取不同初始向量x (0)和不同的方程组右端向量b,给定迭代误差要求,用雅克比和高斯——赛德尔迭代法计算,观测得到的迭代向量序列是否均收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论;(2)取定右端向量b 和初始向量x(0),将A 的主对角元素成倍增长若干次,非主对角元素不变,每次用雅克比迭代法,要求迭代误差满足(1)()5|||10k k x x +--<,比较收敛速度,分析现象并得出你的结论。

【第(1)问求解】【模型分析】对于矩阵A ,将其分解为:A=D-L-U,其中:D=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡3000030000000300003, L=000010002110042000110042⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦,U=110241000214100020000⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦其中D 、L 、U 均为20×20的方阵。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

线性方程组的数值解法
实验
题目
用Gauss消元法和Seidel迭代法求线性方程组的解。

实验目的
通过本次实验了解Gauss消元法和Seidel迭代法的基本原理,掌握其算法,学会用Matlab编程进行计算,并能用这些方法解决实际问题。

Gauss 顺序消元法的基本原理算法:
(1)输入:,.
A b
(2)对1,2,,1
k n
=⋅⋅⋅-做
1)if0
kk
a=then输出算法失败信息,停机;
2)对1,,
i k n
=+⋅⋅⋅做
1/;
ik ik ik kk
a l a a
←=
2;
i i ik k
b b l b
=-
3对1,,
j k n
=+⋅⋅⋅做;
ij ij ik kj
a a l a
=-
(3)if0
nn
a=then输出算法失败信息,并停机else做
1)/;
n n n nn
b x b a
←=
2)对1,,2,1
i n
=-⋅⋅⋅做
1
()/;
n
i i i ij j ii
j i
b x b a x a
=+
←=-∑
(4)输出方程组的解.X
流程图见附页
Seidel 迭代法的基本原理算法:
(1)输入:,;
A b
(2)输入:初始解向量
;x
(3)对1,2,,
i n
=⋅⋅⋅做
1)
1
()/;
n
i i ij j ii
j
j i
y b a x a
=

=-∑
2);
i i i
e y x
=-
3);
i i
x y
=
(4)if
1
{||}
max i
i n

≤≤
<then输出:(1,2,,),
i
x i n
=⋅⋅⋅停机;else返回第(3)步。

Gauss 顺序消元法的实验步骤步骤:
(1)利用Gauss顺序消元法设计主程序:
①根据RB RA
-的值判断方程组是否有解,当RB RA
>时方程组无解,当RB RA n
==时方程组有唯一解,当RB RA n
=<时,方程组有无穷多解;
②根据公式
(1)()()
(1)()()
(,1,,)
(1,,)
k k k
ij ij ik kj
k k k
i i ik k
a a l a i j k n
b b l b i k n
+
+
=-=+⋅⋅⋅
=-=+⋅⋅⋅
将增广矩阵[,]
B A b
=化为上三角形矩阵;
(2)建立.
backsub m文件;
(3)调用.
backsub m文件,在Matlab命令窗口输入,A b矩阵,再输入[,,,](,)
RA RB n X gaus A b
=,进行Matlab实现得出方程的解。

Seidel 迭代法的实验步骤步骤:
(1)利用Seidel迭代法设计主程序:
①确定精确度;ε
②当<
err relerr
εε
<或时,
(ⅰ)若=1,
j则 X(1)=(b(1)-A(1,2:n)*P(2:n))/A(1,1);
(ⅱ)若=,
j n则 X(n)=(b(n)-A(n,1:n-1)*(X(1:n-1))')/A(n,n);
(ⅲ)对于2,3,,1
j n
=⋅⋅⋅-
X(j)=(b(j)-A(j,1:j-1)*X(1:j-1)'-A(j,j+1:n)*P(j+1:n))/A(j,j);
(2)在Matlab命令窗口输入
,,
A b x矩阵,再输入
(,,,0.0005,15)
Seidel A b x,进行Matlab实现得出方程的解,输出X。

Gauss 顺序消元法的Matlab 原代码
Gauss 顺序消元法的实验结果在Matlab命令窗口输入:
A=[-2 1 1;1 -2 1;1 1 -2] ;
[1;2;4];
b=-
[,,,](,)
RA RB n X gaus A b
=
A=[1 1 1;1 1 1;1 1 1] ;
[1;1;1];
b=
[,,,](,)
RA RB n X gaus A b
=
结果显示:
在Matlab命令窗口输入:
A=[2 1 1;1 2 1;1 1 2] ;
b=
[1;2;4];
=
[,,,](,)
RA RB n X gaus A b 结果显示:
Gauss 顺序消元法的数据实现求线性方程组
123
123
123
21
22
24
x x x
x x x
x x x
++=
++=
++=
的解.
解:32
21
31
1
1
3
2
1
2
21112111 2111
313313 [|]121200
222222 1124
1374
0003
2223
r r
r r
r r
A b
-
-
-
⎛⎫
⎛⎫


⎛⎫ ⎪

⎪ ⎪

= ⎪


⎪ ⎪

⎝⎭


⎝⎭⎝⎭
→→
123
21
x x x
++=
即方程组同解变形为
23
313
222
x x
+=
3
4
3
3
x=
解得:
1
2
3
3
0.75
4
1
0.25
4
9
2.25
4
x
x
x
=-=-
==
==

0.75
0.25
2.25
X
-⎛⎫

= ⎪

⎝⎭
Seidel 迭代法的Matlab 原代码
Seidel 迭代法的实验结果在Matlab命令窗口输入:
A=[2 1 1;1 2 1;1 1 2] ;
[1;2;4];
b=
[0;0;0];
x=
(,,,0.0005,15)
Seidel A b x
结果显示:
Seidel 迭代法的数据实现Seidel迭代法格式为
(1)()()
123
(1)(1)()
213
(1)(1)(1)
312
0.50.50.5
0.50.51
0.50.52
k k k
k k k
k k k
x x x
x x x
x x x
+
++
+++
=--+
=--+
=--+
33
0.408648635100.510
err--
=⨯<⨯

0.749782071
0.249850504
2.249965784
X
-⎡⎤
⎢⎥
=⎢⎥
⎢⎥
⎣⎦
k
1
x
2
x
3
x 0000
10.512
21-0.5 2.25
30.875
-0.3125 2.28125
40.796875
-0.2578125 2.26953125
50.763671875
-0.247070312 2.258300782
60.752685547
-0.247192382 2.252746583
70.749969482
-0.248611449 2.250679017
80.749645233
-0.249483108 2.250081063
90.749782071
-0.249850504 2.249965784
实验分析Gauss消元法适用于中、小规模的线性方程组,运算量小,效率高,可以求精确解。

Seidel迭代法占存储单元少,程序设计简单,原始系数矩阵在迭代过程中不变,Seidel迭代法收敛速度较Jacobi迭代法较快。

但是,Gauss消元法和Seidel迭代法都具有局限性,Gauss消元法对于大型线性方程组很难求解,Seidel
迭代法受收敛性的局限且收敛速度慢。

实验小结
本次实验学习到了Gauss消元法和Seidel迭代法解线性方程组的基本原理,掌握了用Gauss消元法和Seidel迭代法进行Matlab编程。

同时了解到Matlab在处理用Gauss消元法和Seidel 迭代法求方程组解的问题上非常的方便,程序简单,容易掌握;Gauss消元法程序比Seidel迭代法程序较复杂,但Seidel迭代法得到的是近似解,且受收敛性和收敛速度的局限。

流程图:。

相关文档
最新文档