追赶法求解三对角线性方程组

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

追赶法求解三对角线性方程组

一 实验目的

利用编程方法实现追赶法求解三对角线性方程组。

二 实验内容

1、 学习和理解追赶法求解三对角线性方程组的原理及方法;

2、 利用MATLAB 编程实现追赶法;

3、 举例进行求解,并对结果进行分。

三 实验原理

设n 元线性方程组Ax=d 的系数矩阵A 为非奇异的三对角矩阵

11222=(1)(n 1)()()a c b a c A a n c b n a n ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥⎣⎦

………… 这种方程组称为三对角线性方程组。显然,A 是上下半宽带都是1的带状矩阵。设A 的前n-1个顺序主子式都不为零,根据定理2.5的推论,A 有唯一的Crout 分解,并且是保留带宽的。

其中L 是下三角矩阵,U 是单位上三角矩阵。利用矩阵相乘法,可以1112212(1)1u(n 1)()()1l u m l u A LU l n m n l n ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥==⨯⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦……………

得到:

由上列各式可以得到L 和U 。 引入中间量y ,令

y Ux =,则有:

已知

L 和d ,可求得y 。

则可得到y 的求解表达式:

11/1

2,3,,()(1)*y()=()[()(1)]/y d l i n

m i y i li i di y i di m i y i li

==-+=--…

1111111/1(2)(1)(1)u (1)(11)/(1)(1)(1)l a l u c u c l mi bi i n a i m i i l i i n ci li ui ui ci li l i a i b i ui

=*===≤≤+=+++≤≤-=•=+=+-+Ax LUx Ly d Ly d ====1112222(1)(n 1)(n 1)()()(n)(n)l y d m l y d l n y d m n l n y d ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⨯=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦

……………

由y Ux =得:

111112221u(n 1)(n 1)(n 1)1(n)(n)u x y u x y x y x y ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⨯=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦

………… 可得到X 的求解表达式:

()()

1,2,,1

()()u()(1)

x n y n i n n x i y i i x i ==--=-+…

从而得到Ax=d 的解x 。

四 Matlab 编程

根据以上的实验原理,在Matlab 中编程如下函数x=Trid (A,d )

在Matlab中新建Trid.m,其中程序为如上虚线框内代码,放在工

作目录。在Command Window输入以下语句:

clear all;clc;

fprintf('输入非奇异三对角系数矩阵A\n');

A=input('A matrix='); % 输入系数矩阵

fprintf('系数矩阵');A

if det(A)==0 % 判断系数矩阵是否奇异

fprintf('系数矩阵A奇异!!!请重新输入!\n');

fprintf('重新输入非奇异三对角系数矩阵A\n');

A=input('A matrix=');

fprintf('系数矩阵');A

end

fprintf('输入矩阵d\n');

d=input('d matrix=');

fprintf('矩阵d');d

x=Trid(A,d) % 调用Trid.m中的Trid函数进行求解

fid = fopen('Ax=d.txt', 'wt'); % 生成Ax=d.txt文件

fprintf(fid,'%s\r\n','利用三对角线追赶法求解Ax=d');

fprintf(fid,'%s\r\n','==================================');

for i=1:size(A,1)

fprintf(fid, '%.1f\t', A(i,:)); % 输出Ax=d,以上=为分隔符fprintf(fid, '%s', 'x');

fprintf(fid, '%u\t', i);

fprintf(fid, '%.1f\n', d(i));

end

fprintf(fid,'%s\r\n','==================================');

五 举例计算及分析

以课本(《数值分析》第4版,颜庆津,北京航空航天大学出版社)27页例3为例进行计算,输入系数矩阵A 和d :

41141=4114A ⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦

1411,10.5=132d ⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎣⎦ 调用x=Trid(A,d)后,并生成Ax=d.txt 文件,Command Window

同时也会输出解为0.20.2=0.50.80.3x ⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎣⎦

,与课本答案一致; Ax=d.txt 文件内容

如下图:

fprintf(fid,'%s\r\n','求解得到结果如下:'); for i=1:size(A,1)

fprintf(fid,'%s','x'); % 输出解向量x (i )

fprintf(fid, '%u', i);

fprintf(fid, '%s\t', '='); fprintf(fid,'%.5f\r\n',x(i)); end fclose(fid)

相关文档
最新文档