【良心出品】MATLAB 追赶法求解三对角方程组的算法原理例题与程序

合集下载

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函数来实现追赶法求解方程组。

Matlab追赶法和迭代法解线性方程组

Matlab追赶法和迭代法解线性方程组

Matlab追赶法和迭代法解线性⽅程组实验⽬的:1)追赶法解三对⾓阵;2)掌握解线性⽅程组的迭代法;3)⽤Matlab实现Jacobi及超松弛迭代法实验要求:1)掌握追赶法解三对⾓阵2)掌握解线性⽅程组的迭代法3)提交追赶法、Jacobi及超松弛迭代法的m⽂件实验内容:1)追赶法解三对⾓矩阵⽅程(m⽂件)习题1. ⽤追赶法的m⽂件求解2)Jacobi迭代法解线性⽅程组(m⽂件)对不同初值⽤Jacobi迭代法解习题1并⽐较结果。

3)超松弛迭代法解线性⽅程组(m⽂件)对不同松弛因⼦解习题1并⽐较结果。

实验步骤: 代码:1 %追赶法2 %输⼊:系数矩阵A和因变量d;3 %输出:⾃变量x4 function z=zuigan(A,d)5 n=length(d);6 %取三对⾓元素a,b,c7for i=1:n-18 a(i)=A(i,i);9 b(i)=A(i+1,i);10 c(i)=A(i,i+1);11 end12 a(n)=A(n,n);13 %分解系数矩阵14 u(1)=a(1);15 l(1)=c(1)/a(1);16for i=2:n-117 u(i)=a(i)-b(i-1)*l(i-1);18 l(i)=c(i)/u(i);19 end20 u(n)=a(n)-c(n-1)*l(n-1);21 %解y22 y(1)=d(1)/u(1);23for k=2:n24 y(k)=d(k)-c(k-1)*y(k-1)/u(k);25 end26 %解x27 x(n)=y(n);28for k=n-1:-1:129 x(k)=y(k)-l(k)*x(k+1);30 end31 z=x;32 endzuigan 运⾏: 所得结果,较为粗糙。

