直接法解线性方程组
- 格式:docx
- 大小:43.20 KB
- 文档页数:4
解线性方程组的直接方法一、高斯消元法高斯消元法是解线性方程组最常用的方法之一、它通过一系列的消元操作,将线性方程组转化为阶梯型方程组,从而求解未知数的值。
1.确定线性方程组的阶数和未知数的个数。
设线性方程组中有n个未知数。
2.将线性方程组写成增广矩阵的形式。
增广矩阵是一个n行n+1列的矩阵,其中前n列是线性方程组的系数矩阵,第n+1列是等号右边的常数。
3.通过初等行变换(交换行、数乘行、行加行)将增广矩阵化为阶梯型矩阵。
具体步骤如下:a.首先,找到第一个非零元素所在的列,将它所在的行视为第一行。
b.将第一行的第一个非零元素(主元)变成1,称为主元素。
c.将主元所在列的其他元素(次元素)变为0,使得主元所在列的其他元素只有主元素是非零的。
d.再找到第一个非零元素所在的列,将它所在的行视为第二行,并重复上述步骤,直到将增广矩阵化为阶梯型矩阵。
4.根据阶梯型矩阵求解未知数的值。
具体步骤如下:a.从最后一行开始,依次求解每个未知数。
首先,将最后一行中非零元素所在的列作为含有该未知数的方程,将该未知数的系数设为1b.将含有该未知数的方程中其他未知数的系数设为0,并对其他方程进行相应的变换,使得该未知数所在列的其他元素都为0。
c.重复上述步骤,直到求解出所有未知数的值。
高斯消元法的优点是简单易懂、容易实现,但当线性方程组的系数矩阵接近奇异矩阵时,计算精度可能会降低。
二、矩阵求逆法矩阵求逆法是解线性方程组的另一种直接方法。
它通过对系数矩阵求逆,然后与常数矩阵相乘,得到未知数的值。
1.确定线性方程组的阶数和未知数的个数。
设线性方程组中有n个未知数。
2.将线性方程组写成矩阵方程的形式,即Ax=b,其中A是一个n阶方阵,x和b分别是n维列向量。
3.求系数矩阵A的逆矩阵A^-1a. 首先,计算系数矩阵A的行列式det(A)。
b. 判断det(A)是否为0,如果det(A)=0,则该线性方程组无解或有无穷多解;如果det(A)≠0,则系数矩阵A可逆。
解线性方程组的直接解法一、实验目的及要求关于线性方程组的数值解法一般分为两大类:直接法与迭代法。
直接法是在没有舍入误差的情况下,通过有限步运算来求方程组解的方法。
通过本次试验的学习,应该掌握各种直接法,如:高斯列主元消去法,LU分解法和平方根法等算法的基本思想和原理,了解它们各自的优缺点及适用范围。
二、相关理论知识求解线性方程组的直接方法有以下几种:1、利用左除运算符直接求解线性方程组为bx\=即可。
AAx=,则输入b2、列主元的高斯消元法程序流程图:输入系数矩阵A,向量b,输出线性方程组的解x。
根据矩阵的秩判断是否有解,若无解停止;否则,顺序进行;对于1p:1-=n选择第p列中最大元,并且交换行;消元计算;回代求解。
(此部分可以参看课本第150页相关算法)3、利用矩阵的分解求解线性方程组(1)LU分解调用matlab中的函数lu即可,调用格式如下:[L,U]=lu(A)注意:L往往不是一个下三角,但是可以经过行的变换化为单位下三角。
(2)平方根法调用matlab 中的函数chol 即可,调用格式如下:R=chol (A )输出的是一个上三角矩阵R ,使得R R A T =。
三、研究、解答以下问题问题1、先将矩阵A 进行楚列斯基分解,然后解方程组b Ax =(即利用平方根法求解线性方程组,直接调用函数):⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--------=19631699723723312312A ,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=71636b 解答:程序:A=[12 -3 2 1;-3 23 -7 -3;2 -7 99 -6;1 -3 -6 19];R=chol(A)b=[6 3 -16 7]';y=inv(R')*b %y=R'\bx=inv(R)*y %x=R\y结果:R =3.4641 -0.8660 0.5774 0.28870 4.7170 -1.3780 -0.58300 0 9.8371 -0.70850 0 0 4.2514y =1.73210.9540-1.59451.3940x =0.54630.2023-0.13850.3279问题 2、先将矩阵A 进行LU 分解,然后解方程组b Ax =(直接调用函数):⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----=8162517623158765211331056897031354376231A ,⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=715513252b解答:程序:A=[1/3 -2 76 3/4 5;3 1/sqrt(3) 0 -7 89;56 0 -1 3 13;21 65 -7 8 15;23 76 51 62 81];b=[2/sqrt(5);-2;3;51;5/sqrt(71)];[L,U]=lu(A)y=inv(L)*bx=inv(U)*y结果:L = 0.0060 -0.0263 1.0000 0 00.0536 0.0076 -0.0044 0.1747 1.00001.0000 0 0 0 00.3750 0.8553 -0.6540 1.0000 00.4107 1.0000 0 0 0U =56.0000 0 -1.0000 3.0000 13.00000 76.0000 51.4107 60.7679 75.66070 0 77.3589 2.3313 6.91370 0 0 -43.5728 -50.06310 0 0 0 96.5050y =3.0000-0.63880.859850.9836-11.0590x =0.13670.90040.0526-1.0384-0.1146问题3、利用列主元的高斯消去法,求解下列方程组:⎪⎪⎩⎪⎪⎨⎧=+--=--+=-+-=+-+01002010100511.030520001.0204321432143214321x x x x x x x x x x x x x x x x解答:程序:function [RA,RB,n,X]=liezhu(A,b)B=[A b];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0disp('Çë×¢Ò⣺RA~=RB£¬ËùÒÔ´Ë·½³Ì×éÎ޽⡣')returnendif RA==RBif RA==ndisp('Çë×¢Ò⣺ÒòΪRA=RB=n,ËùÒÔ´Ë·½³Ì×éÓÐΨһ½â¡£')X=zeros(n,1);C=zeros(1,n+1);for p=1:n-1[Y ,j]=max(abs(B(p:n,p)));C=B(p,:);for k=p+1:nm=B(k,p)/B(p,p);B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1)endendb=B(1:n,n+1);A=B(1:n,1:n);X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp('Çë×¢Ò⣺ÒòΪRA=RB¡´n£¬ËùÒÔ´Ë·½³ÌÓÐÎÞÇî¶à½â¡£') endend键入A=[1 20 -1 0.0012 -5 30 -0.15 1 -100 -102 -100 -1 1];b=[0;1;0;0];[RA,RB,n,X]=liezhu(A,b)结果:请注意:因为RA=RB=n,所以此方程组有唯一解。
第三章 解线性方程组的直接法3.1 引言许多科学技术问题要归结为解含有多个未知量x 1, x 2, …, x n 的线性方程组。
例如,用最小二乘法求实验数据的曲线拟合问题,三次样条函数问题,解非线性方程组的问题,用差分法或有限元法解常微分方程、偏微分方程的边值等,最后都归结为求解线性代数方程组。
关于线性方程组的数值解法一般有两类:直接法和迭代法。
1. 直接法直接法就是经过有限步算术运算,可求得线性方程组精确解的方法(假设计算过程中没有舍 入误差)。
但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。
本章将阐述这类算法中最基本的高斯消去法及其某些变形。
2. 迭代法迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法,迭代法需要的计算机存储 单元少、程序设计简单、原始系数矩阵在计算过程中不变,这些都是迭代法的优点;但是存在收敛性和收敛速度的问题。
迭代法适用于解大型的稀疏矩阵方程组。
为了讨论线性方程组的数值解法,需要复习一些基本的矩阵代数知识。
3.1.1 向量和矩阵 用nm ⨯R表示全部n m ⨯实矩阵的向量空间,nm C⨯表示全部n m ⨯复矩阵的向量空间。
此实数排成的矩形表,称为m 行n 列矩阵。
⎪⎪⎪⎪⎪⎭⎫⎝⎛=⇔∈n n x x x 21x R x x 称为n 维列向量矩阵A 也可以写成其中 a i 为A 的第i 列。
同理 其中Ti b 为A 的第i 行。
矩阵的基本运算:(1) 矩阵加法 )( ,n m nm R C ,R B ,R A B A C ⨯⨯⨯∈∈∈+=+=n m ij ij ij b a c .(2) 矩阵与标量的乘法 ij j a ci αα== ,A C(3) 矩阵与矩阵乘法 p nk kj ikb acij ⨯⨯⨯=∈∈∈==∑m p n n m R C ,R B ,R A AB C ( ,1(4) 转置矩阵 ji ij T n m a c ==∈⨯ , ,A C R A (5) 单位矩阵 ()nn ⨯∈=Re ,,e ,e I n 21 ,其中()T k e 0,0,1,0,0 = k=1,2,…,n(6) 非奇异矩阵 设n n ⨯∈R A ,n n ⨯∈R B 。
线性方程组的直接解法
线性方程组(linear equation system)是一类几何问题,也是解决线性系统和代数问题的重要方法,线性方程组由多个联立方程组成,这些方程中也可能含有未知量。
直接解法是把数学模型转换为数值模型,并给出实现其解题步骤的算法,它不同于间接求解的方法,既不做任何假设,也不处理不确定性问题,只是简单地直接求解线性方程组。
解线性方程组的直接解法主要分为三种,分别是高斯消元法、列主元消去法和列坐标变换法。
高斯消元法是一种比较常用的方法,主要是把线性方程组的未知量从左到右一步步求出来,其中用到的主要技术是把矩阵中部分元素消去为零,以便求解不定线性方程组的未知量。
而列主元消去法则是以一列为主元,去消除其他联立方程中出现的此列中的变量,从而最终求出其他未知变量的值。
最后,列坐标变换法是将线性方程组转换为一个更有利于求解的矩阵,其中未知量可以直接求得解答。
除了这三种常见方法外,还有一些更特殊的直接解法,比如要解常微分方程的未知函数,可以用拉格朗日方法和分部积分方法,再比如求解雅各比方程的根,可以通过主副方程互解求解,这种方法也叫作特征根法。
综上,解线性方程组的直接解法有高斯消元法、列主元消去法、列坐标变换法等;特殊问题可以采用拉格朗日方法、分部积
分法和特征根法等。
每种方法都有自己的优势,因此在使用时,可以根据问题的特点,选择适合的方法来解决。
线性方程组求解的直接法5.2线性方程组直接解法概述直接解法就是利用一系列公式进行有限步计算,直接得到方程组的精确解的方法.当然,实际计算结果仍有误差,譬如舍入误差,而且舍入误差的积累有时甚至会严重影响解的精度.这是一个众所周知的古老方法,但用在计算机上仍然十分有效.求解线性方程组最基本的一种直接法是消去法.消去法的基本思想是,通过将一个方程乘以或除以某个常数,以及将两个方程相加减这两种手段,逐步减少方程中的变元的数目,最终使每个方程仅含一个变元,从而得出所求的解.高斯(Gauss )消去法是其中广泛应用的方法,其求解过程分为消元过程和回代过程两个环节.消元过程将所给的方程组加工成上三角方程组,所归结的方程组再通过回代过程得出它的解.Gauss 消去法由于添加了回代的过程,算法结构稍复杂,但这种改进的算法明显减少了计算量.直接法比较适用于中小型方程组.对高阶方程组,即使系数矩阵是稀疏的,但在运算中很难保持稀疏性,因而有存储量大,程序复杂等不足.5.3直接解法5.3.1Gauss 消去法Gauss 消去法是一个古老的求解线性方程组的方法,由它改进而来的选主元法是目前计算机上常用的有效的求解低阶稠密矩阵线性方程组的方法.例5.1用Gauss 消去法解方程组1231231232221(5.3.1)1324 (5.3.2)2539(5.3.3)2x x x x x x x x x ⎧++=⎪⎪++=⎨⎪++=⎪⎩解〖JP4〗第1步,式35.3.12⨯-()()加到式(5.3.2)上,式()15.3.1()2⨯-加到式(5.3.3)上,得到等价方程组123232322211(5.4.4)282(5.4.5)x x x x x x x ⎧++=⎪⎪-+=-⎨⎪⎪+=⎩第2步,式()2⨯5.3.4加到式(5.3.5)上得等价的方程组12323322211100(5.3.6)x x x x x x ++=⎧⎪-+=-⎨⎪=⎩第3步,回代法求解方程组(5.3.6),即可求得该方程组的解为32110,1,.2x x x ===-.用矩阵描述其约化过程即为233(2)22221011100100r r r ⨯+⇒⎡⎤⎢⎥--⎢⎥⎢⎥⎣⎦→[]122133(1)3()21()222212221,3241/201111395/20282r r r r r r A b ⨯-+⇒⨯-+⇒⎡⎤⎡⎤⎢⎥⎢⎥=--⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦→.这种求解过程称为具有回代的Gauss 消去法.由此例可见,Gauss 消去法的基本思想是:用矩阵的初等行变换将系数矩阵A 化为具有简单形式的矩阵(如上三角阵、单位矩阵等),而三角形方程组是很容易回代求解的.一般地,设有n 个未知数的线性方程组为11112211211222221122n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪++=⎩L L MM M L (5.3.7)1212)(,,)(,,)T T ij n n n n A a X x x x b b b b ⨯===L L (,,,则方程组(5.3.7)化为AX b =.方便起见,记()(1)det 0A AA ==≠,(1)b b =,且()1A的元素记为()()11,ij a b ,的元素记为()1i b ,则消去法的步骤如下:第1步:1110a≠(),,计算(1)11(1)11(2,3,4),i i a m i n a ==L 用()1i m -乘方程组(5.3.7)中的第1个方程加到第i个方程中()2,3,i n =L ,即进行行初等变换()112,3,i i i R m R R i n -⋅→=L ,消去第2个到第n个方程中的未知数1,x ,得等价方程组111121(2)(2)(2)22222(2)(2)(2)2inn n n nn n x a a b x a a b ⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦LMM LM M L (5.3.8)记为(2)(2)A X b =,其中(2)(1)(1)(2)(1)(1)1111(,2,3),2,3,ij ij i j i i i a a m a i j n b b m b i n =-==-=L L ,,第k 步()1,2,1k n =-L:继续上述消元过程.第1步到第1k -步计算已完成,且得到与原方程组等价的方程组(1)(1)(1)(1)1112111(2)(2)(2)222223()()()()()()nn k k k kkkn k n k k k nk nn n a a a b x a a b xx aa b x a a b ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎢⎥⎢⎥⎣⎦⎣⎦L L LLOM L M MMM L(5.3.9)记为()(()K k A X b =,进行第k 步消元:设()0k kka≠,计算乘数()()(1,)k ikk ik kka m k k n a ==+L ,用ik m -乘方程组(5.3.9)中第k 个方程加到第i 1)i k n =+L (,,,个方程上消去方程组(5.3.9)中第i 1)i k n =+L (,,个方程的未知数k x ,得到与原方程组等价的方程组:(1)()()(1)()()(1)(1)()(,1,)( 1.)k k k ij ij ik kj k k k i i ik k k k k k a a m a i j k n b b m b i k n A A k b b k ++++⎧=-=+⎪=-=+⎨⎪⎩L L ()与前行元素相同,与前个元素相同 (5.3.10) 记为(1)(1)k k A X b ++=其中(1)(1,k k A b ++)中元素计算公式为(1)()()(1)()()(1)(1)()(,1,)( 1.)k k k ij ij ik kj k k k i i ik k k k k k a a m a i j k n b b m b i k n A A k b b k ++++⎧=-=+⎪=-=+⎨⎪⎩L L ()与前行元素相同,与前个元素相同 (5.3.11)重复上述过程,且设()0(1,2,1)k kk a k n ≠=-L ,共完成1n -步消元计算,得到与方程组(5.3.7)等价的三角形方程组1111211(2)(2)(2)22222()()n n n n n nn n x a a b x a b ⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦LMOM M (5.3.12)再用回代法求方程组(5.3.12)的解,计算公式为()()()()1()(),(1,2,1)n n n nn n i i i ij j j i i i ii b x a b a x x i n n a =+⎧=⎪⎪⎨-⎪==--⎪⎩∑L (5.3.13)元素()k kka 称为约化的主元素.将方程组(5.3.7)化为方程组(5.3.12)的过程称为消元过程.方程组(5.3.12)的求解过程(5.3.13)称为回代过程.由消元过程和回代过程求解线性方程组的方法称为Gauss 消去法.定理5.1(Gauss 消去法)设AX b =。
数值分析第五章解线性方程组的直接法解线性方程组是数值分析中的一个重要问题,对于大规模的线性方程组来说,直接法是一种常用的求解方法。
本文将介绍解线性方程组的直接法,包括高斯消元法和LU分解法,并对其稳定性和计算复杂度进行讨论。
高斯消元法是一种常用的直接法,用于求解非奇异线性方程组。
其基本思想是通过初等行变换将线性方程组转化为上三角方程组,然后通过回代求解得到方程的解。
高斯消元法的步骤如下:1.将线性方程组表示为增广矩阵[A,b],其中A是系数矩阵,b是常数向量。
2.从第一行开始,选择一个非零元素作为主元,通过行变换将主元下方的元素全部消为零。
3.重复第2步,直到矩阵变为上三角矩阵。
4.通过回代求解上三角矩阵,得到方程组的解。
高斯消元法的主要优点是简单直接,容易实现,但存在一些问题。
首先,如果系数矩阵A是奇异矩阵,即行列式为零,那么高斯消元法无法得到方程组的解。
其次,如果系数矩阵A的其中一行或几行接近于线性相关,那么在消元过程中会引入大量的舍入误差,导致计算结果不准确。
这也说明了高斯消元法的稳定性较差。
为了提高稳定性,可以使用LU分解法来解线性方程组。
LU分解法将系数矩阵A分解为两个矩阵L和U的乘积,其中L是下三角矩阵,U是上三角矩阵。
这样,原始的线性方程组可以表示为LUx=b,进而可以通过两个步骤来求解方程组:1.进行LU分解,将系数矩阵A分解为L和U。
2.分别用前代和回代的方法求解方程组Ly=b和Ux=y。
LU分解法相对于高斯消元法的优点是,可以在求解多个右端向量时,避免重复计算LU分解,从而提高计算效率。
同时,LU分解法的稳定性也较高,对于多个右端向量求解时,舍入误差的累积相对较小。
然而,LU分解法也存在一些问题。
首先,LU分解法的计算复杂度较高,需要进行两次矩阵乘法和一次矩阵向量乘法,而且LU分解过程中需要对系数矩阵A进行大量的行变换,增加了计算量。
其次,当系数矩阵A的一些元素非常小或非常大时,LU分解法容易出现数值不稳定的情况,即舍入误差的累积较大,导致计算结果不准确。
解线性方程组的直接方法一、高斯消元法高斯消元法是解线性方程组的一种常用且直接的方法。
它的基本思想是通过一系列的代数运算,将方程组化为一个三角方程组,然后从最后一行开始,逐步回代求解未知数。
下面以一个二元一次方程组为例,说明高斯消元法的具体步骤:例如,给定方程组:a₁₁x₁+a₁₂x₂=b₁a₂₁x₁+a₂₂x₂=b₂其中,a₁₁,a₁₂,a₂₁,a₂₂,b₁,b₂为已知系数。
1.检查a₁₁的值是否为0,若为0则交换第一行与非零行。
2.将第一行的每个元素除以a₁₁,使a₁₁成为13.将第一行乘以(-a₂₁)并加到第二行上,使第二行的第一个元素变为0。
4.引入一个新的未知数y₂=a₂₁x₁+a₂₂x₂,并代入第二行,化简方程组。
5.使用回代法求解方程组。
高斯消元法的优势在于其直接的解题思路和较高的计算精度,但是其缺点是计算复杂度较高,对于大规模的方程组不太适用。
二、逆矩阵法逆矩阵法是解线性方程组的另一种直接方法,它通过求解方程组的系数矩阵的逆矩阵,并将其与方程组的常数向量相乘,得到方程组的解向量。
下面以一个三元一次方程组为例,说明逆矩阵法的具体步骤:例如,给定方程组:a₁₁x₁+a₁₂x₂+a₁₃x₃=b₁a₂₁x₁+a₂₂x₂+a₂₃x₃=b₂a₃₁x₁+a₃₂x₂+a₃₃x₃=b₃其中,a₁₁,a₁₂,a₁₃,a₂₁,a₂₂,a₂₃,a₃₁,a₃₂,a₃₃,b₁,b₂,b₃为已知系数。
1.计算系数矩阵A的行列式D=,A。
2. 求解系数矩阵A的伴随矩阵Adj(A)。
3. 计算逆矩阵A⁻¹=Adj(A)/D。
4.将常数向量b用列向量表示。
5.计算解向量x=A⁻¹b。
逆矩阵法的优势在于其求解过程相对简单,计算量较小,并且不需要对系数矩阵进行消元操作。
但是逆矩阵法的限制在于当系数矩阵不可逆时无法使用。
三、克莱姆法则克莱姆法则是解线性方程组的另一种直接方法,它通过定义克莱姆行列式和克莱姆向量,利用行列式的性质求解方程组的解向量。
直接法解线性方程组
实习题目:
仿照三对角方程组的追赶法解五对角方程组,其中系数矩阵为A,右端向量为:r。
将A分解为LU。
其中L为下三角,U为单位上三角。
A为7*7阶的矩阵,其中对角元为4 5 6 7 8 9 10。
上下次三角对角线元素为1 2 3 4 5 6 ;上下第二条对角线元素为1 2 3 4 5;右端项为:1 2 3 4 5 6 7.
要求:输出系数矩阵A,右端向量r,下三角矩阵L,单位上三角矩阵U,下三角矩阵Ly=b 的解向量y,单位上三角方程组Ux=y的解(即最终的解向量。
保留七位小数。
实现方法:通过MATLAB编程实现。
建立MATLAB脚本文件。
首先通仿照三对角方程组的追赶法得到五对角矩阵的实现算法。
然后又MATLAB编程实现。
实验结果(MATLAB截图):
结果分析:
通过提供的计算数据得到最终的解向量x及中间过程产生的下三角矩阵L,单位上三角矩阵U,下三角矩阵Ly=b 的解向量y。
同时为了确保算法的正确性,我还通过MATLAB的左除运算检验得使用此算法的计算结果正确。
这里由于是用MATLAB,最终结果为分数形式,考虑到精确解一般比近似解更好,因此未化成七位小数形式。
算法实现分析:
首先计算L和U的元素。
由于已知L和U的特定形式(及除了对角线和上下次对角线和上下第二条对角线外,其余为0。
故通过矩阵的乘法即可得到LU中元素的计算公式。
(具体算法见MATLAB程序)
算法优劣点:
1.解此题时看上去要用较多的存储单元,但实际上只需存储系数矩阵A的不为0的元素。
2.A分解为LU计算完成后,后续计算x和y的“追赶过程”运算量一般来说计算量比较小。
3.此题也可用之前的LU算法求解。
但此处算法与一般的LU分解的解线性方程组的算法,相比计算量小了不少。
4.对于此处特定的对称的系数矩阵A,算法还可以进一步优化。
5.由于我在此算法中A.L U的各对角值均用一个列向量表示,一个缺点在于输出A,L,U时要重新组成矩阵形式。
不过优点在于减少了存储单元。
6.另一缺点是,未能将结果封装成一个文件。
后附MATLAB代码:
c=[4,5,6,7,8,9,10];d=[1,2,3,4,5,6,0];b=[0,1,2,3,4,5,6];e=[1,2,3,4,5,0,0];a=[0,0,1,2,3,4,5];
r=[1 2 3 4 5 6 7];
w=zeros(7,1);x=zeros(7,1);y=zeros(7,1);m=zeros(7,1);n=zeros(7,1);h=zeros(7,1);
w(1)=c(1);m(1)=d(1)/c(1);n(1)=e(1)/c(1);
h(2)=b(2);w(2)=c(2)-h(2)*m(1);m(2)=(d(2)-b(2)*n(1))/w(2);n(2)=e(2)/w(2);
for k=3:5
h(k)=b(k)-a(k)*m(k-2);
w(k)=c(k)-a(k)*n(k-2)-h(k)*m(k-1);
m(k)=(d(k)-h(k)*n(k-1))/w(k);
n(k)=e(k)/w(k);
end
h(6)=b(6)-a(6)*m(4);
w(6)=c(6)-a(6)*n(4)-h(6)*m(5);
m(6)=(d(6)-h(6)*n(5))/w(6);
h(7)=b(7)-a(7)*m(5);
w(7)=c(7)-a(7)*n(5)-h(7)*m(6);
y(1)=r(1)/w(1);y(2)=(r(2)-h(2)*y(1))/w(2);
for k=3:7
y(k)=(r(k)-a(k)*y(k-2)-h(k)*y(k-1))/w(k);
end
x(7)=y(7);
x(6)=y(6)-x(7)*m(6);
for k=2:6
x(7-k)=y(7-k)-m(7-k)*x(8-k)-n(7-k)*x(9-k); end
A=[c(1),d(1),e(1), 0,0,0 0;
b(2),c(2),d(2),e(2),0,0,0;
a(3),b(3),c(3),d(3),e(3),0,0;
0,a(4),b(4),c(4),d(4),e(4),0;
0,0,a(5),b(5),c(5),d(5),e(5);
0,0,0,a(6),b(6),c(6),d(6);
0,0,0,0,a(7),b(7),c(7)]
B=r'
U=[1 m(1) n(1) 0 0 0 0;
0 1 m(2) n(2) 0 0 0;
0 0 1 m(3),n(3),0,0;
0 0 0 1 m(4),n(4),0;
0 0 0 0 1 m(5),n(5);
0 0 0 0 0 1 m(6);
0 0 0 0 0 0 1]
L=[w(1),0 0 0 0 0 0;
h(2) w(2) 0 0 0 0 0;
a(3),h(3),w(3),0 0 0 0;
0 a(4) h(4) w(4) 0 0 0;
0 0 a(5) h(5) w(5) 0 0;
0 0 0 a(6) h(6) w(6) 0;
0 0 0 0 a(7) h(7) w(7)]
y
x。