追赶法解三对角矩阵

合集下载

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

三对角方程组的追赶法

三对角方程组的追赶法

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

追赶法(Thomas算法)

追赶法(Thomas算法)

二、解三对角线性方程组的追赶法 定理1:满足引理1条件的三对角方阵A有如下形式的 唯一的克劳特分解。
p1 a2 A= pn
p2 a3 pn 1 an
1 q1 1 q2 =PQ 1 qn 1 1
其中
p1 = b1 (i = 1,2,, n 1) qi = ci pi p = b a q (i = 2,3,, n ) i i i 1 i
解三对角线方程组Ax = f可化为求解两个三角形 方程组
Py = f
Qx = y
(1) 解 Py = f
p1 a2 ( P, f ) = p2 a3 pn 1 an f1 f2 f3 pn f n

{
y1 = f1 / p1
yi = ( f i ai yi 1 ) / piຫໍສະໝຸດ (i = 2,3,, n )
( 2) 解 Qx = y
1 q1 1 q2 1 qn 1 1
x1 y1 x2 = y2 x y n n

xn = y n
xi = yi qi xi +1
i = n 1 , , 2 ,1
作业: P50 习题11
§2-4
追赶法(Thomas算法 算法) 追赶法 算法
一、对角占优矩阵
若矩阵A = ( aij )n× n 满足
|aii |> ∑|aij |
j =1 j ≠i ≠i
n
i = 1 , 2 , , n
则称A为严格对角占优矩阵.
若矩阵A = ( aij )n× n 满足
|aii | ∑|aij | ≥
j =1 j ≠i
n
i = 1 , 2 , , n
则称A为弱对角占优矩阵.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基于高斯消去法的追赶法

基于高斯消去法的追赶法

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

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

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

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

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

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

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

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

追赶法求解三对角方程及其算例

追赶法求解三对角方程及其算例

追赶法求解三对角方程组要求:对于给定的三对角系数矩阵和右端项,可以求解线性代数方程组一、 追赶法的数学理论设系数矩阵为三对角矩阵112223311100000000000000n 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 βγββαβγγβαβγ--+⎧===⎪⎪=⎪⎪⎪==-=⎪⎪⎨-⎪=⎪⎪=⎪⎪=--⎪=-⎪⎩对对(*)二、 追赶法的算法和流程图1.预处理生成方程组的系数i u 及其除数i d ,事实上,按式(*)可交替生成i d 与i u :1d →1u →2d →…→1-n u →n d其计算公式为⎪⎩⎪⎨⎧-=-===+++1,...,2,1,,/c u b 111i 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=⎩⎨⎧-==-逆序得出方程组的解i x :n x →1-n x →…→1x其计算公式按式为1,2,1,1,⋯--=⎩⎨⎧-==+n n i x u y x y x i i i in 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); for i=1:N-1u(i)=c(i)/d(i);d(i+1)=b(i+1)-a(i+1)*u(i); endy(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四、 追赶法的算例实现算例 用追赶法求解方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡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]; f=[6,1,0,1];在命令窗口运行语句 x=chase(a,b,c,f) 得结果为 x=5 4 3 2。

数值分析实验报告之追赶法求三对角矩阵

数值分析实验报告之追赶法求三对角矩阵

xi yi ui xi1 , i n 1, ,1 ,显示求解结果,过程结束。
实 验 总 结
本次试验也是针对求解线性方程组解的问题。当一个矩阵的结构比较特殊时,利用 特殊的方法进行对待,这样可以提高解题的速度,本次实验所针对的一类矩阵是比较特 殊的, 因此用了追赶法进行求解。 因为对实验的核心算法有所了解, 在编程实现的时候, 基本上没有遇到算法的逻辑错误。在网上找到了几组实验数据,我分别对它们进行了测 试,在确定结果无误之后,然后求解老师实验所给数据。本次实验使我对线性方程组的 求解有了进一步的认识,增加了一种方程组的求解方法,对更加深入的学习线性方程组 有很大的帮助。
u1 ci y yi 1 c1 y , y1 1 , ui , yi i , i 2, , n 1, b1 b1 bi ui 1ai bi ui 1ai
yn
yn yn1an ,然后求解 xi yi ui xi 1 , i n 1, ,1 。 bn un1an
实验原理
b1 c1 x1 y1 x1 u1 x2 y1 x u x y a2 b2 c2 x2 y 2 2 2 3 2 化为 x an1 bn1 cn 1 xn1 y n 1 u n 1 xn y n 1 n 1 an bn xn y n xn y n
实验步骤
Step5:
方程组,过程结束,否则转到 Step5:; 2i;
Step6: 计算; ui ci / bi ui1ai , yi ( yi yi1 ) / bi ui1ai Step7: 判断 i 是否大于 n ,若是,转到 Step8,否则,令 r 1 r ,返回 Step6。 Step8:

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

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

用追赶法求解三对角方程组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。

用追赶法解三对角方程组

用追赶法解三对角方程组

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

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

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

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

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

