三对角方程直接解法--追赶法+TDMA程序

合集下载

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

TDMA追赶法

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];}。

三对角矩阵(TridiagonalMatrices)的求法:ThomasAlgorithm。。。

三对角矩阵(TridiagonalMatrices)的求法:ThomasAlgorithm。。。

三对⾓矩阵(TridiagonalMatrices)的求法:ThomasAlgorithm。

做三次样条曲线时,需要解三对⾓矩阵(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, const float a[], const float 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];}。

三对角方程组的追赶法

三对角方程组的追赶法

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

三对角线性方程组的求解

三对角线性方程组的求解

一、概述三对角线性方程组的求解是许多科学和工程计算中最重要也是最基本的问题之一。

在核物理、流体力学、油藏工程、石油地震数据处理及数值天气预报等许多领域的大规模科学工程和数值处理中都会遇到三对角系统的求解问题。

很多三对角线性方程组的算法可以直接推广到求解块三对角及带状线性方程组。

由于在理论和实际应用上的重要性,近20年来三对角方程组的并行算法研究十分活跃。

大规模科学计算需要高性能的并行计算机。

随着软硬件技术的发展,高性能的并行计算机日新月异。

现今,SMP可构成每秒几十亿次运算的系统,PVP和COW可构成每秒几百亿次运算的系统,而MPP和DSM可构成每秒万亿次运算或更高的系统。

高性能并行计算机只是给大型科学计算提供了计算工具。

如何发挥并行计算机的潜在性能和对三对角系统进行有效求解,其关键在于抓住并行计算的特点进行并行算法的研究和程序的设计与实现。

另外,对处理机个数较多的并行计算系统,在设计并行算法时必须解决算法的可扩展性,并对可扩展性进行研究和分析。

二、问题的提出设三对角线性方程组为AX=Y (1)式中:A∈Rn×n非奇异,αij=0,。

X=(x1,x2,…xn)T Y=(y1,y2,…yn)T。

此系统在许多算法中被提出,因此研究其高性能并行算法是很有理论和实际意义的。

三、并行求解三对角系统的直接解法关于三对角线性方程组的直接求解已经有大量并行算法,其中Wang的分裂法是最早针对实际硬件环境,基于分治策略提出的并行算法。

它不仅通信结构简单,容易推广到一般带状线性方程组的并行求解,而且为相继出现的许多其它并行算法提供了可行的局部分解策略。

近20年来求解三对角方程组的并行算法都是基于分治策略,即通过将三对角方程组分解成P个小规模问题,求解这P个小规模问题,再将这些解结合起来得到原三对角方程组的解。

一般求解三对角方程组的分治方法的计算过程可分为3个阶段:一是消去,每台处理机对子系统消元;二是求解缩减系统(需要通信);三是回代,将缩减系统的解回代到每个子系统,求出最终结果。

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)首先对牛顿法掌握不太好.解决过程:认真看书,问同学。

matlab追赶法

matlab追赶法

Matlab追赶法1. 简介追赶法是一种求解特殊线性方程组的数值计算方法。

在Matlab中,我们可以利用追赶法求解带有追赶矩阵的线性方程组,该方法在某些情况下比直接使用高斯消元法更加高效。

2. 追赶法原理追赶法是基于矩阵的三对角性质进行求解的。

三对角矩阵是指除主对角线外,只有上对角线和下对角线上存在非零元素的矩阵。

对于一个n阶的三对角矩阵A,我们有以下形式的线性方程组:A * x = b其中,A是一个n阶的三对角矩阵,x是未知向量,b是已知向量。

3. 算法步骤追赶法的求解过程可以分为以下步骤:3.1. 利用追赶法将矩阵化为上三角矩阵追赶法的第一步是将三对角矩阵A转化为上三角矩阵U。

这可以通过以下迭代公式实现:u[i] = a[i] (i = 1)u[i] = a[i] - c[i-1]*b[i-1]/u[i-1] (i = 2, 3, ..., n-1)3.2. 求解中间向量利用上一步得到的上三角矩阵U,我们可以通过以下迭代公式求解中间向量y:y[i] = b[i] - c[i-1]*y[i-1]/u[i-1] (i = 2, 3, ..., n)3.3. 求解未知向量最后一步是通过回代求解未知向量x。

