追赶法求解三对角方程及其算例学习资料
TDMA追赶法

做三次样条曲线时,需要解三对角矩阵(Tridiagonal Matrices)。
常用解法为Thomas Algorithm,又叫The tridiagonal matrix algorithm (TDMA)。
它是一种基于高斯消元法的算法,分为两个阶段:向前消元forward elimination和回代backward substitution。
本文以一个6乘6矩阵为例,介绍一下使用TDMA的求解过程。
1.范例求解步骤1:将矩阵变为上三角矩阵首先要把上面公式中的系数矩阵变为一个上三角矩阵。
第一行:将上式除以b1:可写作:所以矩阵方程可写为:第二行:将变换后的第一行乘以a2,再与第二行相减,即可消去x1,得:所以新的矩阵方程为:同理可推,第三行:第四行:第五行:第六行:最后得到新的上三角矩阵公式为:步骤2:求解x逆序可以求出,如下:2. 一般性公式:注意:使用TDMA求解,系数矩阵需时diagonally dominant,即:3. 实现代码(C语言)void tdma(float x[], const size_t N, constfloat a[], constfloat b[], float c[]){size_t n;c[0] = c[0] / b[0];x[0] = x[0] / b[0];for (n = 1; n < N; n++) {float m = 1.0f / (b[n] - a[n] * c[n - 1]);c[n] = c[n] * m;x[n] = (x[n] - a[n] * x[n - 1]) * m;}for (n = N - 1; n-- >0; )x[n] = x[n] - c[n] * x[n + 1];}。
追赶法

一、实验题目用追赶法解线性三对角方程组:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡322141141141124321x x x x 二、实验目的1.熟悉掌握追赶法法的基本原理和基本方法。
2.学会用追赶法法解简单的方程组。
三、实验原理(1)f Ly =,求y ;(2)y Ux =,求x ; 从而得到解三对角线方程组的追赶法公式。
1. 计算的递推公式:111/b c =β)/(1--=i i i i i a b c ββ2. 解:f Ly =111/b f y =a ab y a f y i i i i i i i )/()(11----=β3. 解:y Ux =n n y x =1+-=i i i i x y x β四、实验内容及结果原始数据:a=[1,1,1];b=[2,4,4,4];c=[1,1,1];d=[1,-2,2,-3];追赶法解三对角方程组:程序源代码%machase.mfunction x=machase(a,b,c,d)%用途:追赶法解三对角方程组Ax=d%格式:x= machase(a,b,c,d) a为次下对角线元素向量,b主对角元素% 向量,c为次上对角线元素向量,d为右端向量,x返回解向量n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);end输入:a=[1,1,1];b=[2,4,4,4];c=[1,1,1];d=[1,-2,2,-3];machase(a,b,c,d)结果:ans =0.9615 -0.9231 0.7308五、实验结果分析追赶法为一种特殊的LU分解法。
追赶法是求解三对角矩阵的常用方法,但从整体编程角度分析,其程序编写较迭代法复杂,但通用性较好。
三对角方程组的追赶法

2013-2014(1)专业课程实践论文题目:三对角方程组的追赶法一、算法理论在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组11112222211111n n n n n n n n n b c x f a b c x f a b c x f a b x f -----⎛⎫⎛⎫⎛⎫⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪= ⎪⎪⎪ ⎪⎪⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭, 简记为Ax f =。
求解Ax f =:等价于解两个三角形方程组,Ly f y =求;,Ux y x =求.从而得到解三对角线方程组的追赶法公式:(1)计算{}i β的递推公式()111/,/,2,3,,1;i i i i i c b c b a i n βββ==-=- (2) 解Ly f =()()11111/,/,2,3,,;i i i i i i i y f b y f a y b a i n β--==--=(3)解Ux y =1,,1,2,2,1.n n i i i i x y x y x i n n β+==-=--我们将计算系数12112n n y y y βββ-→→→→→→ 及的过程称为追的过程, 将计算方程组的解11n n x x x -→→→ 的过程称为赶的过程。
#include <stdio.h>#include <math.h>#include<stdlib.h>#define N 20double a[N], b[N], c[N-1], f[N], r[N];int n;int i;void LUDecompose(); // LU分解void backSubs(); // 回代void main(){printf("请输入方程的维数n=");scanf("%d",&n);getchar();if(n>N||n<=0){printf("由于该维数过于犀利, 导致程序退出!");return;}printf("\n输入下三角元素\n");printf("输入%d个a值: ", n-1);for (i=1; i<n; i++)scanf("%lf", &a[i]);getchar();printf("\n输入主对角线元素\n");printf("输入%d个b值: ", n);for (i=0; i<n; i++)scanf("%lf", &b[i]);getchar();printf("\n输入上三角元素\n");printf("输入%d个c值: ", n-1);for (i=0; i<n-1; i++)scanf("%lf", &c[i]);getchar();printf("\n输入%d个方程组右端项: \n", n);for (i=0; i<n; i++)scanf("%lf", &f[i]);getchar();LUDecompose();backSubs();printf("\n线性方程组的解为: \n");for (i=0; i<n; i++)printf("x%d=%lf\n", i+1, f[i]);}void LUDecompose(){ //α被b取代, β被c取代, 以节省存储空间c[0]=c[0]/b[0];for(i=1;i<n-1;i++){r[i]=a[i];b[i]=b[i]-r[i]*c[i-1];c[i]=c[i]/b[i];}r[i]=a[i];b[i]=b[i]-r[i]*c[i-1];}void backSubs(){ // y被f取代, x也被f取代, 以节省存储空间f[0]=f[0]/b[0];for(i=1; i<n; i++)f[i]=(f[i]-r[i]*f[i-1])/b[i];f[n-1]=f[n-1];for(i=n-2;i>=0;i--)f[i]=f[i]-c[i]*f[i+1];}四、 算法实现例1.用该程序计算三对角线方程组2100012100A 012100012100012⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭---=-----, 10000b ⎛⎫⎪ ⎪⎪= ⎪ ⎪ ⎪⎝⎭计算其方程组的解。
(完整版)2.6追赶法

