追赶法解三对角方程组

合集下载

matlab追赶法求解方程组

matlab追赶法求解方程组

matlab追赶法求解方程组方程组是数学中常见的问题之一,解决方程组可以帮助我们理解和解决实际问题。

在数值计算中,matlab是一种常用的工具,它提供了许多求解方程组的方法。

其中,追赶法是一种常用的方法之一,它可以高效地求解三对角线方程组。

三对角线方程组是指方程组中只有主对角线和两个相邻的次对角线上有非零元素,其余元素均为零。

这种方程组在实际问题中经常出现,例如求解热传导方程、电路分析等。

追赶法是一种特殊的高斯消元法,它通过对方程组进行变换,将其转化为一个上三角形方程组和一个下三角形方程组,从而简化求解过程。

追赶法的基本思想是通过迭代的方式,逐步消去次对角线上的元素,最终得到方程组的解。

具体步骤如下:1. 将原方程组表示为矩阵形式,设为A*X=B,其中A是一个n×n的矩阵,X和B是n维列向量。

2. 对A进行LU分解,得到一个上三角矩阵U和一个下三角矩阵L,使得A=L*U。

3. 将方程组A*X=B转化为L*U*X=B。

4. 令Y=U*X,将方程组转化为L*Y=B。

5. 通过迭代的方式,逐步求解Y和X。

首先求解L*Y=B,然后求解U*X=Y。

6. 求解L*Y=B时,从第一行开始,逐行求解Y的每个分量。

设第i 行的元素为y(i),则有y(i)=B(i)-L(i,i-1)*y(i-1),其中L(i,i-1)是L矩阵中第i行第i-1列的元素。

7. 求解U*X=Y时,从最后一行开始,逐行求解X的每个分量。

设第i行的元素为x(i),则有x(i)=(Y(i)-U(i,i+1)*x(i+1))/U(i,i),其中U(i,i+1)是U矩阵中第i行第i+1列的元素。

通过以上步骤,我们可以得到方程组的解X。

追赶法是一种高效的求解三对角线方程组的方法,它的时间复杂度为O(n),其中n是方程组的维数。

相比于其他求解方法,追赶法具有计算量小、速度快的优势。

在matlab中,我们可以使用tridiag函数来实现追赶法求解方程组。

追赶法

追赶法

追赶法/平方根法 例2.4.1 设4阶方程组AX=B 为⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------121653342231124321x x x x这就是一个三对角方程组,既系数矩阵除了对角线的“三斜线”以外的元素均为0。

用追赶法求解三对角方程组的一种做法是把系数矩阵A 写成下列形式的LU 分解(这里采用Doolittle 分解,类似地也可以采用Crout 分解):()1.4.2321111153342231124321432⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------u u u u l l l 即L 为单位上三角阵,两斜行,主对角线元素为1,其下方的斜行元素特定;U 为上三角阵,也是两斜行,主对角线元素特定,其上方斜行的元素与A 对应的斜行元素相同(直接验算可知道)。

