线性方程组的数值解法实验
- 格式:doc
- 大小:1003.35 KB
- 文档页数:10
实验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 的系数,。
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.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消去法在消去过程中选择模最大的主元能够得到比较精确的解。
《大学数学实验》作业线性方程组的数值解法班级:姓名:学号:日期:目录目录 (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列主元高斯消元法主要三步骤:先是按列选主元,然后后消元,持续这两步骤将增广矩阵化为行阶梯矩阵,最后进行回代。
○2 LU 分解法是把系数矩阵分解为下三角矩阵L 和上三角矩阵U,又对方程组中b 项有与U 相似的公式,即可对增广矩阵A 作LU 分解,即可得等价方程组,而后进行回代即可得解。
○3于雅克比迭代法是把方程组写与其同解的方程组形式,该同解方程组是把系数矩阵对角元中的变量(未知数)写到方程组左边。
然后得到迭代公式,后就迭代求解直到满足精度为止。
○4高斯-塞德尔迭代法其实与雅克比迭代法差不多唯一的差别是迭代公式上,它把前面方程已算得的变量带到后面方程中,其余未得的用前次的代替,而雅可比迭代法则都是有前次代替。
具体原理如下:1.列主元高斯消元法:○1.按列选主元。
k-1次消元后,选第k 列中的对角元以下绝对值最大的元素为该列主元即ik ni k tk a a max ≤≤=。
(1,,2,1-=n k n k k t ,1,+=)○2.交换增广矩阵A 第t 和k 行,记住新的主对角元tk a 。
○3.用高斯消去法进行第k 次消元。
消元完成以后,进行回代求解。
○2.LU 分解法式子为:.,3,2,3,2,1/,11111n i n j u a l a u i i i j j ====。
1 ,1,,k kj kj kq qj j ku a l u j k k n -==-=+∑其中 (1)图1 列主元高斯消元法流程图分析:从流程图看2,3,4步骤为选主元,5,6步骤为消元过程。
其次其中并无约束系数矩阵a 需为方阵。
2.LU 分解法:○1.根据非奇异矩阵A 可分解为一个下三角矩阵L 和一个上三角矩阵U 乘积即A=LU 。
Y11i=k+1,k+2,,n k ik iq qkq ik kka l u l u -=-=∑其中(2)113k k k kq q q y b l y -==-∑其中k=2,,,n(3)○3.由式④与式②比较可知把增广矩阵A 采用LU 分解格式,即可得到与原方程同解的方程组。
淮海工学院实验报告书
课程名称:数学实验
实验名称:线性方程组的数值解法与非线性方程求解班级数学091
姓名:耿萍学号:090911107
日期:2012.4.27 地点数学实验室
指导教师:曹卫平成绩:
数理科学系
-259.49
x3 =
13467.74
7580.65
5564.52
3951.61
1870.97
从x1可以看出,第5年龄段:x5=140.5>100=h5 ,说明收获量h5可以达到100。
从x2可以看出,x5为-259.49,但种群数量不可能为负数,在本题所给条件下,无法使h1~h5均为500。
从x3可以看出,x5=1870>500=h5,说明收获量h5可达到500,从而h1~h5均可达到500。
(3)
1)由题目已知条件,假设第i月月初待还贷款为,贷款月利率为r,则可列出:
=150000 =*(1+r)-1000 …=1000/r+(-1000/r)
2) 记第一家银行月利率为s,第二家银行年利率为t,则:
=4500/s+(-4500/r)。
实验5 线性代数方程组的数值解法分1 黄浩 2011011743一、实验目的1.学会用MATLAB软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析;2.通过实例学习用线性代数方程组解决简化的实际问题。
二、实验内容1.《数学实验》第二版(问题1)问题叙述:通过求解线性方程组A1x=b1,A2x=b2,理解条件数的意义和方程组性态对解的影响,其中A1是n阶范德蒙矩阵,即A1=[1x0x02…x0n−11x1x12…x1n−1……………1x n−1x n−12 (x)n−1n−1], x k=1+0.1k , k=0,1,…,n−1A2是n阶希尔伯特矩阵,b1,b2分别是A1,A2的行和。
(1)编程构造A1(A2可直接用命令产生)和b1,b2;你能预先知道方程组A1x=b1和A2x=b2的解吗?令n=5,用左除命令求解(用预先知道的解可验证程序)。
(2)令n=5,7,9,…,计算A1和A2的条件数。
为观察他们是否病态,做以下试验:b1,b2不变,A1和A2的元素A1(n,n),A2(n,n)分别加扰动ε后求解;A1和A2不变,b1,b2的分量b1(n),b2(n)分别加扰动ε后求解。
分析A与b的微小扰动对解的影响。
ε取10^-10,10^-8,10^-6。
(3)经扰动得到的解记做x̃,计算误差‖x−x̃‖‖x‖,与用条件数估计的误差相比较。
模型转换及实验过程:(1)小题.由b1,b2为A1,A2的行和,可知方程组A1x=b1和A2x=b2的精确解均为n 行全1的列向量。
在n=5的情况下,用matlab编程(程序见四.1),构造A1,A2和b1,b2,使用高斯消去法得到的解x1,x2及其相对误差e1,e2(使用excel计算而得)为:由上表可见,当n=5时,所得的解都接近真值,误差在10^-12的量级左右。
(2)小题分别取n=5,7,9,11,13,15,计算A1和A2的条件数c1和c2,(程序见四.2),结果如下:由上表可见,二者的条件数都比较大,可能是病态的。
重庆大学学生实验报告实验课程名称计算方法开课实验室DS1421学院年级专业学生姓名学号开课时间至学年第学期1.实验目的(1)高斯列主元消去法求解线性方程组的过程(2)熟悉用迭代法求解线性方程组的过程(3)设计出相应的算法,编制相应的函数子程序2.实验内容分别用高斯列主元消去法 ,Jacobi 迭代法,Gauss--Saidel 迭代法,超松弛迭代法求解线性方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------725101391444321131243301024321x x x x 3.实验过程解:(1)高斯列主元消去法编制高斯列主元消去法的M 文件程序如下:%高斯列主元消元法求解线性方程组Ax=b%A 为输入矩阵系数,b 为方程组右端系数%方程组的解保存在x 变量中format long;%设置为长格式显示,显示15位小数A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]b=[10,5,-2,7]'[m,n]=size(A);%先检查系数正确性if m~=nerror('矩阵A 的行数和列数必须相同');return;endif m~=size(b)error('b 的大小必须和A 的行数或A 的列数相同');return;end%再检查方程是否存在唯一解if rank(A)~=rank([A,b])error('A 矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解');return;endc=n+1;A(:,c)=b; %(增广)for k=1:n-1[r,m]=max(abs(A(k:n,k))); %选主元m=m+k-1; %修正操作行的值if(A(m,k)~=0)if(m~=k)A([k m],:)=A([m k],:); %换行endA(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去 endendx=zeros(length(b),1); %回代求解x(n)=A(n,c)/A(n,n);for k=n-1:-1:1x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);enddisp('X=');disp(x);format short;%设置为默认格式显示,显示5位运行,结果如下所示:(2)Jacobi迭代法编制迭代计算的M文件程序如下:%Jacobi迭代法求解% A为方程组的增广矩阵clc;A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7] MAXTIME=50;%最多进行50次迭代eps=1e-5;%迭代误差[n,m]=size(A);x=zeros(n,1);%迭代初值y=zeros(n,1);k=0;%进入迭代计算disp('迭代过程X的值情况如下:')disp('X=');while 1disp(x');for i=1:1:ns=0.0;for j=1:1:nif j~=is=s+A(i,j)*x(j);endy(i)=(A(i,n+1)-s)/A(i,i);endendfor i=1:1:nmaxeps=max(0,abs(x(i)-y(i))); %检查是否满足迭代精度要求 endif maxeps<=eps%小于迭代精度退出迭代for i=1:1:nx(i)=y(i);%将结果赋给xendreturn;endfor i=1:1:n%若不满足迭代精度要求继续进行迭代x(i)=y(i);y(i)=0.0;endk=k+1;if k>MAXTIME%超过最大迭代次数退出error('超过最大迭代次数,退出');return;endend运行该程序结果如下:(3)Gauss--Saidel迭代法编制求解程序Gauss_Seidel.m如下:%Gauss_Seidel.m% A为方程组的增广矩阵clc;format long;A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7][n,m]=size(A);%最多进行50次迭代Maxtime=50;%控制误差Eps=10E-5;%初始迭代值x=zeros(1,n);disp('x=');%迭代次数小于最大迭代次数,进入迭代for k=1:Maxtimedisp(x);for i=1:ns=0.0;for j=1:nif i~=js=s+A(i,j)*x(j);%计算和endendx(i)=(A(i,n+1)-s)/A(i,i);%求出此时迭代的值end%因为方程的精确解为整数,所以这里将迭代结果向整数靠近的误差作为判断迭代是否停止的条件if sum((x-floor(x)).^2)<Epsbreak;end;end;X=x;disp('迭代结果:');Xformat short;运行结果如下所示:(4)超松弛迭代法编写函数M文件如下:%SOR法求解%w=1.45%方程组系数矩阵clc;A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13]%方程组右端系数b=[10,5,-2,7]'w=1.45;%最大迭代次数Maxtime=100;%精度要求Eps=1E-5;%以15位小数显示format long;n=length(A);k=0;%初始迭代值x=ones(n,1);y=x;disp('迭代过程:');disp('x=');while 1y=x;disp(x');%计算过程for i=1:ns=b(i);for j=1:nif j~=is=s-A(i,j)*x(j);endendif abs(A(i,i))<1E-10 | k>=Maxtimeerror('已达最大迭代次数或矩阵系数近似为0,无法进行迭代'); return;ends=s/A(i,i);x(i)=(1-w)*x(i)+w*s;endif norm(y-x,inf)<Eps%达到精度要求退出计算break;endk=k+1;enddisp('最后迭代结果:');%最后的结果X=x'%设为默认显示格式format short; 结果如下:4.实验环境及实验文件存档名实验环境:Matlab7.0文件存档名:Gauss.m,Jacobi.m,Gauss_Seidel.m,SOR.m5.实验结果及分析=1.0000=2.0000=3.0000=4.0000经过验证,高斯列主元消结果正确。
实验5:线性方程组的数值解法化学工程系分2 安振华2012011837【实验目的】1、掌握线性方程组的常用数值解法,包括高斯消去法、LU分解法以及校正法。
2、体验数值计算的时间复杂度和计算规模的关系。
3、加深对数值计算误差的理解。
4、学习使用迭代法等算法,求解非线性方程。
5、学习如何使用MATLAB解非线性方程组和方程组。
【实验容】【实验五:习题9】种群的繁殖与稳定收获:种群的数量因繁殖而增加,因自然死亡而减少,对于人工饲养的种群(比如家畜)而言,为了保证稳定的收获,各个年龄的种群数量应保持不变,种群因雌性个体的繁殖而改变,为方便起见以下种群数量均指其中的雌性。
种群年龄记作k=1,2,…,n,当年年龄k的种群数量记作x k,繁殖率记作b k(每个雌性个体在1年繁殖的数量),自然存活率记作s k(s k=1-d k,d k为1年的死亡率),收获量记作h k,则来年年龄k的种群数量k x应为:111,(1,2,,1)n k k k k k k k x b x x s x h k n +===-=⋅⋅⋅-∑要求各个年龄的种群数量每年维持不变就是要使(1,2,,)k k x x k n ==⋅⋅⋅(1) 若b k ,s k 已知,给定收获量h 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,如果要求h 1~h 5为500,400,200,100,100,求x 1~x 5 (3) 要使h 1~h 5均为500,如何达到? 【分析】为方便起见以下种群数量均指其中的雌性。
我们并且有以下的假设:(1)雌性个体的繁殖率和存活率在特定的时间是不变的。
(2)人工饲养的种群在质量和数量上是不受外界环境和资源的限制的。
(3)模型中不考虑人为的或是自然的灾害所造成的种群数量、繁殖率和存活率的变动。
数值计算方法实验报告一、实验目的本实验旨在通过数值计算方法的实验操作,深入理解数值计算方法的原理与应用,掌握数值计算方法的相关技能,提高数值计算方法的实际应用能力。
二、实验内容1.数值微积分2.数值代数3.数值微分方程4.数值线性代数5.数值优化6.数值统计分析7.数值随机模拟8.数值傅立叶分析9.数值偏微分方程三、实验步骤1.数值微积分:通过不同的数值积分方法,计算给定函数的定积分值,并对不同数值积分方法的误差进行分析。
2.数值代数:通过使用线性代数方法,求解给定的线性方程组,并分析不同线性方程组求解方法的优劣。
3.数值微分方程:通过使用常微分方程数值解法,求解给定的微分方程,并比较不同求解方法的精度和稳定性。
4.数值线性代数:通过使用特征值分解方法,对给定的矩阵进行特征值分解,并分析不同特征值分解方法的优缺点。
5.数值优化:通过使用不同的优化方法,求解给定的优化问题,并比较不同的优化方法的效率和精度。
6.数值统计分析:通过使用不同的统计分析方法,对给定的数据进行统计分析,并分析不同的统计方法的优缺点。
7.数值随机模拟:通过使用随机模拟方法,模拟给定的概率分布,并分析不同随机模拟方法的效率和精度。
8.数值傅立叶分析:通过使用傅立叶分析方法,对给定的信号进行频谱分析,并分析不同的傅立叶分析方法的优缺点。
9.数值偏微分方程:通过使用偏微分方程数值解法,求解给定的偏微分方程,并比较不同求解方法的精度和稳定性。
四、实验结果与分析本实验中,通过对不同的数值计算方法的实验操作,我们可以更深入地理解数值计算方法的原理与应用,并掌握数值计算方法的相关技能,提高数值计算方法的实际应用能力。
同时,通过实验结果的分析,我们可以更好地比较不同数值计算方法的优缺点,为实际应用提供参考依据。
五、实验总结本实验旨在通过数值计算方法的实验操作,深入理解数值计算方法的原理与应用,掌握数值计算方法的相关技能,提高数值计算方法的实际应用能力。
姓名:学号:班级:线性方程组的数值解法实习目的(1)通过实习进一步掌握高斯消去法、列主元高斯消去法、柯朗分解法、追赶法以及雅克比迭代法和高斯-赛德尔迭代法的基本思想;(2)通过实习进一步掌握高斯消去法、列主元高斯消去法、柯朗分解法、追赶法以及雅克比迭代法和高斯-赛德尔迭代法的计算步骤,并能灵活应用;(3)通过对高斯消去法、列主元高斯消去法、柯朗分解法、追赶法以及雅克比迭代法和高斯-赛德尔迭代法的调试练习,进一步体会各种算法的特点;(4)通过对上机调试运行,组不培养解决实际问题的编程能力。
实习要求(1)熟悉Turbo C的编译环境;(2)实习前复习高斯消去法、列主元高斯消去法、直接三角分解法、雅克比迭代法、高斯-赛德尔迭代法以及追赶法的基本思想和过程;(3)实习前复习高斯消去法、列主元高斯消去法、直接三角分解法、雅克比迭代法、高斯-赛德尔迭代法以及追赶法的计算步骤。
实习设备(1)硬件设备:单机或网络环境下的微型计算机一台;(2)软件设备:DOS 3.3以上操作系统,Turbo C 2.0编译器。
实习内容实习一高斯消去法(1)用高斯消去法求解线性方程组:(2)要求:①将线性方程组写成用矩阵表示的形式,即Ax=b的形式。
②输出系数矩阵的原始元素和经高斯消去法消去后的矩阵元素。
③经高斯消去法消去后的矩阵是一个什么形式的矩阵?④请写出程序的运行结果。
#include <stdio.h>#define N 4int Gauss(float a[N][N],float b[N]){int i,j,k,flag=1;float t;for(i=0;i<N-1;i++){if(a[i][i]==0){flag=0;break;}else{for(j=i+1;j<N;j++){t=-a[j][i]/a[i][i];b[j]=b[j]+t*b[i];for(k=i;k<N;k++)a[j][k]=a[j][k]+t*a[i][k];}}}return(flag);}void zg_matric(float a[N][N],float b[N]){int i,j;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%10f",a[i][j]);printf("%10f",b[i]);printf("\n");}printf("\n");}void main(){static float a[N][N]={{1,-4,6,-5},{-5,21,-33,32},{6,-26,43,-48},{5,-24,45,-64}};float b[N]={8,-32,25,-10};float x[N]={0,0,0,0};int i,j,flag;zg_matric(a,b);flag=Gauss(a,b);if(flag==0)printf("Gauss method does not run.");else{x[N-1]=b[N-1]/a[N-1][N-1];for(i=N-2;i>=0;i--){x[i]=b[i];for(j=i+1;j<N;j++)x[i]=x[i]-a[i][j]*x[i];x[i]=x[i]/a[i][i];}for(i=0;i<N;i++)printf("x%d=%11.7f\n",i+1,x[i]);}}(3)思考题:①高斯消去法的基本思想是什么?答:高斯消去法是最古老的求解线性代数方程组的方法之一,是消去法的一种特殊形式。
线性方程组的数值解法
实验
题目
用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
eε
≤≤
<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迭代法得到的是近似解,且受收敛性和收敛速度的局限。
流程图:。