第16讲 追赶法、误差分析在实际应用问题中,经常会遇到解三对角线方程组。
例如:用三次样条函数的插值问题中得到的三转弯及三弯矩方程组,当时说可用追赶法来求解。
还有用差分法解二阶线性常微分方程边值问题,若用三点插值格式也得到解三对角线方程组,本节介绍该类方程组中的特例及该种方程组的解法:追赶法。
优点:1.计算量小。
2.方法简单,存贮量小。
3.数值稳定的(对舍入误差来说)。
1 追赶法三对角线方程组的一般表示方法:可见,对A 的分解只需求i i u l ,且按n n n l u l u l u l −→−−→−−→−−→−−→−−→−−→−--112211.....的递推过程进行,形象地称为“追”的过程⎩⎨⎧=-==-),....2(/)(/1111n i l y a f y l f y i i i i⎩⎨⎧-=-==+)1,2,.....1(1n i x u y x y x i i i inn 形象地称回代求解过程为“赶”的过程追赶法的计算量为5n-4次乘除法,可用4个 一 维数组存放{}{}{}{}i i i i f c b a ,,,。
共占用4n-2个单元,在计算过程中{}{}{}i i i y u l ,,依次覆盖掉{}{}{}i i i f c b ,,最后,{}i x 覆盖掉{}i y ,所以,追赶法具有计算量小,占用内存单元少的特点。
2、误差分析⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-n n l u u u U 121....111⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=n nl a l a l a l L ....33221)1,...,3,2,1(-=n i ⎪⎩⎪⎨⎧+===+++11111i i i i ii i lu a b u l c l b ⎪⎩⎪⎨⎧-===+++ii i i ii i u a b l l c u b l 11111/)1,...,3,2,1(-=n i病态方程组与条件数一个线性方程组Ax=b 是由它的系数矩阵A 和它的右端项b 所确定,在实际问题中,由于各种原因,A 或b 往往有误差,从而使得解也产生误差。
matlab追赶法解101阶三对角方程组

在探讨MATLAB追赶法解101阶三对角方程组之前,我们首先需要了解什么是追赶法和什么是三对角方程组。
追赶法又称托马斯算法,是一种用于求解带状矩阵(即只有主对角线和两条相邻的对角线上有非零元素的矩阵)的线性方程组的方法。
而三对角矩阵就是只有主对角线和两条相邻的对角线上有非零元素的矩阵。
在实际应用中,求解带状矩阵的线性方程组是非常常见的,特别是在数值计算和科学工程领域。
现在,让我们深入探讨MATLAB追赶法解101阶三对角方程组的方法和具体步骤。
一、MATLAB追赶法解101阶三对角方程组1. 概念介绍101阶三对角方程组是一个非常大的线性方程组,通常使用传统的高斯消元法来求解会耗费大量的时间和计算资源。
而MATLAB追赶法通过利用三对角矩阵的特殊性质,可以有效地简化计算过程,并且节省大量的内存和计算资源。
2. 追赶法步骤(1)将原方程组化为追赶法所需的形式;(2)利用追赶法求解三对角线性方程组。
二、追赶法求解101阶三对角方程组的实现过程1. 将原方程组化为追赶法所需的形式对于101阶三对角方程组,我们首先需要将其化为追赶法所需的形式。
这个过程涉及到选取合适的追赶元和追赶子以及对原方程组的变形,将其化为追赶法能够直接处理的形式。
2. 利用追赶法求解线性方程组一旦将原方程组化为追赶法所需的形式,我们就可以利用追赶法对其进行求解。
追赶法的核心是通过追赶子的迭代计算,逐步求得线性方程组的解。
在MATLAB中,可以使用内置的追赶法求解函数,也可以编写自定义的追赶法算法来实现对101阶三对角方程组的求解。
三、个人观点和理解在实际工程和科学计算中,追赶法是一种非常有效的求解带状矩阵线性方程组的方法。
对于大规模的三对角方程组,特别是高阶的情况,传统的直接求解方法往往会遇到内存和计算资源的限制,而追赶法能够通过精巧的迭代计算,在保证解的精度的显著提高计算效率。
在MATLAB中,通过调用内置的追赶法函数,可以快速地求解大规模的三对角方程组,极大地方便了工程实践中的数值计算工作。
【良心出品】MATLAB 追赶法求解三对角方程组的算法原理例题与程序

3)三对角形线性方程组123456789104100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014x x x x x x x x x x -⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎢⎥--⎢⎢⎥⎢⎢⎥-⎣⎦⎣⎦7513261214455⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥-⎢⎥⎢⎥⎢⎥-⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥-⎣⎦*(2,1,3,0,1,2,3,0,1,1)T x =--- 二、数学原理设系数矩阵为三对角矩阵1122233111000000000000000n n n nn b c a b c a b A a b c a b ---⎛⎫ ⎪ ⎪ ⎪=⎪ ⎪ ⎪⎪ ⎪⎝⎭则方程组Ax=f 称为三对角方程组。
设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记1122233110000100000001000000100,00000000000001n n nn b L U γαβγββγβ--⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪ ⎪ ⎪∂==⎪⎪ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪∂⎝⎭⎝⎭可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。
事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。
其计算公式为:1111,1111,111,2,3,,,1,2,,1ii i i i i i i ii i i i i n ni i i i c f b y i n c a b a f y y x y i n n x y x βγββαβγγβαβγ--+⎧===⎪⎪=⎪⎪⎪==-=⎪⎪⎨-⎪=⎪⎪=⎪⎪=--⎪=-⎪⎩对对(*)三、程序设计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:ny(i)=(f(i)-a(i)*y(i-1))/d(i); end%赶的过程 x(n)=y(n); for i=n-1:-1:1x(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.00001.0000-3.00000.00001.0000-2.00003.0000-0.00001.0000-1.0000四、结果分析和讨论追赶法求解的结果为x=(2,1,-3,0,1,-2,3,0,1,-1)T。
追赶法求解三对角方程组

追赶法求解三对角方程组追赶法,这个名字听起来就像是一种竞赛,其实它是一种解决三对角方程组的好办法,简单得让人想笑。
想象一下,你在一个热闹的市场,身边是熙熙攘攘的人群,突然你的朋友向你喊:“嘿,快来帮我算这个方程组!”你心里想,什么方程组啊,我可不想被这复杂的数学问题给吓倒。
别担心,追赶法就像你身边的超级英雄,轻松搞定这些棘手的问题。
三对角方程组的形状其实就像个台阶,每一层都有自己的高度。
我们通常会遇到的就是那种对角线上的元素大于零,旁边的元素都比较小,这样一来,整个方程组就像是在给你发出信号:“来吧,来解决我!”在这个市场里,你得学会怎么“追赶”那些神秘的数。
追赶法的核心就是把复杂的问题变得简单,想想如果你能把一个巨大的蛋糕切成小块,那你就能轻松吃掉它。
咳咳,数学也是这样!你得确定你的三对角矩阵。
这个矩阵就像是你的地图,告诉你哪里有高地,哪里有低洼。
然后,你需要开始你的追赶之旅,逐步解决每一个未知数。
听上去是不是有点像探险?这就对了!在这个过程中,你需要运用一些聪明的小技巧,比如把当前的未知数用前一个已知数来表达,仿佛在追赶一个流动的目标。
哇,数学原来可以这么有趣,仿佛在和未知数玩捉迷藏。
我们就来谈谈如何进行具体的计算。
假设你有一个三对角矩阵,分为主对角线和两条副对角线。
你得把这个矩阵转化成一个更易处理的形式。
就像你把一堆衣服整理成一个个小堆,清晰明了。
通过一些简单的运算,你可以得到一个新的方程组。
这个时候,你会发现,原本复杂的问题似乎在慢慢迎刃而解,简直就像是阳光透过云层。
然后,进入最终的“追赶”阶段。
你得逐步代入已知的值,像是在追逐那只一直跑的兔子,直到抓到为止。
这一步可能需要一些耐心,但你可以想象自己正在追逐一场美妙的冒险,哪怕有点小曲折也没关系。
在这个过程中,你会体会到一种成就感,仿佛自己是数学界的超级英雄,成功解出了一个又一个的未知数。
好啦,最后我们来总结一下追赶法的魅力。
它不仅让复杂的三对角方程组变得简单,还让整个过程充满乐趣。
解三对交线方程组的追赶法2

一、理论基础
解三对交线方程组的追赶法
三对角线方程组的一般形式: 三对角线方程组的一般形式:
b1 c1 x1 f1 a b c x f 2 2 2 2 2 M M O O O ( 7.1) a i bi ci x i = f i 或 Ax = f M M O O O a i ≠ 0 a n−1 bn−1 cn−1 x n−1 f n−1 且 bi ≠ 0 c i ≠ 0 an bn x n f n i = 2, L,n − 1 3, (1) | b1 |>| c1 |> 0 , | bn |>| an |> 0 其中, 满足条件 满足条件: 其中,A满足条件: (7.2) ( 2) | bi |≥| ai | + | ci |, (ai ci ≠ 0, i = 2,L , n − 1)
例4.4.1(P89) 4.4.1(P89)
解(7.1)的追赶法计算公式 7.1) 分解计算公式( (1)分解计算公式( A = L′U ): β 1 = c1 b1 − a β i1 , β i = c i ( bii − a i iβ i −−1)) ( i = 2, L , n − 1) (2)求解L′y = f 逆推公式
三、数值稳定性
其中A满足 满足( 定理17 定理17 设有三对角线方程组 Ax = f ,其中 满足(7.2)式, α 满足: 则由追赶法计算公式得到 { i }, {β i } 满足: β i = ci (bi − a i β i −1 ) (1) 0 < β i < 1, ( i = 1,2,L, n − 1); ( 2) 0 < c i ≤ bi − a i < α i < bi + a i , ( i = 2, L , n − 1); ( 3 ) 0 < bn − a n < α n < bn + a n | 分析: 要证 而此式中含有 分析 (1)要证 β i < 1, 只要证 α i |=| bi − a i β i −1 |> c i , 而此式中含有 β i −1,因此可用归纳法证明。 、(3) 用三角不等式即可得证。 因此可用归纳法证明。 (2)、 用三角不等式即可得证。 c1 显然成立。 < 1显然成立。 证明: 证明:(1) 0 < β 1 = b1 假设 0 < β i −1 < 1, 下证 0 < β i < 1, | 事实上, 事实上,α i |=| bi − a i β i −1 |≥| bi | − | a i || β i −1 | >| bi | − | a i |≥| c i |
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
追赶法求解三对角方程及其算例
追赶法求解三对角方程组
要求:对于给定的三对角系数矩阵和右端项,可以求
解线性代数方程组
一、 追赶法的数学理论
设系数矩阵为三对角矩阵
112223311100
00000
00000000
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 对对(*)
二、 追赶法的算法和流程图
1.预处理
生成方程组的系数i u 及其除数i d ,事实上,按式(*)可交替生成i d 与i u :
1d →1u →2d →…→1-n u →n d
其计算公式为
⎪⎩⎪
⎨⎧-=-===+++1,...,2,1,
,/c u b 111
i i 11n i u a b d d d i i i i i 2.追的过程
顺序生成方程组右端:
i y →2y →…→n y
据式(*)的计算公式为
n i d y a f y d f y i i i i i ,...,3,2,/)(/1111=⎩⎨
⎧
-==- 3.赶的过程
逆序得出方程组的解i x :
n x →1-n x →…→1x
其计算公式按式为
1,2,1,
1,⋯--=⎩⎨
⎧
-==+n n i x u y x y x i i i i n n 三、 追赶法的Matlab 实现
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);
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
四、 追赶法的算例实现
算例 用追赶法求解方程组⎥
⎥⎥⎥
⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢
⎢⎣
⎡1016432153-1-21-2-31-1-2x x x x 解答
令a=[0,-1,-1,-3]; b=[2,3,2,5]; c=[-1,-2,-1,0];
在命令窗口运行语句 x=chase(a,b,c,f) 得结果为
x=
5 4 3 2。