摘要: 追赶法是用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比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.实验原理:设系数矩阵为三对角矩阵并且满足条件:称为对角占优的三对角线矩阵。

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

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

matlab追赶法求解三对角方程组追赶法是一种求解三对角方程组的有效方法,可以通过简化矩阵的求解过程来提高计算效率。

以下是使用追赶法求解三对角方程组的具体步骤:1. 将三对角矩阵表示为下三角矩阵L、上三角矩阵U和对角矩阵D的乘积形式:A=LDU,其中L是下三角矩阵,U是上三角矩阵,D是对角矩阵。

2. 将方程组Ax=b转化为LDUx=b。

3. 首先使用前向代入法(forward substitution)解下三角方程Ly=b,其中y是临时向量。

4. 然后使用对角方程Dz=y解决z=D^-1y,其中z是临时向量。

5. 最后使用后向代入法(backward substitution)解上三角方程Ux=z,得到方程组的解x。

追赶法的时间复杂度为O(n),相比于高斯消元法等其他方法,追赶法在求解三对角方程组时具有更快的计算速度。

在MATLAB中可以使用专门的函数tridiag来实现追赶法,示例如下:```matlabfunction x = tridiag_solver(a, b, c, d)n = length(b);% 前向代入for i = 2:nm = a(i) / b(i-1);b(i) = b(i) - m * c(i-1);d(i) = d(i) - m * d(i-1);end% 后向代入x = zeros(n, 1);x(n) = d(n) / b(n);for i = n-1:-1:1x(i) = (d(i) - c(i) * x(i+1)) / b(i);endend```其中a、b和c分别是三对角方程组的次对角线、主对角线和超对角线上的元素,d是方程组的右侧常数向量。

函数返回方程组的解x。

三对角矩阵的lu分解

三对角矩阵的lu分解

三对角矩阵的lu分解三对角矩阵的LU分解是矩阵分解的重要一个分支,其特征在于矩阵的非零元素只存在于主对角线及其相邻的一些对角线上。

该分解法广泛应用在科学计算领域,旨在将矩阵特征分解为一个低阶矩阵和一个高阶矩阵,从而简化数值计算。

一、前提知识在深入介绍三对角矩阵的LU分解之前,需要了解以下的基础知识:1. 向量的内积和模长:向量的模长指向量的长度,可以通过数学公式计算。

而向量内积是指一个向量的每个分量与另一个向量的对应分量相乘后相加,如下所示:$u\cdot v = \sum_{i=1}^na_ib_i$2. 矩阵的转置与行列式:矩阵的转置是指将矩阵的行和列交换后所得到的矩阵。

而行列式是指一个矩阵中各个元素所构成行列式的值,是一个标量。

3. 矩阵的行列变换:矩阵的行列变换是指对矩阵的某行或某列进行加减乘除等操作所得到的矩阵,这种变换可以改变矩阵的行列式和特征向量。

二、三对角矩阵三对角矩阵又叫做带状矩阵,是指矩阵中除了主对角线和它两侧相邻的两条对角线以外,其他的元素都为零的矩阵。

例如下图就是一个三对角矩阵:$\begin{bmatrix} a_{11} & a_{12} & 0 & \cdots & \cdots & 0 \\ a_{21} & a_{22} & a_{23} & 0 & \cdots & \vdots \\ 0 & a_{32} & a_{33} & a_{34} & \cdots & \vdots \\ \vdots & \ddots & \ddots & \ddots &\ddots & 0 \\ \vdots & & \ddots & a_{n-1,n-2} &a_{n-1,n-1} & a_{n-1,n} \\ 0 & \cdots & \cdots & 0 & a_{n,n-1} & a_{nn} \\ \end{bmatrix}$三对角矩阵的行列式可以快速计算,可以得到如下公式:$det(A)=a_{11}a_{22}a_{33}...a_{nn}-a_{21}a_{32}a_{43}...a_{n-1,n}a_{n,n-1}$三、三对角矩阵的LU分解三对角矩阵的LU分解是指将一个三对角矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,公式如下:$A=L\cdot U$其中,L是下三角矩阵,U是上三角矩阵。

追赶法(Thomas算法)

追赶法(Thomas算法)

定理1:满足引理1条件的三对角方阵A有如下形式的 唯一的克劳特分解。
p1 a2 p2
1 q1

1 q2A Nhomakorabea

a3 pn1

an
pn



=PQ
1 qn1
1

其中
qpi1

b1 ci
pi
i 1,2,, n 1


xi yi qi xi1
i n 1,,2,1
作业:
P50 习题11
感谢您的下载让小编的努力能帮助到您, 最后一页是小编对你的谢谢哦,提醒一下, 下载好了几个全部自己看一遍,把用不上 的删除哦!包括最后一页!
yi fi ai yi1 / pi i 2,3,, n
(2) 解Qx y
1
q1 1
q2
1




qn1
1


x1 x2




y1 y2


xn yn
xn yn

