数值分析上机实验——解线性方程组
实 验 报 告 课程名称 数值分析 实验项目名称 解线性方程组 实验类型 上机 实验学时 4 班级 学号 30 姓名 张振 指导教师 沈艳 实验室名称 理学楼407 实验时间 实验成绩 预习部分 实验过程 表现 实验报告 部分 总成绩 教师签字 日期 哈尔滨工程大学教务处 制 实验四 解线性方程组 一.解线性方程组的基本思想 1.直接三角分解法 将系数矩阵A转变成等价两个矩阵L和U的乘积 ,其中L和U分别是下三角和上三角矩阵。当A的所有顺序主子式都不为0时,矩阵A可以分解为ALU,且分解唯一。其中L是单位下三角矩阵,U是上三角矩阵。 2.平方根法 如果矩阵A为n阶对称正定矩阵,则存在一个对角元素为正数的下三角实矩阵L,使得ALLT。当限定L的对角元素为正时,这种分解是唯一的,称为平方根法(Cholesky)分解。 3.追赶法 设系数矩阵为三对角矩阵 则方程组Axf称为三对角方程组。 设矩阵A非奇异,A有Crout分解ALU,其中L为下三角矩阵,U为单位上三角矩阵,记 可先依次求出L,U中的元素后,令Uxy,先求解下三角方程组Lyf得出y,再求解上三角方程组Uxy。 4.雅克比迭代法 首先将方程组中的系数矩阵A分解成三部分,即A LDU,如图1所示,其中D为对角阵,L为下三角矩阵,U为上三角矩阵。 之后确定迭代格式,X BX f ,如图2所示,其中B称为迭代矩阵,雅克比迭代法中一般记为J。(k 0,1,......)再选取初始迭代向量X,开始逐次迭代。 5.超松弛迭代法(SOR) 它是在GS法基础上为提高收敛速度,采用加权平均而得到的新算法。 选取分裂矩阵M为带参数的下三角矩阵 M=(D-), 其中>0 为可选择的松弛因子,一般当12时称为超松弛。 二.实验题目及实验目的 1.第五章习题8用直接三角分解(杜利特尔(Doolittle)分解)求线性方程组 9, 8, 8 的解。 2.第五章习题9用追赶法解三对角方程组Axb,其中 A,b. 3.(第五章习题10)用改进的平方根法解线性方程组 4.(第六章习题7)用SOR方法解线性方程组(分别取松弛因子ω,ω1,ω) 4 - 1, - 4- 4, - 4 -3. 精确解x(,1,-).要求当510时迭代终止,并且对每一个ω值确定迭代次数. 5.(第六章习题8)用SOR方法解线性方程组(取ω) 5 -2 -12, - 4- 2 20, 2 -310 3. 要求当10时迭代终止. 6.(第六章习题9)设有线性方程组Axb,其中A为对称正定阵,迭代公式 ωb- A,k0,1,2, 试证明当0ω时上述迭代法收敛(其中0A). 7.(第六章计算实习题1)给出线性方程组Hxb,其中系数矩阵H为希尔伯特矩阵 HxhR, h,i,j1,2,,n. 假设x(1,1,,1)R,b Hx.若取n6,8,10,分别雅克比迭代法及SOR迭代(ω1,,)求解.比较计算结果. 三.实验手段 指操作环境和平台win7系统下MATLAB R2009a 程序语言一种类似C语言的程序语言,但比C语言要宽松得多,非常方便。 四.程序 1. ①直接三角分解(文件) function xZJsanjiaoA,b [m,n]sizeA; [l u]luA; sinvl*[A,b]; xonesm,1; for im-11 hsi,m1; for jm-11; if ji hh-xj*si,j; end end xih/si,i; end ②控制台输入代码 A[1/4,1/5,1/6;1/3,1/4,1/5;1/2,1,2]; b[9;8;8]; xZJsanjiaoA,b 2. ①追赶法(文件) function xZG_SDJa,b,c,f a ba ca fb Nlengtha; b[b,0]; c[0,c]; a1zerosN,1; b1zerosN,1; yzerosN,1; xzerosN,1; a11a1; b11b1/a11; y1f1/a11; for j12N a1j1aj1-cj1*b1j1-1; b1j1bj1/a1j1; temp1fj1-cj1*yj1-1; yj1temp1/a1j1; end j1N; xj1yj1; for j1N-1-11 xj1yj1-b1j1*xj11; end ②控制台输入代码 a[2 2 2 2 2]; b[-1 -1 -1 -1]; c[-1 -1 -1 -1]; f[1;0;0;0;0]; xZG_SDJa,b,c,f 3. ①改进的平方根法(文件) function GJPFGA,b nlengthb; n LDL d1A1,1; for i2n for j1i-1 sum10; for k1j-1 sum1sum1ti,k*lj,k; end ti,jAi,j-sum1; li,jti,j/dj; end sum20; for k1i-1 sum2sum2ti,k*li,k; end diAi,i-sum2; end for i1n li,i1; end dispL; L l dispD; D