实用文档
实 验 报 告
课程名称 数值分析 解线性方程组 上机 20111131 张振 理学楼407 预习部分 实验过程 表现 实验学时 学号 指导教师 实验时间 实验报告 部分 日期 4 2011113130 沈艳 2013.12.9 总成绩 实验项目名称 实验类型 班级 姓名 实验室名称 实验成绩 教师签字
哈尔滨工程大学教务处 制
实用文档
实验四 解线性方程组
一.解线性方程组的基本思想 1.直接三角分解法:
将系数矩阵A转变成等价两个矩阵L和U的乘积 ,其中L和U分别是下三角和上三角矩阵。当A的所有顺序主子式都不为0时,矩阵A可以分解为A=LU,且分解唯一。其中L是单位下三角矩阵,U是上三角矩阵。 2.平方根法:
如果矩阵A为n阶对称正定矩阵,则存在一个对角元素为正数的下三角实矩阵L,使得:A=LL^T。当限定L的对角元素为正时,这种分解是唯一的,称为平方根法(Cholesky)分解。 3.追赶法:
设系数矩阵为三对角矩阵
?b1??a2?0A????0??0?c1b2a3000c2b300000000an?1bn?10an0??0?0?? ?cn?1??bn??则方程组Ax=f称为三对角方程组。
设矩阵A非奇异,A有Crout分解A=LU,其中L为下三角矩阵,U为单位上三角矩阵,记
?b1???2?0 L????0??0?000000?2?300?300?n?1?n0??0?0??,?0???n???1?10??01?2?001U????000??000?00000??0?0?? ??n?1??1??可先依次求出L,U中的元素后,令Ux=y,先求解下三角方程组Ly=f得出y,再求解上三角
方程组Ux=y。
4.雅克比迭代法:
首先将方程组中的系数矩阵A分解成三部分,即:A = L+D+U,如图1所示,其中D为对角阵,L为下三角矩阵,U为上三角矩阵。
实用文档
之后确定迭代格式,X(k?1) = BX(k) +f ,如图2所示,其中B称为迭代矩阵,雅克比迭代法中一般记为J。(k = 0,1,......)再选取初始迭代向量X(0),开始逐次迭代。
5.超松弛迭代法(SOR)
它是在GS法基础上为提高收敛速度,采用加权平均而得到的新算法。 选取分裂矩阵M为带参数的下三角矩阵
M=
1(D-?L), ?其中?>0 为可选择的松弛因子,一般当1<2时称为超松弛。 二.实验题目及实验目的
1.(第五章习题8)用直接三角分解(杜利特尔(Doolittle)分解)求线性方程组
111x1 +x2 +x3= 9, 456111x1 +x2 +x3= 8,
4531x1 + x2 +2x3= 8 2的解。
2.(第五章习题9)用追赶法解三对角方程组Ax=b,其中
?1??2?1000??????0???12?100?A=?0?12?10?,b=?0?.
?????0??00?12?1??0??000?12?????3.(第五章习题10)用改进的平方根法解线性方程组
?2?11??x1??4????????1?23x = ???2??5? ?1???6?31????x3???4.(第六章习题7)用SOR方法解线性方程组(分别取松弛因子ω=1.03,ω=1,
ω=1.1)
4x1 - x2 = 1, -x1 +4x2- x3= 4,
实用文档
-x2 +4x3= -3.
11,1,-)T.要求当x*?x(k)?<5×10?6时迭代终止,并且对每22一个ω值确定迭代次数.
5.(第六章习题8)用SOR方法解线性方程组(取ω=0.9) 精确解x*=(
5x1 -2x2+ x3= -12, -x1 +4x2- 2x3= 20, 2x1 -3x2+10x3= 3.
要求当x(k?1)?x(k)?<10?4时迭代终止.
6.(第六章习题9)设有线性方程组Ax=b,其中A为对称正定阵,迭代公式
x(k?1)?x(k)+ω(b- Ax(k)),k=0,1,2…,
试证明当0<ω<
2时上述迭代法收敛(其中0??(A)??). ?7.(第六章计算实习题1)给出线性方程组Hnx=b,其中系数矩阵Hn为希尔伯特矩阵:
Hnx=(hij)?Rn?n, hij=
1,i,j=1,2,…,n.
i?j?1假设x*=(1,1,…,1)T?Rn,b= Hnx*.若取n=6,8,10,分别雅克比迭代法及SOR迭代(ω=1,1.25,1.5)求解.比较计算结果. 三.实验手段:
指操作环境和平台:win7系统下MATLAB R2009a
程序语言:一种类似C语言的程序语言,但比C语言要宽松得多,非常方便。 四.程序
1.
①直接三角分解(文件ZJsanjiao.m) function x=ZJsanjiao(A,b) [m,n]=size(A); [l u]=lu(A); s=inv(l)*[A,b]; x=ones(m,1);
实用文档
for i=m:-1:1 h=s(i,m+1); for j=m:-1:1; if j~=i
h=h-x(j)*s(i,j); end end
x(i)=h/s(i,i); end
②控制台输入代码:
>> A=[1/4,1/5,1/6;1/3,1/4,1/5;1/2,1,2]; >> b=[9;8;8];
>> x=ZJsanjiao(A,b) 2.
①追赶法(文件ZG_SDJ.m) function x=ZG_SDJ(a,b,c,f) %aê????????a??
%cê?????????·?μ??a??£???êy±èaéùò??? %fê?3£êy??b
N=length(a); b=[b,0]; c=[0,c];
a1=zeros(N,1); b1=zeros(N,1); y=zeros(N,1); x=zeros(N,1);
a1(1)=a(1);
b1(1)=b(1)/a1(1); y(1)=f(1)/a1(1); for j1=2:N
a1(j1)=a(j1)-c(j1)*b1(j1-1); b1(j1)=b(j1)/a1(j1);
temp1=f(j1)-c(j1)*y(j1-1); y(j1)=temp1/a1(j1); end j1=N;
x(j1)=y(j1); for j1=N-1:-1:1
x(j1)=y(j1)-b1(j1)*x(j1+1);
%bê???????é?·?μ??a??£???êy±èaéùò???