MATLAB-追赶法求解三对角方程组的算法原理例题与程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3)三对角形线性方程组
123456789104100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014x x x x x x x x x x -⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎢⎥--⎢⎢⎥⎢⎢⎥-⎣⎦⎣⎦
7513261214455⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥
⎢⎥
⎢⎥=⎢⎥-⎢⎥
⎢⎥⎢⎥
-⎢⎥
⎥⎢⎥⎥⎢⎥
⎥⎢⎥-⎣⎦
*(2,1,3,0,1,2,3,0,1,1)T x =--- 二、数学原理
设系数矩阵为三对角矩阵
1
12223311100
0000000000000
00n n n n n b c a b c a b A a b c a b ---⎛⎫ ⎪
⎪ ⎪
=
⎪ ⎪ ⎪
⎪
⎪⎝
⎭L L L M M M
M M M L L
则方程组Ax=f 称为三对角方程组。
设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记
11
2223
3
1
10
0001
00
00
00010000000100,00000000000
00
1n n n
n b L U γαβγββγβ--⎛⎫⎛⎫
⎪ ⎪
⎪ ⎪ ⎪ ⎪
∂==
⎪
⎪ ⎪ ⎪ ⎪ ⎪
⎪ ⎪
⎪ ⎪∂⎝
⎭
⎝
⎭
L L L L
L L M M M M
M M M M
M M L L L
L
L
可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。
事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。
其计算公式为:
1111,
1111
,111
,2,3,,,1,2,,1i
i i i i i i i i
i i i i i n n
i i i i c f b y i n c a b a f y y x y i n n x y x βγββαβγγβαβγ--+⎧
===⎪⎪
=⎪⎪
⎪==-=
⎪⎪⎨
-⎪=⎪⎪
=⎪⎪=--⎪=-⎪⎩L L 对对(*)
三、程序设计
function x=chase(a,b,c,f)
%求解线性方程组Ax=f,其中A 是三对角阵 %a 是矩阵A 的下对角线元素a(1)=0 %b 是矩阵A 的对角线元素
%c 是矩阵A 的上对角线元素c(n)=0 %f 是方程组的右端向量 n=length(f);
x=zeros(1,n);y=zeros(1,n); d=zeros(1,n);u= zeros(1,n); %预处理 d(1)=b(1); for i=1:n-1 u(i)=c(i)/d(i);
d(i+1)=b(i+1)-a(i+1)*u(i); end
%追的过程
y(1)=f(1)/d(1); for i=2:n
y(i)=(f(i)-a(i)*y(i-1))/d(i); end
%赶的过程 x(n)=y(n); for i=n-1:-1:1
x(i)=y(i)-u(i)*x(i+1); end
>> a=[0,-1,-1,-1,-1,-1,-1,-1,-1,-1];
>> b=[4,4,4,4,4,4,4,4,4,4];
>> c=[-1,-1,-1,-1,-1,-1,-1,-1,-1,0];
>> f=[7,5,-13,2,6,-12,14,-4,5,-5];
>> x=chase(a,b,c,f)
x =
2.0000
1.0000
-3.0000
0.0000
1.0000
-2.0000
3.0000
-0.0000
1.0000
-1.0000
四、结果分析和讨论
追赶法求解的结果为x=(2,1,-3,0,1,-2,3,0,1,-1)T。
求解结果与精确解一样,这表明追赶法对于求解三对角方程组具有非常高的精度,误差非常小。
算法次数也较少,不选主元也可以有效的算出精确结果,是一种计算量少而数值稳定的方法。
五、完成题目的体会与收获
通过本题的求解,深刻的理解了追赶法求解三对角方程组的算法原理。
学会了追赶法的matlab编程,学会了又一种求解特殊方程组的方法。
追赶法在计算量方面有着巨大的优势,因此在可能的情况下应优先使用追赶法。
加深了对数值计算教材知识的理解,收获非常大。