代码:1 %雅克⽐迭代法2 %输⼊系数矩阵A,因变量b,初始向量x0,容许误差eps,最⼤迭代次数t3 %输出⾃变量x和迭代数n4 function [z,k]=jacobi(A,b,x0,e,t)5 %默认eps和最⼤迭代次数m6if nargin==37 e=1e-6;8 m=200;9 elseif nargin<310 error('输⼊的参数不⾜');11return;12 elseif nargin==513 m=t;14 end15 n=length(b);16 x(1,:)=x0;17 z(1,:)=x0;18for k=2:m19 sum=0;20for i=1:n21 w=0;22 u=0;23for j=i+1:n24 w=w+A(i,j)*x(k-1,j);25 end26for j=1:i-127 u=u+A(i,j)*x(k-1,j);28 end29 x(k,i)=(-1/A(i,i))*(u+w-b(i));30if sum<abs(x(k,i)-x(k-1,i))31 sum=abs(x(k,i)-x(k-1,i));32 end33 end34if sum<e35 z(k,:)=x(k,:);36return;37 end38 z(k,:)=x(k,:);39 end40 endjacobi 运⾏⽰例,初始向量x0=[0 0 0 0 0 0];和初始向量x0=[1 1 1 1 1 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 ⎛⎫⎪ ⎪⎪= ⎪ ⎪ ⎪⎝⎭计算其方程组的解。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

编写用追赶法解三对角线性方程组的程序,并解下列方程组

编写用追赶法解三对角线性方程组的程序,并解下列方程组

计算方法与实习上机实验(二)实验名称:编写用追赶法解三对角线性方程组的程序,并解下列方程组:(1)⎪⎪⎩⎪⎪⎨⎧-=+-=-+--=-+-=-12,112,122,524343232121x x x x x x x x x x (2)Ax=b,其中A 10×10=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-----41141.........14114114, b 10×1=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--1515...15-15-27- 程序代码:#include<iostream>using namespace std;#include<iomanip>int main(){float a[100],b[100],c[100],x[100];int i,k,N;while(1){int ability=1; //ability 用于判断可不可以执行追赶法的操作cout<<"输入三对角矩阵的维度:"<<endl;cin>>N;cout<<"输入三对角的数据:"<<endl;cin>>b[0]>>c[0]>>x[0];for(i=1;i<N-1;i++) //输入各组数据{cin>>a[i]>>b[i]>>c[i]>>x[i];}cin>>a[N-1]>>b[N-1]>>x[N-1];for(k=0;k<N-1;k++){if(b[k]==0) {cout<<"不可用追赶法解此题!"<<endl;//当对角线上的元素全部为零的时候不可以用追赶法.ability=0;break;}else{ a[k+1]=a[k+1]/b[k];b[k+1]=b[k+1]-a[k+1]*c[k];x[k+1]=x[k+1]-a[k+1]*x[k];//这个过程执行的是消元过程(即追赶法的追):对应于书上的βi=bi-lic(i-1),yi=di-liy(i-1)}}if(ability){x[N-1]=x[N-1]/b[N-1]; //回代法的第一项for(i=N-2;i>=0;i--) //下标从大到小变化,是赶的过程{x[i]=(x[i]-c[i]*x[i+1])/b[i];}cout<<"此方程的解为:"<<endl;for(i=0;i<N;i++){cout<<setiosflags(ios::showpoint);cout<<"x["<<i+1<<"]="<<setiosflags(ios::fixed)<<setprecision(1)<<x[i]<<endl; //保留一位有效数字}}}return 0;}运行结果:。

追赶法求解三对角方程组

追赶法求解三对角方程组

追赶法求解三对角方程组追赶法,这个名字听起来就像是一种竞赛,其实它是一种解决三对角方程组的好办法,简单得让人想笑。

想象一下,你在一个热闹的市场,身边是熙熙攘攘的人群,突然你的朋友向你喊:“嘿,快来帮我算这个方程组!”你心里想,什么方程组啊,我可不想被这复杂的数学问题给吓倒。

别担心,追赶法就像你身边的超级英雄,轻松搞定这些棘手的问题。

三对角方程组的形状其实就像个台阶,每一层都有自己的高度。

我们通常会遇到的就是那种对角线上的元素大于零,旁边的元素都比较小,这样一来,整个方程组就像是在给你发出信号:“来吧,来解决我!”在这个市场里,你得学会怎么“追赶”那些神秘的数。

追赶法的核心就是把复杂的问题变得简单,想想如果你能把一个巨大的蛋糕切成小块,那你就能轻松吃掉它。

咳咳,数学也是这样!你得确定你的三对角矩阵。

这个矩阵就像是你的地图,告诉你哪里有高地,哪里有低洼。

然后,你需要开始你的追赶之旅,逐步解决每一个未知数。

听上去是不是有点像探险?这就对了!在这个过程中,你需要运用一些聪明的小技巧,比如把当前的未知数用前一个已知数来表达,仿佛在追赶一个流动的目标。

哇,数学原来可以这么有趣,仿佛在和未知数玩捉迷藏。

我们就来谈谈如何进行具体的计算。

假设你有一个三对角矩阵,分为主对角线和两条副对角线。

你得把这个矩阵转化成一个更易处理的形式。

就像你把一堆衣服整理成一个个小堆,清晰明了。

通过一些简单的运算,你可以得到一个新的方程组。

这个时候,你会发现,原本复杂的问题似乎在慢慢迎刃而解,简直就像是阳光透过云层。

然后,进入最终的“追赶”阶段。

你得逐步代入已知的值,像是在追逐那只一直跑的兔子,直到抓到为止。

这一步可能需要一些耐心,但你可以想象自己正在追逐一场美妙的冒险,哪怕有点小曲折也没关系。

在这个过程中,你会体会到一种成就感,仿佛自己是数学界的超级英雄,成功解出了一个又一个的未知数。

好啦,最后我们来总结一下追赶法的魅力。

它不仅让复杂的三对角方程组变得简单,还让整个过程充满乐趣。

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

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

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

二 实验内容1、 学习和理解追赶法求解三对角线性方程组的原理及方法;2、 利用MA TLAB 编程实现追赶法;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 。

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

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

用追赶法求解三对角方程组1. 三对角方程组的背景大家好,今天咱们来聊聊一个有点学术味儿的话题——三对角方程组。

不过别担心,我会尽量让这件事情变得轻松有趣,就像跟朋友聊天一样。

三对角方程组呢,其实就是那些系数在对角线附近的线性方程组,听起来是不是有点复杂?别急,咱们慢慢来,打个比方,它就像是一个田字格,只在主要的对角线上有数字,其他地方都是零。

哎,生活中有很多时候我们会遇到这样的方程,比如在物理、工程或者计算机科学里。

这时候,咱们就得想办法求解它们。

2. 追赶法的简介2.1 追赶法是什么好啦,接下来咱们来介绍一下追赶法。

这法子听上去是不是有点像小时候玩捉迷藏的感觉?其实它就是一种巧妙的迭代算法,专门用来解决那些三对角的线性方程组。

为什么叫追赶法呢?因为它能快速“追赶”到正确的解,就像小兔子在草地上跑得飞快一样。

它的基本思路就是把这个三对角方程组转化为一个更简单的形式,从而一步一步找到答案。

2.2 为什么用追赶法那为什么不直接用其他的方法呢?哦,朋友们,真相是,追赶法在处理这类方程的时候特别高效,速度快得像闪电!想象一下,如果你在一场马拉松里,你会选择走路还是飞奔?当然是飞奔啦!同样的道理,追赶法能节省大量的计算资源和时间,让我们轻松愉快地拿到想要的解。

3. 追赶法的步骤3.1 初始准备咱们要开始追赶了,首先得准备一下。

你需要把方程组写成标准的形式,通常我们可以把它表示成一个矩阵。

这样一来,咱们就能更清晰地看到那些三角形的结构。

接着,得设定好初始条件,这就好比你出发前检查好背包里有没有水、食物和地图。

没有这些东西,你可不敢贸然出门啊!3.2 逐步追赶准备好之后,追赶法就开始工作了。

第一步,咱们需要对三角形的每一行进行“消元”,也就是让下面的元素逐渐变为零。

听起来是不是有点复杂?其实就像在厨房里切菜,先把最上面的部分处理掉,然后逐步往下进行。

一步一步来,绝对不能急,这样才能确保每一刀都精准无误。

接着,咱们要开始反向代入,也就是从最后一行开始,逐行算出未知数。

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 =--- 二、数学原理设系数矩阵为三对角矩阵112223311100000000000000000n n n n n b c a b c a b A a b c a b ---⎛⎫ ⎪⎪ ⎪=⎪ ⎪ ⎪⎪⎪⎝⎭L L L M M MM M M L L则方程组Ax=f 称为三对角方程组。

设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记11222331100001000000010000000100,00000000000001n n nn b L U γαβγββγβ--⎛⎫⎛⎫⎪ ⎪⎪ ⎪ ⎪ ⎪∂==⎪⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪∂⎝⎭⎝⎭L L L LL L M M M MM M M MM M L L LLL可先依次求出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 βγββαβγγβαβγ--+⎧===⎪⎪=⎪⎪⎪==-=⎪⎪⎨-⎪=⎪⎪=⎪⎪=--⎪=-⎪⎩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: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。

三对角方程组求解的追赶法

三对角方程组求解的追赶法

1
2 5
1
1
2 2
1 1
3
5
2
A2
1 2
0
1 2
1 2
0
1 2
例题
(3) k 3,z(3) 3,c3 2
1 1 3 4 1 3
A2 112
1 0
252
3 1
1 0
5 2 2
4 1 6
3 1
5
A3
1 0 2
例题
由z(2) 3,z(1) 3
1 1 1 0 1 0 0 1 3 1 1 0
2 2 1 0 0 1 0 2 5 2 0 1
例题
1 0 4 1 2 0 1 0 0 1 6 4
0
1
3 1
1
0
0
1
01
5
3
0 0 1 0 2 1 0 0 1 0 2 1
所以得
1 6 4
A1
1
5 3
0 2 1
解法二:Gauss Jordan原地求逆法
矩阵求逆
实现 :由Gauss Jordan消去法矩阵形式
Ln Ln1...L1A I
1
...
l(k)
1k
其中LK
l(k) kk
l(k) nk
1
故A1 Ln Ln1...L1
l (k )
ik
a(k) ik
a(k) kk
(i
k)
1 (i k)
a(k) kk
Gauss—Jordan原地求逆法
2
p3 1
y3
f3
pn 1 yn fn
解得
y1 yi
f1 fi

【良心出品】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。

JA2-4-解三对角线方程组的“追赶”法

JA2-4-解三对角线方程组的“追赶”法

第3讲(2) §2.4 解三对角线方程组的“追赶”法一、 问题及解法.:(*) , 1 :1,,3,2,,,(*) 1,,,2,1, :: : ., 011111111100000011211211122211x x x x q a b p a d x d x b x a n x q p x n k q a b c q q a b p a d p b c q b d p n k x q p x Crout A A d d d d x x x x b a c b c b a c b b Ax n n n n n n n n n n n n n n n n n n k k k k k k k k k k k k k k k k n n n n n n n n ⇒⇒⇒→--==++-=⎪⎪⎩⎪⎪⎨⎧-=-=--===-=-=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=--------+---- 依次由式得个方程代入第最后一个式子将赶其中可以推得递推式追方法二分解参后面附作方法一此时方程组有唯一解为非奇异的为零则的各阶顺序主子式都不若为设三对角方程组二、 算法只需对上述公式编程即可 或按最后的“附注”所讲的分解法求解三、举例.)4,3,2,1( .12121 (1)225456 (2)3314151427 (3)4 483620913456151427 (3)(3) 56151427 3(2) 15456 2(1) 4121 1:134 64 4 42 4 136424114114114 2.8)(P38 2_4_1 Ex. 11222333444444323212143432321214321T x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x ==⇒+===⇒+===⇒+===⇒=⇒=+--+=+=+=⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=-⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------故解为得代入将得代入将得代入将代入最后一个方程得将式个方程解得代入第将个方程解得代入第将个方程解得从每下按追赶法的思路求解如方程组即解解线性方程组例 Maple 程序:——参文件Ex2_3_1.mws.2.6)(P34 2_3_2 Ex. 略根法解方程组用平方根或改进的平方例--练习题:.,,2,1,0 ,,2,1,11|||||||||||0 .****0******0*0**00**0 ,**0,*00,**0)P31( ),,2,1(0,, 1.22n k r n k r r r r r L D L L D L A L D L L D L L L D L LDL A L L D D L L n i r D LDL A A A A kk kk qq kk qq T k k k T k k k k Tk k k Tk k k k T k k k T T k T k k ii T T =>∴==⋅⋅=⋅⋅==<∴⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛⎪⎪⎭⎫ ⎝⎛==⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛=⎪⎪⎭⎫ ⎝⎛==>==且则记)参证的主对角线上元素中用分块阵证明正定且设 附注:.,,1,,2,1 ~ ,,3,2/)(/1,,3,2//,.111111111111111111211221赶法因此这个方法又称为追的过程称为赶计算的过程称为追计算再解先解其中分解得方法一作k k k k k k n n k k k k k n n n n k k kk k k k n n n n x y n n k x q y x y x y x R nk p y a d y b d y b y L q a b p n k p c q q a b p b c q b p q q q p a p p a p A Crout ⎩⎨⎧--=-==⇒=⎩⎨⎧=-==⇒=⎪⎪⎩⎪⎪⎨⎧-=-=⎭⎬⎫=-===⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=+-----。

追赶法解三对角矩阵

追赶法解三对角矩阵

实验追赶法解三对角方程组一、实验目的学会用追赶法解三对角方程组,并应用该算法于实际问题.二、实验要求给定三对角方程组,应用追赶法解得方程组的解。

三、实验内容1、追赶法2、以课本数值试验2为实例3、如果有错,修改直至运行成功,查看运行结果;四、实验环境matlab五、实验步骤和方法1、程序设计2、带入实例3、撰写实验报告。

六、实验预习要求得到实例的解一、[源程序]function x = my_zgf2(A,d,flag)%MY_ZGF2 Summary of this function goes here[m,n]=size(A); %计算矩阵的大小if nargin==2; %输入变量等于2的时候,A中储存所有元素的值for i=1:na(i)=A(i+1,i);b(i)=A(i,i);c(i)=A(i,i+1);enda(1)=0; %补充不足的值b(n)=A(n,n);c(n)=0;elsec=[A(1,:) 0]; %flag==1时b=A(2,:);a=[0 A(3,:)];endu(1)=b(1);for i=2:n %第一次追赶,得到上、下三角矩阵l(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*l(i);endy(1)=d(1); %解Ly=dfor i=2:ny(i)=d(i)-l(i)*y(i-1);endx(n)=y(n)/u(n); %解Ux=yfor i=n-1:-1:1x(i)=(y(i)-c(i)*x(i+1))/u(i);end二、带入实例A =-2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 05.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000-2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 0d= 8.1400 0 0 0 0 0 0 0>> d=A(4,:);my_zgf2(A,d,1)ans =2.0350 1.0174 0.5086 0.2541 0.1267 0.0626 0.0298 0.0119 >>。

用追赶法解三对角方程组

用追赶法解三对角方程组

用追赶法解三对角方程组课程设计题目: 用追赶法解三对角方程组设计一种用追赶法解三对角方程组的程序及可输入数据的界面,并用数值例子计算。

引言: 许多科学和工程技术问题,都归结为求解线性方程组。

例如,电学中网络问题,实验数据的曲线拟合、曲面拟合问题,解非线性方程组等都导致求导致求解线性方程组。

在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵呈三对角线形的线性方程组。

而解三对角方程组的最简单方法是用追赶法,它公式简单,计算量小,所占用的存储单元少,所以在小机器上也能求解。

摘要: 追赶法是用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比Gauss消去法的计算量要小的多。

本文主要介绍了追赶法的原理,并用Matlab编写求解程序,以实现对三对角方程组的求解,进一步解决实际中的问题。

Abstract: The chase method is uses for to solve three opposite angle systems of equations the special-purpose method,compare with Gauss elimination,its Computation load are are few. This article mainly introduced the Principle of The chase method,and use Matlab to Compilation solution procedure, Realizes to solve three opposite angle system of equations,and solve tht problem in our life.关键词: 追赶法三对角方程组追赶法的Matlab程序 Thomas方法正文:1.实验原理:设系数矩阵为三对角矩阵并且满足条件:称为对角占优的三对角线矩阵。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
122233111000000000
000000
n n n n
n b c a b c a b A a b c a b ---⎛⎫ ⎪ ⎪ ⎪=
⎪ ⎪ ⎪
⎪ ⎪⎝

则方程组Ax=f 称为三对角方程组。

设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记
1
122
233
1
10
00010
000
0001000
000100,00000000
00
0001n n n
n b L U γαβγββγβ--⎛⎫⎛⎫ ⎪
⎪ ⎪ ⎪ ⎪ ⎪∂==

⎪ ⎪
⎪ ⎪ ⎪
⎪ ⎪ ⎪ ⎪∂⎝



可先依次求出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 βγββαβγγβαβγ--+⎧
===⎪⎪
=⎪⎪
⎪==-=
⎪⎪⎨
-⎪=⎪⎪
=⎪⎪=--⎪=-⎪⎩对对(*)
三、程序设计
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编程,学会了又一种求解特殊方程组的方法。

追赶法在计算量方面有着巨大的优势,因此在可能的情况下应优先使用追赶法。

加深了对数值计算教材知识的理解,收获非常大。

相关文档
最新文档