利用矩阵乘法规则,按顺序依次考虑A 的11a ->21a ->22a ->32a ->33a ->43a ->44a ,并对比(2.4.1)式两端可得2=1u → 1u =2 -1=12u l → 2l =-1/1u =-1/23=-2l +2u →2u =3+2l =5/2-2=23u l → 3l =-2/2u =-4/5 4=-23l +3u → 3u =4+23l =12/5-3=34u l →4l =-3/3u =-5/45=-34l +4u 4u =5+3⨯(-5/4)=5/4即得分解⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡------4/535/1222/51214/515/412/115334223112于是用前推过程求解下三角方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---121614/515/412/114321y y y y 得⎪⎪⎩⎪⎪⎨⎧=+==+-==+==2/54/515/65/4242/1163423121y y y y y y y再用回代过程求解上三角方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡---2/55/6464/535/1222/5124321x x x x 得⎪⎪⎩⎪⎪⎨⎧=+==+==+===52/)6(4)2/5/()24(3)5/12/()35/6(2)4/5/()2/5(2132434x x x x x x x 即的方程组的解()T x 2,3,4,5=.从实例看到,三对角方程组的追赶法是三角分解发的一种特殊应用,因此,一般地,如果对三角矩阵n n R A ⨯∈非奇异,其顺序主子式)1,...,2,1(0-=≠∆n i i ,则解三对角方程组Ax=d:()2.4.2...............12112111122211⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----n n n n n nn n n d d d d x x x x b a c b a c b a c b 的追赶法可描述如下:令A=LU ,则⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----n n n nn nn n n u c u c u c u l l l b a c b a c b a c b 1122113211122211......1 (1)11.........利用矩阵乘法规则,可求L 和U 的计算公式:⎩⎨⎧=-===--)),...3,2((/1111n i c l b u u a l b u i i i i i i i (2.4.3)于是,求解LY=D 得⎩⎨⎧=-==-)),...3,2(111n i y l d y d y i i i i (2.4.4)再求解UX=Y ,得三对方程组的解⎩⎨⎧=-==+)),...3,2(/)(/1n i u x c y x u y x i i i i i n n n (2.4.5)上述3个公式便组成解三角方程组的追赶法,国外称Thomas 算法。

三对角方程组的追赶法

三对角方程组的追赶法

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 ⎛⎫⎪ ⎪⎪= ⎪ ⎪ ⎪⎝⎭计算其方程组的解。

matlab追赶法解101阶三对角方程组

matlab追赶法解101阶三对角方程组

在探讨MATLAB追赶法解101阶三对角方程组之前,我们首先需要了解什么是追赶法和什么是三对角方程组。

追赶法又称托马斯算法,是一种用于求解带状矩阵(即只有主对角线和两条相邻的对角线上有非零元素的矩阵)的线性方程组的方法。

而三对角矩阵就是只有主对角线和两条相邻的对角线上有非零元素的矩阵。

在实际应用中,求解带状矩阵的线性方程组是非常常见的,特别是在数值计算和科学工程领域。

现在,让我们深入探讨MATLAB追赶法解101阶三对角方程组的方法和具体步骤。

一、MATLAB追赶法解101阶三对角方程组1. 概念介绍101阶三对角方程组是一个非常大的线性方程组,通常使用传统的高斯消元法来求解会耗费大量的时间和计算资源。

而MATLAB追赶法通过利用三对角矩阵的特殊性质,可以有效地简化计算过程,并且节省大量的内存和计算资源。

2. 追赶法步骤(1)将原方程组化为追赶法所需的形式;(2)利用追赶法求解三对角线性方程组。

二、追赶法求解101阶三对角方程组的实现过程1. 将原方程组化为追赶法所需的形式对于101阶三对角方程组,我们首先需要将其化为追赶法所需的形式。

这个过程涉及到选取合适的追赶元和追赶子以及对原方程组的变形,将其化为追赶法能够直接处理的形式。

2. 利用追赶法求解线性方程组一旦将原方程组化为追赶法所需的形式,我们就可以利用追赶法对其进行求解。

追赶法的核心是通过追赶子的迭代计算,逐步求得线性方程组的解。

在MATLAB中,可以使用内置的追赶法求解函数,也可以编写自定义的追赶法算法来实现对101阶三对角方程组的求解。

三、个人观点和理解在实际工程和科学计算中,追赶法是一种非常有效的求解带状矩阵线性方程组的方法。

对于大规模的三对角方程组,特别是高阶的情况,传统的直接求解方法往往会遇到内存和计算资源的限制,而追赶法能够通过精巧的迭代计算,在保证解的精度的显著提高计算效率。

在MATLAB中,通过调用内置的追赶法函数,可以快速地求解大规模的三对角方程组,极大地方便了工程实践中的数值计算工作。

用追赶法解三对角线方程组

用追赶法解三对角线方程组

云南大学数学与统计学实验教学中心实验报告一、实验目的加强"追赶法"在解方程组中的应用,掌握多种不同的解线性方程组的解法以及编程的应用二、实验内容用追赶法解下列严格对角优势的三对角线方程组⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡--------4114114114114⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡10020020020010054321x x x x x三、实验环境C 语言,Turboc四.实验方法追赶法;其算法如下:(1)计算::/i i i i c c b β← )/(i i i i i c c c b a ←- (i=2,3,4……n-1)(2)解111/LY=f:x b x ← 111/)(f y α=()/()i i i i i i i x a x b a c x ←-- (i=2,3,4……,n)1()/()i i i i i f r y y α-=- (3)解1:i i i i x c x UX Y x +←-= (i=n-1,n-2,……,2,1) 1)(n n i i i i y x y x x β+==-不用做,五、实验过程1实验步骤(1)编程: 根据所用算法及选用语言编出源程序(2). 开机, 打开所用语言系统输入所编源程序.(3). 调试程序, 修改错误直至能正确运行.(4). 运行程序并输出计算结果.2 关键代码及其解释#include <stdio.h> #include <conio.h> #include <math.h> /*预处理指令*/ #define MAX_n 100 /*宏定义,即最多可输入100阶方阵*/#define PRECISION 0.000001 /*精度*/void SulutionOutput(float x[],int n) /*输出方程组的解*/ /*带分号的为声明*/void TriDiagonalMatrixInput(float a[],float b[],float c[],float f[],int n)/*三对角元素的输入*/int Z_G_method(float a[],float b[],float c[],float f[],int n) /*三对角方程组求解—追赶法*/void main() /*主函数*/{int n;float a[MAX_n],b[MAX_n],c[MAX_n], d[MAX_n],f[MAX_n]; /*定义数组*/ printf("\nInput n=");scanf("%d",&n);TriDiagonalMatrixInput(a,b,c,,d,f,n); /*以下三行均为调用函数声明*/Z_G_method(a,b,c,,d,f,n);SulutionOutput(f,n);}3 调试过程1.本打算用递归调用,但是对那个不太熟悉,就改为用循环了;2.首先用do……while循环,出现语法错误太多;无法调试;后改为了do……while循环了;5.逐步调试修改程序,达到预期结果;六、实验总结1.遇到的问题及解决过程(1)对C语言掌握不太好,编写程序时语法错误较多.解决过程:耐心修改,逐步排除!(2)首先对牛顿法掌握不太好.解决过程:认真看书,问同学。

基于高斯消去法的追赶法

基于高斯消去法的追赶法

基于高斯消去法的追赶法
基于高斯消去法的追赶法是一种求解三对角矩阵线性方程组的方法。

三对角矩阵的特点是除了主对角线上的元素外,只有两个相邻的副对角线上有非零元素。

追赶法的思想是通过对三对角矩阵进行分解,将其转化为两个上、下三角矩阵的乘积形式,从而简化方程组的求解过程。

具体步骤如下:
1. 首先,对于三对角矩阵A的第一行进行变换,使得A的第一个元素为1。

2. 然后,对于i = 2, 3, ..., n,进行追赶过程,将A的第i 行的第i-1个元素(副对角线上)消去,将A的第i-1行的第i个元素(副对角线上)消去,并更新A的第i行的第i个元素(主对角线上)。

3. 最后,通过回代法求解得到方程组的解。

追赶法的优点是简单、高效,适用于解决大规模的三对角线性方程组。

它在科学计算和工程领域中有广泛的应用,例如求解抛物型偏微分方程、求解材料传输过程等。

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

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

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

二 实验内容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 ,令yUx =,则有:已知L 和d ,可求得y 。

则可得到y 的求解表达式:11/12,3,,()(1)*y()=()[()(1)]/y d l i nm 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 。

解三对交线方程组的追赶法2

解三对交线方程组的追赶法2
显然事实上现归纳法假设所以3因为由定理17说明追赶法计算公式中不会出现中间结果数量级巨大增长和相应的舍入误差差的严重累积即追赶法计算公式对于舍入误差是稳定的
一、理论基础
解三对交线方程组的追赶法
三对角线方程组的一般形式: 三对角线方程组的一般形式:
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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》课程设计追赶法解三对角方程组院(系)名称信息工程学院专业班级10普本信计学号*********学生姓名刘银朋指导教师张荣艳2013 年05 月31日数值分析课程设计评阅书课程设计任务书2012—2013学年第二学期专业班级:10普本信息与计算科学学号:100111014 姓名:刘银朋课程设计名称:数值分析Ⅰ、Ⅱ设计题目:追赶法解三对角方程组完成期限:自2013 年05月21 日至2013年05 月31日共10天设计依据、要求及主要内容:一、设计目的理解追赶法,掌握追赶法的算法设计以及关于追赶法的分析和综合应用,能够较熟练的应用Matlab软件编写求解追赶法的程序和应用Matlab软件数据库软件.二、设计内容(1)认真挑选有代表性的三对角方程组.(2)认真梳理解三对角方程组的解题思路.(3)比较追赶法和高斯消去法的计算精度.三、设计要求1.先用Matlab数据库中的相应的函数对选定的方程,求出具有一定精度的解. 2.然后使用所用的方法编写Matlab程序求解.3.对于使用多个方程解同意问题的,在界面上要设计成菜单的形式.计划答辩时间:2013年06 月 5 日工作任务鱼工作量要求:查阅文献资料不少于3篇,课程设计报告1篇不少于3000字.指导教师(签字):教研室主任(签字):批准日期:2013 年05 月20 日追赶法解三对角方程组摘要本文主要通过运用追赶法来求解三对角方程组的问题.追赶法是用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比Gauss消去法的计算量要小的多,本文主要介绍了追赶法的原理,并用Matlab编写求解程序,以实现对三对角方程组的求解,进一步解决实际中的问题.并且根据所得出的结果分析追赶法算法和高斯消去的法的计算精度.关键词:追赶法,三对角方程组,追赶法的Matlab程序目录1.前言 (1)2.解题思想和方法 (1)2.1 追赶法解题思想 (1)2.2追赶法解题原理 (4)3.对追赶法的MATLAB求解 (4)3.1实验程序 (4)3.2 应用举例 (5)4.与高斯消去法的精度比较 (5)课程设计总结 (8)参考文献 (8)1.前言当今很多科学与工程计算问题大都可以化为线性方程组的形式,所以有效的求解线性方程组在科学和工程计算中是非常重要的.虽然线性代数方程的求解方法和数值计算软件包均很成熟,但随着并行计算机的发展,问题的求解速度和解题规模都大大提高,因而使数值计算方法和响应的数学软件包都产生了变化,相应的线性方程组的有效并行求解也引起了人们的普遍关注.追赶法是用来求解三对角方程组的专用方法,生活中很多实际问题,都归结为求解线性方程组.例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求就解系数矩阵成三对角线性的方程组.而解三对角方程组的最简单方法是追赶法,公式简单,计算量小,所占用的存储单元少,所以在小机器上也能求解.追赶大事用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比Gauss消去法的计算量要小得多.应用追赶法求解三对角线性方程,追赶法仍然保持LU分解特性,它是一种特殊的LU分解.充分利用了系数矩阵的特点,而且使之分解更简单,得到对三对角线性方程组的快速解法. 本文讨论使用追赶法解线性方程组.介绍追赶法的理论,求解线性方程组的追赶法的实现以及追赶法的应用.2.解题思想和方法三对角矩阵是一种具有特殊意义的带状矩阵.用差分法求解二阶常微分方程边值问题时,最后常规解为求解具有三对角系数矩阵的线性方程组.对三对角矩阵实行Doolittle(或Crout)分解,便得到求解三对角方程组的最有效方法---追赶法.设矩阵A非奇异,A有Crout分解A=LU,其中L为下三角矩阵,U为单位上三角矩阵,可先依次求出L,U中的元素后,令Ux=y,先求解下三角方程组Ly=f得出y,再求解上三角方程组Ux=y,事实上求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑.本文主要介绍追赶法的原理,以及编写Matlab程序实现在计算机上的应用并分析他们的计算精度,比较解三对角方程组的最优解的问题.2.1 追赶法解题思想在实际问题中,经常遇到以下形式的方程组⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=+=++=++=++=+-------+-n n n n n n n n n n n n k k k k k k k d x b x a d x c x b x a d x c x b x a d x c x b x a d x c x b111112111232221212111 (2.11)这种方程组的系数矩阵A 为三对角矩阵,即⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=---n nn n n k k k b a c b a c b a c b a c b A 11122211 以下针对这种方程组的特点提供一种简便有效的算法—追赶法.追赶法实际上是高斯消去法的一种简化形式,它同样分消元与回代两个过程.先将(2.11)第一个方程中x 1的系数化为1112111b dx b c x =+111111b d y b c r ==(2.12)有1211y x r x =+注意到剩下的方程中,实际上只有第二个方程中含有变量x 1,因此消元手续可以简化.利用(2.12)可将第二个方程化为2312y x r x =+,这样一步一步地顺序加工(2.11)的每个方程,设第k – 1个方程已经变成111---=+k k k k y x r x(2.13)再利用(2.13)从第k 个方程中消去x k -1,得:k k k k k k k k k a y d x c x a r b 111)(-+--=+-同除()k k k a r b 1--,得n k a r b a y d x a r b c x kk k kk kk k k k k k ,,3,21111 =--=-+--+-记kk k kk k k kk k kk a r b a y d y a r b c r 111-----=-=则有 k k k k y x r x =++1 这样做n – 1步以后,便得到:111---=+n n n n y x r x将上式与(2.11)中第11个方程联立,即可解出x n = y n ,这里nn n nn n n a r b a y d y 11----=于是,通过消元过程,所给方程组(2.11)可归结为以下更为简单的形式:⎪⎪⎪⎩⎪⎪⎪⎨⎧==+=++nn k k k k y x y x r x y x r x 11211 (2.14) 这种方程组称作二对角型方程组,其系数矩阵中的非零元素集中分步在主对角线和一条次主对角线上⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛-11111121n k r r r r 对加工得到的方程组(2.14)自下而上逐步回代,即可依次求出x n ,x n -1,…,x 1,计算公式为:⎩⎨⎧--=-==+1,,2,11n n k x r y x y x k k k k n n (2.15)上述算法就是追赶法,它的消元过程与回代过程分别称作“追”过程与“赶”过程.综合追与赶的过程,得如下计算公式:⎪⎪⎪⎩⎪⎪⎪⎨⎧=--=-===---nk a r b a y d y a r b c r b d y b c r k k k k k k kkk k k k,,3,2111111111(2.16)⎩⎨⎧--=-==+1,,2,11n n k x r y x y x k k k k n n (2.17)2.2追赶法解题原理 (1) 计算{}i β的递推公式111/c b β=,/(),2,3,,1i i i i i c b a i n ββ=-=-.(2) 解Ly=f111/y f b =, 1()/(),2,3,,;i i i i i i i y f a y b a i n β-=--=(3) 解Ux=y11,,1,2,2,1n n i i i i x y x y x i n n β-+==-=--.我们将计算系数121n βββ-→→→及12n y y y →→→的过程称为追的过程.将计算方程组的解11n n x x x -→→→的过程称为追赶的过程.3.对追赶法的MATLAB 求解3.1实验程序function x=chase(a,b,c,f) %定义函数chase n=length(b); if n-1==length(a) for i=n-1:-1:1 a(i+1)=a(i); end end%将a 设置为n 维向量 c(1)=c(1)/b(1);f(1)=f(1)/b(1); for i=2:n-1b(i)=b(i)-a(i)*f(i-1)/b(i); c(i)=c(i)/b(i);f(i)=(f(i)-a(i)*f(i-1))/b(i);endf(n)=(f(n)-a(n)*f(n-1))/(b(n)-a(n)*c(n-1));for i=n-1:-1:1f(i)=f(i)-c(i)*f(i+1);endx=f;3.2 应用举例例1用追赶法解三对角方程组设270329045A⎛⎫⎪= ⎪⎪⎝⎭567f⎛⎫⎪= ⎪⎪⎝⎭求解线性方程组Ax=F解:(1)在Matlab中编写一个名为chase.m的M文件,依次输入数据如下;>> A=[2 7 0;3 2 9;0 4 5];>> a=[3 4];>> b=[2 2 5];>>c=[7 9];>> f=[5 6 7];>> x=chase (a,b,c,f)x= -3.0140 1.5754 0.1397得到输出结果x= -3.0140 1.5754 0.1397即为原线性方程组的解.结果验证:>>A*x’ans=5.00006.00007.0000得到ans=f即结果正确4. 与高斯消去法的精度比较事实上,追赶法的求解过程就是将系数矩阵分解两个简单的二对角线矩阵,从而归结为求解两个简单三角形方程组的过程. 高斯消去法是求解线性方程组的最基本方法之一.Gauss 消去法是针对一般的线性方程组,与线性代数中的初等变换解线性方程组方法类似.追赶法只是针对系数矩阵为三对角阵的方程组,因此是一种特殊的方程组.此方法效率较高,不过不适用于一般的线性方程组.下面对追赶法与高斯消去法计算量进行比较.例2 编写高斯消去法解线性方程组的Matlab 程序,并求解下面的线性方程组1231231235282821361x x x x x x x x x ++=⎧⎪+-=⎨⎪--=⎩解:编程如下f unction [RA,RB,n,X]=gaus(A,b)B=[A b];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelse disp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endend用Matlab调用程序:在Matlab中编写一个名为gauss.m的M文件,依次输入数据如下:A=[5,2,1;2,8,-3;1,-3,-6];b=[8;21;1]; [RA,RB,n,X]=gauss(A,b)运行结果RA =3RB =3n = 3X =1 2 -1ans = 1.00002.0000-1.0000综上所述,追赶法的原理和高斯消去法相同,但考虑到方程组的特点,计算时会把大量零元素撇开,从而大大节省计算量.追赶法实际上就是把高斯消去法用到求解三对角方程组上的结果.这时由于A特别简单,因此使得求解的计算公式非常简单,而且计算量仅为2(n-1)+(n-1)+[1+2(n-1)]=5n-4次乘除法,而另外解一个方程组Ax=f仅增加3n-2次乘除运算,易见追赶法的计算量是比较小的.课程设计总结首先,这次的课程设计让我把以前学习到的非线性方程的求解知识得到巩固和进一步的提高,对已有知识有了更进一步的理解和认识.同时也发现了自身有许多的不足之处.再者,在这次课程设计中碰到了很多的问题,自己通过上网,查阅了相关的书籍以及和我组其他的成员讨论的方式来解决的.另外编写程序是我的一大弱项,在以前做实验时总是按照老师给出的程序不加思考的敲进去,得出来结果就行,但在做这次课程设计时,需要自己真正的去理解和编程.通过这次课程设计,我从中学会了很多,也发现自己真的还有很多不足以及很多东西需要去学习.所以在以后的生活学习中要不断的扩大自己的视野,多学习一些与专业有关的知识,不能只满足于课本上的知识.所以在完成本专业的基础上,要不断涉猎,完善自我,希望自己在以后的课程中会得到更好的锻练.总的来说这次课程设计还是有很多的收获的,并且特别感谢我们组的成员在做课程设计的过程中对我的帮助.参考文献[1] 冯国忱,黄明游.数值分析(上册)[M].北京:高等教育出版社,2007.[2] 宋叶志,贾东志.MATLAB数值分析与应用[M].北京:机械工业出版社,2009.[3] 张德丰.MATLAB数值分析与应用[M].北京:国防工业出版社,2007.[4] 周煦,计算机数值方法及程序设计,机械工业出版社,2004.10.01.[5] 张静,杨文平,石傅强等,MATLAB程序设计与实例应用,中国铁道出版社,2003.。

相关文档
最新文档