根据回代公式,我们可以得到:x[n] = y[n]/u[n]x[i] = (y[i] - b[i]*x[i+1])/u[i] (i = n-1, n-2, ..., 1)4. Matlab代码示例以下是使用Matlab实现追赶法的示例代码:function x = tridiag_solver(a, b, c, d)n = length(d);u = zeros(n, 1);y = zeros(n, 1);x = zeros(n, 1);u(1) = a(1);for i = 2:nu(i) = a(i) - c(i-1)*b(i-1)/u(i-1);endy(1) = d(1);for i = 2:ny(i) = d(i) - c(i-1)*y(i-1)/u(i-1);endx(n) = y(n)/u(n);for i = n-1:-1:1x(i) = (y(i) - b(i)*x(i+1))/u(i);endend5. 总结追赶法是一种求解特殊线性方程组的有效方法,特别适用于三对角矩阵。

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

三对角线性方程组的求解

三对角线性方程组的求解

一、概述三对角线性方程组的求解是许多科学和工程计算中最重要也是最基本的问题之一。

在核物理、流体力学、油藏工程、石油地震数据处理及数值天气预报等许多领域的大规模科学工程和数值处理中都会遇到三对角系统的求解问题。

很多三对角线性方程组的算法可以直接推广到求解块三对角及带状线性方程组。

由于在理论和实际应用上的重要性,近20年来三对角方程组的并行算法研究十分活跃。

大规模科学计算需要高性能的并行计算机。

随着软硬件技术的发展,高性能的并行计算机日新月异。

现今,SMP可构成每秒几十亿次运算的系统,PVP和COW可构成每秒几百亿次运算的系统,而MPP和DSM可构成每秒万亿次运算或更高的系统。

高性能并行计算机只是给大型科学计算提供了计算工具。

如何发挥并行计算机的潜在性能和对三对角系统进行有效求解,其关键在于抓住并行计算的特点进行并行算法的研究和程序的设计与实现。

另外,对处理机个数较多的并行计算系统,在设计并行算法时必须解决算法的可扩展性,并对可扩展性进行研究和分析。

二、问题的提出设三对角线性方程组为AX=Y(1)式中:A∈Rn×n非奇异,αij=0,。

X=(x1,x2,…xn) T Y=(y1,y2,…yn)T。

此系统在许多算法中被提出,因此研究其高性能并行算法是很有理论和实际意义的。

三、并行求解三对角系统的直接解法关于三对角线性方程组的直接求解已经有大量并行算法,其中Wang的分裂法是最早针对实际硬件环境,基于分治策略提出的并行算法。

它不仅通信结构简单,容易推广到一般带状线性方程组的并行求解,而且为相继出现的许多其它并行算法提供了可行的局部分解策略。

近20年来求解三对角方程组的并行算法都是基于分治策略,即通过将三对角方程组分解成P个小规模问题,求解这P个小规模问题,再将这些解结合起来得到原三对角方程组的解。

一般求解三对角方程组的分治方法的计算过程可分为3个阶段:一是消去,每台处理机对子系统消元;二是求解缩减系统(需要通信);三是回代,将缩减系统的解回代到每个子系统,求出最终结果。

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

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

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

二 实验内容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 。

三对角方阵的追赶法

三对角方阵的追赶法

班级:数学114学号:201100144407 姓名:徐美荣一:实验目的加强"追赶法"在解方程组中的应用,掌握多种不同的解线性方程组的解法以及编程的应用二:实验内容用追赶法解下列严格对角优势的三对角线方程组2 - 1 0 0 x1 0-1 3 -2 0 x2 = 10 -1 2 -1 x3 00 0 -3 5 x4 1三:程序源代码:#include <stdio.h>#include <conio.h>#include <math.h>#define MAX_n 100#define PRECISION 0.000001//解输出void SulutionOutput(float x[],int n){int i;for(i=1;i<=n;++i)printf("\nx[%d]=%f",i,x[i]);}//三对角方程组元素输入void TriDiagonalMatrixInput(float a[],float b[],float c[],float f[],int n){int i;printf("Input b[1],c[1],f[1]:");scanf("%f %f %f",&b[1],&c[1],&f[1]);for(i=2;i<n;++i){printf("Input a[%d],b[%d],c[%d],f[%d]:",i,i,i,i);scanf("%f %f %f %f",&a[i],&b[i],&c[i],&f[i]);}printf("Input a[%d],b[%d],f[%d],f[%d]:",n,n,n,n);scanf("%f %f %f%f",&a[n],&b[n],&c[n],&f[n]);}//三对角方程组求解—追赶法int Z_G_method(float a[],float b[],float c[],float f[],int n){int i;c[1]/=b[1];for(i=2;i<n;++i)c[i]/=(b[i]-a[i]*c[i-1]);f[1]/=b[1];for(i=2;i<=n;++i)f[i]=(f[i]-a[i]*f[i-1])/(b[i]-a[i]*c[i-1]);for(i=n-1;i>0;--i)f[i]-=c[i]*f[i+1];}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);}。

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

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

