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

一、实验题目用追赶法解线性三对角方程组:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡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阶三对角方程组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)首先对牛顿法掌握不太好.解决过程:认真看书,问同学。
【良心出品】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。
李庆扬-数值分析第五版第5章与第7章习题答案

3)设 ,则 ,从而 ,所以迭代方法发散。
4)设 ,则 ,从而
,所以迭代方法发散。
第5章
复习与思考题
1、用高斯消去法为什么要选主元?哪些方程组可以不选主元?
答:使用高斯消去法时,在消元过程中可能出现 的情况,这时消去法无法进行;即时主元素 ,但相对很小时,用其做除数,会导致其它元素数量级的严重增长和舍入误差的扩散,最后也使得计算不准确。因此高斯消去法需要选主元,以保证计算的进行和计算的准确性。
4从以上可以看出,每次运算后,区间长度减少一半,是线形收敛。
3.什么是函数 的不动点?如何确定 使它的不动点等价于 的零点
P215.
将方程 改写成等价的形式 ,若要求 满足 ,则 ;反之亦然,称 为函数 的一个不动点。
4.什么是不动点迭代法? 满足什么条件才能保证不动点存在和不动点迭代序列收敛于 的不动点
因为C的一、二、三阶顺序主子式分别为1,5,1,所以C能够分解为三角阵的乘积,并且分解是唯一的。
12、设
,
计算A的行范数,列范数,2-范数及F-范数。
本题考查的是矩阵范数的定义及求法
行范数0.6+0.5=1.1
列范数0.5+0.3=0.8
2-范数的计算需要用到特征值,特征值的计算可以使用幂法进行计算,也可以直接求。
(1)计算 的递推公式
(2)解Ly=f
(3)解UX=y
10、用改进的平方根法解方程组
。
本题明确要求使用平方根法进行求解。实际考查的LDU分解。见P157
。
11、下列矩阵能否分解为 (其中L为单位下三角阵,U为上三角阵)?若能分解,那么分解是否唯一。
, , 。
LU分解存在的条件
解三对交线方程组的追赶法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 |