计算方法追赶法解三对角矩阵方程
- 格式:doc
- 大小:29.00 KB
- 文档页数:2
matlab三对角矩阵Matlab三对角矩阵是一种特殊的矩阵结构,其中除了主对角线上的元素外,只有相邻的两个次对角线上有非零元素。
这种特殊结构使得三对角矩阵具有一些特殊的性质和优势,例如在求解线性方程组、插值、数值微分等问题中可以提供高效的计算方法。
一、三对角矩阵的定义和表示三对角矩阵可以用以下形式表示:```A = [d1 u1 0 0 0l1 d2 u2 0 00 l2 d3 u3 0...0 ... ln-2 dn-1 un-10 ... 0 ln-1 dn un]```其中,d1, d2, ..., dn 是主对角线上的元素;u1, u2, ..., un-1 是次对角线上的元素;l1, l2, ..., ln-1 是次对角线下的元素。
主对角线上共有 n 个元素,次对角线上和下各有 n-1 个元素。
二、创建三对角矩阵在Matlab中,可以使用以下几种方法创建一个三对角矩阵:1. 手动赋值:通过手动指定每个元素的值来创建一个三对角矩阵。
可以使用以下代码创建一个3阶的三对角矩阵:```matlabA = [2 1 0;1 2 1;0 1 2];```2. 使用 diag 函数:通过 diag 函数可以方便地创建一个具有特定对角线元素的矩阵。
可以使用以下代码创建一个4阶的三对角矩阵,其中主对角线元素为1,次对角线元素为-1:```matlabd = ones(4,1);u = -ones(3,1);A = diag(d) + diag(u,1) + diag(u,-1);```3. 使用spdiags 函数:spdiags 函数是专门用于创建稀疏矩阵的函数。
通过指定每个对角线上的元素和它们相对于主对角线的偏移量,可以创建一个三对角矩阵。
可以使用以下代码创建一个5阶的三对角矩阵,其中主对角线元素为2,次对角线元素为-1:```matlabd = 2*ones(5,1);u = -ones(4,1);A = spdiags([u d u], [-1 0 1], 5, 5);```三、三对角矩阵的性质和应用1. 可逆性:如果一个三对角矩阵 A 的所有主对角线和次对角线上的元素都非零,则 A 是可逆的。
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]; 初始值不同,迭代次数可能不同。
二1求A的LU分解,并利用分解结果求解由紧凑格式故从而故2求证:非奇异矩阵不一定有LU分解证明设非奇异,要说明A不一定能做LU分解,只需举出一个反例即可。
现考虑矩阵,显然A为非奇异矩阵。
若A有LU分解,则故,而,显然不能同时成立。
这矛盾说明A不能做LU分解,故只假定A非奇异并不能保证A能做LU分解,只有在A的前阶顺序主子式时才能保证A一定有LU分解。
3用追赶法求解如下的三对角方程组解设有分解由公式其中分别是系数矩阵的主对角线元素及其下边和上边的次对角线元素,故有从而有故,,,故,,,4设A是任一阶对称正定矩阵,证明是一种向量范数证明(1)因A正定对称,故当时,,而当时,(2)对任何实数,有(3)因A正定,故有分解,则故对任意向量和,总有综上可知,是一种向量范数。
5 设,,已知方程组的精确解为(1)计算条件数;(2)若近似解,计算剩余;(3)利用事后误差估计式计算不等式右端,并与不等式左边比较,此结果说明了什么?解(1)(2)(3)由事后误差估计式,右端为而左端这表明当A为病态矩阵时,尽管剩余很小,误差估计仍然较大。
因此,当A病态时,用大小作为检验解的准确度是不可靠的。
6矩阵第一行乘以一数成为,证明当时,有最小值证明设,则又故从而当时,即时,有最小值,且7讨论用雅可比法和高斯-赛德尔法解方程组时的收敛性。
如果收敛,比较哪一种方法收敛较快,其中解对雅可比方法,迭代矩阵,故雅可比法收敛。
对高斯-赛德尔法,迭代矩阵,故高斯-赛德尔法收敛。
因=故高斯-赛德尔法较雅可比法收敛快。
8设,求解方程组,求雅可比迭代法与高斯-赛德尔迭代法收敛的充要条件。
解雅可比法的迭代矩阵,故雅可比法收敛的充要条件是。
高斯-赛德尔法的迭代矩阵,故高斯-赛德尔法收敛的充要条件是。
9设求解方程组的雅可比迭代格式为,其中,求证:若,则相应的高斯-赛德尔法收敛。
证明由于是雅可比法的迭代矩阵,故又,故,即,故故系数矩阵A按行严格对角占优,从而高斯-赛德尔法收敛。
追赶法,高斯消元法,逆矩阵法,迭代法 —— 解线性方程组精仪学院 马金玉 1012202030本文主要详细介绍了追赶法,高斯法,逆矩阵法的方法原理,运用这三种方法分别进行线性方程的求解举例,给出MATLAB 相应程序,最后做结果分析,比较说明追赶法和高斯法的特点。
最后对三种典型迭代方法Jacobi 迭代,Gauss-Seidel 迭代,SOR 迭代进行简单的分析比较。
1. 追赶法1.1).追赶法方法介绍追赶法用于求解以下形式的方程组(三对角方程组)d Ax =其中 1[,,]T n d d =d ,系数矩阵(三对角矩阵)11222111n n n n n b c a bc a b c a b ---⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦A系数矩阵A 的元素满足1100 0 (2,,1)0i i i i i n n b c b a c a c i n b a ⎧>>⎪≥+>≠=-⎨⎪>>⎩第一步:实现A=LU 的分解,按照递推公式1111//()i i i i i c b c b a βββ-=⎧⎨=-⎩ 计算 123,,...........βββ:第二步:求解方程组LY=f,相应的递推公式 11111/()/()i i i i i i i y f b y f a y b a β--=⎧⎨=--⎩ 第三部:求解方程组UX=Y ,相应的递推公式1()n nii i i x y x y x β-=⎧⎨=-⎩ 求得x因为计算1231......n ββββ-→→→→ 及 1231......n y y y y -→→→→的过程是追赶的过程,结出结果X 。
1.2).追赶法解线性方程组的matlab实例解线性方程组第一步:编写M文件如下:function [x,y,beta]=zhuiganfa(a,b,c,f)%a,b,c是三对角阵的对角线上的元素,f是自由项.n=length(b);beta(1)=c(1)/b(1);for i=2:nbeta(i)=c(i)/(b(i)-a(i)*beta(i-1));endy(1)=f(1)/b(1);for i=2:ny(i)=(f(i)-a(i)*y(i-1))/(b(i)-a(i)*beta(i-1));endx(n)=y(n);for i=n-1:-1:1x(i)=y(i)-beta(i)*x(i+1);enddisp(sprintf('k x(k) y(k) beta(k)')); for i=0:n-1disp(sprintf('%d %15.4f %15.4f %15.4f',i,x(i+1),y(i+1),beta(i+1))); end追赶法M文件程序截图如图1所示图1 追赶法M文件程序截图第二步:根据所求方程,在命令窗口中输入如下命令,并按ENTER 键确认。
WORD格式.分享第5章复习与思考题1、用高斯消去法为什么要选主元?哪些方程组可以不选主元?k答:使用高斯消去法时,在消元过程中可能出现a的情况,这时消去法无法进行;即kkk时主元素0和舍入增长a,但相对很小时,用其做除数,会导致其它元素数量级的严重kk计误差的扩散,最后也使得计算不准确。
因此高斯消去法需要选主元,以保证计算的进行和算的准确性。
当主对角元素明显占优(远大于同行或同列的元素)时,可以不用选择主元。
计算时一般选择列主元消去法。
2、高斯消去法与LU分解有什么关系?用它们解线性方程组Ax=b有何不同?A要满足什么条件?答:高斯消去法实质上产生了一个将A分解为两个三角形矩阵相乘的因式分解,其中一个为上三角矩阵U,一个为下三角矩阵L。
用LU分解解线性方程组可以简化计算,减少计算量,提高计算精度。
A需要满足的条件是,顺序主子式(1,2,⋯,n-1)不为零。
3、楚列斯基分解与LU分解相比,有什么优点?楚列斯基分解是LU分解的一种,当限定下三角矩阵L的对角元素为正时,楚列斯基分解具有唯一解。
4、哪种线性方程组可用平方根法求解?为什么说平方根法计算稳定?具有对称正定系数矩阵的线性方程可以使用平方根法求解。
,切对角元素恒为正数,因此,是一个稳定的平方根法在分解过程中元素的数量级不会增长算法。
5、什么样的线性方程组可用追赶法求解并能保证计算稳定?对角占优的三对角方程组6、何谓向量范数?给出三种常用的向量范数。
向量范数定义见p53,符合3个运算法则。
正定性齐次性三角不等式x为向量,则三种常用的向量范数为:(第3章p53,第5章p165)设n||x|||x|1ii11n22||x||(x)2ii1||x||max|x i|1in7、何谓矩阵范数?何谓矩阵的算子范数?给出矩阵A=(a ij)的三种范数||A||1,||A||2,精品.资料WORD格式.分享||A||∞,||A||1与||A||2哪个更容易计算?为什么?向量范数定义见p162,需要满足四个条件。
追赶法并行求解循环三对角方程组
李文强;刘晓
【期刊名称】《科技导报》
【年(卷),期】2009(0)18
【摘要】给出了求解循环三对角线性方程组的一种并行算法。
在系数矩阵满足对
角占优的条件下,利用该方法能够快速、稳定地求解循环三对角线性方程组,在单个
进程上的计算量仅为O(17n),与传统算法求解循环三对角线性方程组的计算量相同。
而且,本算法可以方便地实施分布式并行计算,各进程仅需向主进程传递8个实数,而主进程向各子进程传递2个实数,通讯量较小。
数值实验结果表明:对于大规模的循环三对角线性方程组,利用16个进程计算的并行效率均在0.75以上。
求解三对角
线性方程组的传统追赶法实则是本文算法的一种特例,因此,该算法也可用于求解三
对角线性方程组。
【总页数】4页(P90-93)
【关键词】追赶法;循环三对角方程组;并行计算
【作者】李文强;刘晓
【作者单位】河南师范大学数学与信息科学学院
【正文语种】中文
【中图分类】O241.6
【相关文献】
1.用改进追赶法求解三对角线方程组 [J], 李健
2.解循环三对角线性方程组的追赶法 [J], 李青;王能超
3.求解三对角方程组的并行追赶算法 [J], 杨爱民;阎少宏;夏国坤;彭亚绵
4.追赶法在求解循环和拟循环三对角方程组中的一种推广 [J], 刘晓;李文强
5.求解循环三对角方程组的追赶法 [J], 李文强;马民
因版权原因,仅展示原文概要,查看原文内容请购买。
数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
scipy.linalg 解三对角矩阵scipy.linalg 模块可以用于解决三对角矩阵的问题。
三对角矩阵是指除了主对角线和相邻两条次对角线之外的所有元素均为零的矩阵。
解三对角矩阵可以采用Thomas 算法,也称为追赶法。
该算法利用了三对角矩阵的特殊结构,使得求解方程组的复杂度降低到O(n)。
以下是使用scipy.linalg 模块进行三对角矩阵求解的示例代码:pythonimport numpy as npfrom scipy.linalg import solve_banded# 构造三对角矩阵n = 10 # 矩阵维度a = np.random.rand(n-1)b = np.random.rand(n)c = np.random.rand(n-1)A = np.diag(b) + np.diag(a, k=-1) + np.diag(c, k=1)# 构造待解的方程组x = np.random.rand(n)d = A @ x# 将三对角矩阵转换为带状矩阵形式ab = np.zeros((2, n))ab[0, 1:] = aab[1] = bab[1, :-1] = c# 使用solve_banded 函数求解方程组y = solve_banded((1, 1), ab, d)# 检查求解结果assert np.allclose(x, y)上述代码中,使用`np.random.rand` 函数生成了一个随机的三对角矩阵`A` 和一个随机的解向量`x`,然后计算了方程组的右侧向量`d`。
接着,使用`solve_banded` 函数求解方程组,并将解存储在变量`y` 中。
最后,使用`np.allclose` 函数检查求解结果的正确性。
三对角方程组的系数矩阵的特点三对角方程组是指系数矩阵中只有主对角线、上对角线和下对角线上有非零元素,其余元素均为零的线性方程组。
具体地说,三对角方程组的系数矩阵具有以下特点:1.稀疏性:三对角方程组的系数矩阵大部分元素为零,只有主对角线、上对角线和下对角线上有非零元素。
这意味着在存储和计算过程中能够节省大量的存储空间和计算时间,使得解三对角方程组的算法更加高效。
2.结构性:三对角方程组的系数矩阵具有明显的结构性特点。
主对角线上的元素是方程组的主要变量系数,上对角线上的元素是方程组的次要变量系数,下对角线上的元素是方程组的另一组次要变量系数。
这种结构性特点使得解三对角方程组时的计算过程具有一定的规律性,易于建立相应的算法。
3.对称性:对于对称的三对角方程组来说,其系数矩阵关于主对角线对称。
这意味着主对角线上的元素与下对角线上对应位置的元素相等,上对角线上的元素与下对角线上对应位置的元素相等。
这种对称性可以简化计算过程,减少重复的计算。
4.可逆性:当三对角方程组的主对角线元素非零时,系数矩阵是可逆的。
这意味着三对角方程组有唯一解,并且可以通过矩阵求逆的方法来求解。
这种特点使得解三对角方程组的问题变得相对简单,可以直接应用线性代数的相关知识进行求解。
基于以上特点,针对三对角方程组的求解方法有许多经典的算法,如追赶法(Gauss消元法的改进算法)、平滑法(双向扫描法)、迭代法(如Jacobi迭代法、Gauss-Seidel迭代法)、Cholesky分解法等。
这些方法在不同的应用领域有着广泛的应用,如数值计算、物理学、工程学等。
总之,三对角方程组的系数矩阵具有稀疏性、结构性、对称性和可逆性等特点,这些特点使得解三对角方程组的问题变得相对简单且便于存储和计算。
在实际应用中,人们基于这些特点提出了许多高效的算法来求解三对角方程组,为各个领域的科学计算和工程分析提供了重要的数学工具。
三对角矩阵的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是上三角矩阵。
计算方法实验报告
实验:追赶法解三对角矩阵方程
1.实验目的
①熟悉matlab软件的使用
②掌握追赶法的基本方法
③编程实现追赶法解三对角矩阵方程
2.实验内容
題目:用追赶法解方程组
411411411411454321xxxxx=
100
200
200
200
100
3.求解:
1.追赶法代码
function [x]=ZhuiGan(a,b,c,f)
r=size(a);
m=r(2);
r=size(b);
n=r(2);
if size(a)~=size(b)|(m~=n-1)|size(b)~=size(f)
error('变量不匹配,检查变量输入情况!');
end
p=ones(1,m);
Y=ones(1,n);
x=Y;
p(1)=a(1)/b(1);
Y(1)=f(1)/b(1);
t=0;
for i=2:m
t=b(i)-a(i-1)*p(i-1);
p(i)=c(i)/t;
Y(i)=(f(i)-a(i-1)*Y(i-1))/t;
end
Y(n)=(f(n)-a(n-1)*Y(n-1))/(b(n)-a(n-1)*p(n-1));
x(n)=Y(n);for i=n-1:-1:1
x(i)=Y(i)-p(i)*x(i+1);
end
2.输入
>> a=-1*ones(1,4);
>> c=a;
>> b=4*ones(1,5);
>> f=[100 200 200 200 100];
>> [x]=ZhuiGan(a,b,c,f)
4.结果
x =46.15384615384615 84.61538461538461 92.30769230769231
84.61538461538461 46.15384615384615
3总结
追赶法具有计算量少,方法简单,算法稳定等优点。