pi
bi
aiqi1
i 2,3,, n
解三对角线方程组 Ax f可化为求解两个三角形 方程组
Py f Qx y
(1) 解Py f
p1
f1
a2 p2
f2
(P, f )

a3
f3




pn1 an

pn
f
n


y1 f1 / p1

追赶法解三对角矩阵

追赶法解三对角矩阵

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

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

解三对角方程组的追赶法

解三对角方程组的追赶法

它们的解分别为
yk (bk lkj y j ) / l kk
( k 1, 2,
, n)
(2 31)
xk ( yk
j k 1
l
n
jk
x j ) / lkk
(k n, n 1,
,1) (2 32)
21
第二章 解线性方程组的直接方法
求解线性方程组的上述方法称为平方根法,也称为
11
p87
第二章 解线性方程组的直接方法
算法 2.2
1.输入
a (a2 , c (c1 ,
, an ), b (b1 , , cn1 ), d (d1 ,
, bn ), , d n ), n
2. 对
i 2,3,, n
ai bi 1 ai
bi ci 1ai bi
l11 l L 21 ln1 0 l22 ln 2 0 0 lnn
18
第二章 解线性方程组的直接方法
a11 a 21 an1
a12 a22 an 2
a1n l11 0 l a2n 21 l 22 ann ln1 ln 2
T
对任意非零向量 是正定的
T
x,
T
y P1x ,
T 1 1
于是由 A
x Dx x ( P ) AP x T 1 T 1 ( P x) AP x y Ay 0
即 D 正定,所以 D 的对角元素均为正数。令
~ D diag( u11 ,, u nn )
16
第二章 解线性方程组的直接方法
第二章 解线性方程组的直接方法
0 0 1 0

追赶法解三角矩阵

追赶法解三角矩阵
void main(){
cout<<"请输入三对角阵的规模:"<<endl;
cin>>n;
cout<<"请输入三对角阵:"<<endl;
for(i=0;i<n;i++){ //输入a[][]
for(s=0;s<n;s++){
cin>>a[i][s];
}
cout<<endl;
}
cout<<"请输入b的值:"<<endl;
u[i][i+1]=a[i][i+1];
l[i][i]=1.0;
l[i+1][i]=a[i+1][i]/u[i][i];
u[i+1][i+1]=a[i+1][i+1]-l[i+1][i]*a[i][i+1];
}
cout<<"根据Doolittle分解:"<<endl;
cout<<"L矩阵为:"<<endl;
*/
cout<<u[i][s]<<" \t ";
}
cout<<endl;
}
y[0]=b[0]; //解Ly=b(追过程)
for(i=1;i<n;i++){
y[i]=b[i]-l[i][i-1]*y[i-1];
}
x[n-1]=y[n-1]/u[n-1][n-1]; //解Ux=y(赶过程)

2-4 追赶法(Thomas算法)

2-4    追赶法(Thomas算法)

P50 习题11
有一类方程组, 形式为:
Ax f
其中
b1 a2
A
c1 b2
c2
an 1
bn 1 an
cn
f
f1 f2
fn
A称为三对角线矩阵,并且满足
(1) |b1||c1| 0
(2) |bi||ai||ci| , ai ci 0 i 2, ,n 1 (3) |bn||an| 0
f
n

y1 f1 / p1
yi fi ai yi1 / pi i 2,3, , n
(2) 解Qx y
1 q1 1
q2
1
qn1
1
x1 x2
y1 y2
xn yn
xn yn

xi yi qi xi1
i n 1, ,2,1
作业:
pn
1 qn1
1
其中
qpi1
b1 ci
pi
i 1,2, , n 1
pi
bi
aiqi1
i 2,3, , n
解三对角线方程组 Ax f可化为求解两个三角形 方程组
Py f Qx y
(1) 解Py f
p1
f1
a2 p2
f2
(P, f )
a3
f3
pn1 an
pn
A称为对角占优的三对角线矩阵. 显然, A非奇异,即det A 0
因此A的任意k阶顺序主子式非零 ,即det Ak 0
二、解三对角线性方程组的追赶法
定理1:满足引理1条件的三对角方阵A有如下形式的 唯一的克劳特分解。
p1 a2 p2
1 q1
1 q2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

三、实验内容
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:n
a(i)=A(i+1,i);
b(i)=A(i,i);
c(i)=A(i,i+1);
end
a(1)=0; %补充不足的值
b(n)=A(n,n);
c(n)=0;
else
c=[A(1,:) 0]; %flag==1时
b=A(2,:);
a=[0 A(3,:)];
end
u(1)=b(1);
for i=2:n %第一次追赶,得到上、下三角矩阵
l(i)=a(i)/u(i-1);
u(i)=b(i)-c(i-1)*l(i);
end
y(1)=d(1); %解Ly=d
for i=2:n
y(i)=d(i)-l(i)*y(i-1);
end
x(n)=y(n)/u(n); %解Ux=y
for i=n-1:-1:1
x(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 0
5.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 0
d= 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 >>。

相关文档
最新文档