数值分析报告上机实验——解线性方程组 下载本文

内容发布更新时间 : 2024/6/29 4:49:01星期一 下面是文章的全部内容请认真阅读。

实用文档

实 验 报 告

课程名称 数值分析 解线性方程组 上机 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

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

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éùò???