VS
矩阵元素的微小变化
在三对交线方程组中,矩阵元素的微小变 化可能会导致解的巨大变化。这种敏感性 使得追赶法在面对某些问题时表现出数值 不稳定性。
提高数值稳定性和减小误差方法
选择合适的算法参数
在追赶法中,可以通过选择合适的算法参数来提高数值稳定性。例如,可以采用部分选主元策略来避免矩阵元素的微 小变化对解的影响。
优缺点分析
优点
追赶法具有计算量小、存储量低、易于编程实现等优点。对于大规模的三对角 线性方程组,追赶法通常比其他方法更加高效。
缺点
追赶法的适用范围有限,仅适用于系数矩阵为三对角矩阵的线性方程组。此外, 当系数矩阵不满足对角占优等条件时,追赶法可能无法收敛或收敛速度较慢。
Part
02
三对交线方程组数学模型建立
问题描述与定义
三对交线方程组
在二维平面上,给定三对直线,每对直线相交于一个点,这三对交线构成的方程组称为三对交线方程 组。
求解目标
通过给定的三对交线信息,求解出这三对直线的交点坐标。
数学模型构建方法
直线方程表示
在二维平面上,一条直线可以用一般式方程 $Ax + By + C = 0$ 表示,其中 $A, B$ 不同时为0。
THANKS
感谢您的观看
回代过程
从最后一个方程开始,依次将已知量代入方程求 解,得到未知量的值。此过程称为回代过程。
关键算法实现技巧
存储优化
追赶法中的系数矩阵是三对角 的,因此可以采用一维数组进 行存储,节省存储空间。
消元技巧
在消元过程中,需要注意消元 顺序和消元系数的选择,以确 保消元过程的稳定性和效率。
回代技巧
在回代过程中,需要按照正 确的顺序将已知量代入方程 求解,避免计算错误。

MATLAB-追赶法求解三对角方程组的算法原理例题与程序

MATLAB-追赶法求解三对角方程组的算法原理例题与程序

MATLAB-追赶法求解三对角方程组的算法原理例题与程序3)三对角形线性方程组1234567891041000000001410000000014100000000141000 0000014100000000141000000001410000000014100000000141 0000000014x x x x x x x x x x -----????----------???--??-7513261214455-??=??-??-??-??*(2,1,3,0,1,2,3,0,1,1)Tx =---二、数学原理设系数矩阵为三对角矩阵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。

matlab追赶法

matlab追赶法

matlab追赶法Matlab追赶法是解线性三对角方程组的一种方法。

这种方法的优点在于计算简单、直观易懂,而且速度较快。

以下是实现的基本步骤:1. 将三对角矩阵A分解为L、D、U三部分,其中L存储的是矩阵A的下三角部分,D 存储的是矩阵A的对角线部分,U存储的是矩阵A的上三角部分。

2. 解出L*y=b和U*x=y的两个方程组,其中b为方程组的常数列。

3. 最后解出x,即为线性方程组的解。

下面是一份matlab代码实现:```matlabfunction [x] = chase(A, b)% A: 线性方程组的系数矩阵,b: 常数列n = length(b);L = zeros(n); % 下三角矩阵U = zeros(n); % 上三角矩阵D = zeros(n); % 对角线矩阵L(1, 1) = 0; % 初始化U(n, n) = 0;D(1, 1) = A(1, 1);for i=2:n % 分解为下三角、上三角和对角线L(i, i-1) = A(i, i-1)/D(i-1, i-1);D(i, i) = A(i, i) - L(i, i-1)*A(i-1, i);U(i-1, i) = A(i-1, i)/D(i-1, i-1);end% 解出 L*y = b 和 U*x = y 的两个方程组y = zeros(n, 1);y(1) = b(1)/D(1, 1);for i=2:ny(i) = (b(i) - L(i, i-1)*y(i-1))/D(i, i);endx = zeros(n, 1);x(n) = y(n);for i=n-1:-1:1x(i) = y(i) - U(i, i+1)*x(i+1);endend```在计算过程中,可以发现如果对角线元素在下界或上界比较小,那么追赶法的精度会有所下降,此时可考虑对系数矩阵作一定的调整(如高斯消元法),使得对角线元素更集中在中心区域。

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档