[理学]试验61直接法求解线性方程组
解线性方程组的直接方法
解线性方程组的直接方法一、高斯消元法高斯消元法是解线性方程组最常用的方法之一、它通过一系列的消元操作,将线性方程组转化为阶梯型方程组,从而求解未知数的值。
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可逆。
数值分析--解线性方程组的直接方法
值 为A的特征值,x为A对应的特征向量,A的全体特征值
分 析
称为A的谱,计作 ( A),即 ( A) {i ,i 1,2,, n}, 则称
》
( A)
max
1in
|
i
|
为矩阵A的谱 半 径.
三、特殊矩阵
第5章 解线性方程组的直接方法
1) 对角矩阵
2) 三对角矩阵
3) 上三角矩阵
4) 上海森伯(Hessenberg)阵
分 析
1.00x 1.00y 2.00
》 解法1: 1.00105 x 1.00 y 1.00
(1.00 1.00105) y (2.00 1.00105)
1.00105 x 1.00 y 1.00
1.00
105
y
1.00
105
x 0.00,
y 1.00
第5章 解线性方程组的直接方法
1
Ly b y 3,Ux y x 1.
2
1
第5章 解线性方程组的直接方法
§3 高斯主元素消去法
若ak(kk) 0,或ak(kk)很接近于0,会导致其他元素数量级严重 增长和舍入误差的扩散,使得计算结果不可靠.
《例3’采用3位十进制,用消元法求解
数 值
1.00105 x 1.00y 1.00
L21L1 U2U11
L21L1
U
U 1
21
I
(因为上式右边为上三角矩阵,左边为单位下三角矩阵
从而上式两边都必须等于单位矩阵)
《 数
L1 L2 , U1 U2
1 1 1
值分例2
析
.例1中,A
0
4
-1,将A作LU分解。
计算方法2线性方程组直接法
04
矩阵的三角分解法
LU分解法
定义:将系数矩阵A分解为一个下三角 矩阵L和一个上三角矩阵U的乘积,即 A=LU。
适用范围:适用于所有可逆矩阵,特别 适用于中小型稠密矩阵。
迭代法收敛性判断
在迭代法求解方程组时,可以通过观察迭代过程中解向量的范数的变化情况来判断迭代法 是否收敛。如果解向量的范数逐渐减小并趋于零,则表明迭代法收敛。
方程组性态分析
方程组的性态是指方程组解的存在性、唯一性和稳定性等方面的性质。通过分析方程组的 系数矩阵的范数,可以对方程组的性态进行初步的判断。例如,如果系数矩阵的谱半径( 即最大特征值的模)较小,则方程组往往具有较好的性态。
03
线性方程组在科学研究、工程技术和经济管理等领域具有广 泛的应用。
直接法的定义与分类
1
直接法是一种通过有限步四则运算求解线性方程 组的方法,具有计算精度高、稳定性好的特点。
2
直接法可分为高斯消元法、列主元消元法、全主 元消元法等多种方法,其中高斯消元法是最基本 的方法。
3
各种直接法的主要区别在于选主元和消元的过程 中采用不同的策略,以达到提高计算精度和稳定 性的目的。
对系数矩阵A进行Crout分解,得到下三角矩阵L和单位 上三角矩阵U。
利用后向代入法求解Ux=y,得到向量x。
求解步骤
利用前向代入法求解Ly=b,得到向量y。
适用范围:适用于所有可逆矩阵,特别适用于中小型稠 密矩阵。与LU分解法和Doolittle分解法相比,Crout 分解法在某些情况下具有更高的计算效率。
性质
数值分析第三章线性方程组解法
数值分析第三章线性方程组解法在数值分析中,线性方程组解法是一个重要的主题。
线性方程组是由一组线性方程组成的方程组,其中未知数的次数只为一次。
线性方程组的解法包括直接解法和迭代解法两种方法。
一、直接解法1.1矩阵消元法矩阵消元法是求解线性方程组的一种常用方法。
这种方法将方程组转化为上三角矩阵,然后通过回代求解得到方程组的解。
1.2LU分解法LU分解法是将系数矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积,然后通过解两个三角方程组求解线性方程组。
这种方法可以减少计算量,提高计算效率。
1.3 Cholesky分解法Cholesky分解法是对称正定矩阵进行分解的一种方法。
它将系数矩阵A分解为一个下三角矩阵L和它的转置的乘积,然后通过解两个三角方程组求解线性方程组。
Cholesky分解法适用于对称正定矩阵的求解,具有较高的精度和稳定性。
二、迭代解法2.1 Jacobi迭代法Jacobi迭代法是一种迭代求解线性方程组的方法。
它通过分解系数矩阵A为一个对角矩阵D和一个余项矩阵R,然后通过迭代更新未知数的值,直至达到一定精度要求为止。
Jacobi迭代法简单易懂,容易实现,但收敛速度较慢。
2.2 Gauss-Seidel迭代法Gauss-Seidel迭代法是一种改进的Jacobi迭代法。
它通过使用新计算出的未知数值代替旧的未知数值,达到加快收敛速度的目的。
Gauss-Seidel迭代法是一种逐步逼近法,每次更新的未知数值都会被用于下一次的计算,因此收敛速度较快。
2.3SOR迭代法SOR迭代法是一种相对于Jacobi和Gauss-Seidel迭代法更加快速的方法。
它引入了一个松弛因子,可以根据迭代的结果动态地调整未知数的值。
SOR迭代法在理论上可以收敛到线性方程组的解,而且收敛速度相对较快。
三、总结线性方程组解法是数值分析中的一个重要内容。
直接解法包括矩阵消元法、LU分解法和Cholesky分解法,可以得到线性方程组的精确解。
(整理)线性方程组的直接法
第二章线性方程组的直接法在近代数学数值计算和工程应用中,求解线性方程组是重要的课题。
例如,样条插值中形成的关系式,曲线拟合形成的法方程等,都落实到解一个元线性方程组,尤其是大型方程组的求解,即求线性方程组(2.1)的未知量的数值。
(2.1)其中ai j,bi为常数。
上式可写成矩阵形式Ax = b,即(2.2)其中,为系数矩阵,为解向量,为常数向量。
当detA=D0时,由线性代数中的克莱姆法则,方程组的解存在且惟一,且有为系数矩阵的第列元素以代替的矩阵的行列式的值。
克莱姆法则在建立线性方程组解的理论基础中功不可没,但是在实际计算中,我们难以承受它的计算量。
例如,解一个100阶的线性方程组,乘除法次数约为(101·100!·99),即使以每秒的运算速度,也需要近年的时间。
在石油勘探、天气预报等问题中常常出现成百上千阶的方程组,也就产生了各种形式方程组数值解法的需求。
研究大型方程组的解是目前计算数学中的一个重要方向和课题。
解方程组的方法可归纳为直接解法和迭代解法。
从理论上来说,直接法经过有限次四则运算,假定每一步运算过程中没有舍入误差,那么,最后得到方程组的解就是精确解。
但是,这只是理想化的假定,在计算过程中,完全杜绝舍入误差是不可能的,只能控制和约束由有限位算术运算带来的舍入误差的增长和危害,这样直接法得到的解也不一定是绝对精确的。
迭代法是将方程组的解看作某种极限过程的向量极限的值,像第2章中非线性方程求解一样,计算极限过程是用迭代过程完成的,只不过将迭代式中单变量换成向量而已。
在用迭代算法时,我们不可能将极限过程算到底,只能将迭代进行有限多次,得到满足一定精度要求的方程组的近似解。
在数值计算历史上,直接解法和迭代解法交替生辉。
一种解法的兴旺与计算机的硬件环境和问题规模是密切相关的。
一般说来,对同等规模的线性方程组,直接法对计算机的要求高于迭代法。
对于中等规模的线性方程组,由于直接法的准确性和可靠性高,一般都用直接法求解。
解线性方程组直接法
第三章 解线性方程组的直接法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 。
数值分析小论文线性方程组的直接解法
数值分析小论文线性方程组的直接解法线性方程组的直接解法是指通过一系列的代数运算直接求解线性方程组的解。
线性方程组是数值分析中非常重要的问题,广泛应用于工程、科学、计算机图形学等领域。
在线性方程组的直接解法中,最常用的方法是高斯消元法,它是一种基于矩阵变换的方法。
高斯消元法将线性方程组表示为增广矩阵,并通过一系列的行变换将增广矩阵转化为行阶梯形矩阵,从而得到方程组的解。
高斯消元法的主要步骤包括消元、回代和得到方程组的解。
消元是高斯消元法的第一步,通过一系列的行变换将增广矩阵的元素转化为上三角形式。
在消元过程中,我们首先找到主元素,即矩阵的对角线元素,然后将其它行的元素通过消元操作转化为0,从而使得矩阵逐步变成上三角形矩阵。
回代是高斯消元法的第二步,通过一系列的回代操作求解线性方程组。
回代操作是从上三角形矩阵的最后一行开始,通过依次求解每个未知数的值,最终得到方程组的解。
高斯消元法的优点是算法简单易于实现,可以在有限的步骤内求解线性方程组,适用于一般的线性方程组问题。
但是高斯消元法也存在一些问题,例如当矩阵的主元素为0时,无法进行消元操作,此时需要通过行交换操作来避免这种情况。
另外,高斯消元法对病态矩阵的求解效果较差,容易引起舍入误差累积,导致解的精度下降。
在实际应用中,为了提高求解线性方程组的效率和精度,人们常常使用一些改进的直接解法,例如列主元高斯消元法和LU分解法。
列主元高斯消元法通过选择最大主元来避免主元为0的情况,进一步提高了求解线性方程组的精度。
LU分解法将矩阵表示为两个矩阵的乘积,从而将线性方程组的求解问题转化为两个三角形矩阵的求解问题,提高了求解效率。
综上所述,线性方程组的直接解法是一种基于矩阵变换的方法,通过一系列的代数运算求解线性方程组的解。
高斯消元法是最常用的直接解法之一,它简单易于实现,适用于一般的线性方程组问题。
在实际应用中,可以通过改进的直接解法来进一步提高求解效率和精度。
第3章 线性方程组求解的直接解法
线性方程组求解的直接法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 =。
线性方程组与矩阵特征值求解的数值方法
线性方程组与矩阵特征值求解的数值方法线性方程组与矩阵特征值求解是线性代数中的两个重要问题。
线性方程组解决了形如Ax=b的方程组,其中A为一个m×n的矩阵,b为一个m 维的向量,求解x使得该方程组成立。
矩阵特征值求解是求解形如Ax=λx的特征值和特征向量问题,其中A为一个n×n的矩阵,λ为特征值,x为特征向量。
这两个问题在实际应用中有广泛的应用,如计算机图形学、仿真和优化等领域。
本文将介绍线性方程组和矩阵特征值求解的数值方法。
一、线性方程组的求解方法1.1直接法直接法是指通过一系列的代数运算和变换直接求解线性方程组的解。
经典的直接法有高斯消元法、LU分解法和Cholesky分解法等。
这些方法的时间复杂度通常为O(n^3)。
直接法的优点是解的精度高,稳定性好,适用于小规模的问题。
1.2迭代法迭代法是指通过迭代计算逼近线性方程组的解。
迭代法的基本思想是将原方程组转化为递推的形式,并选择一个初始解,通过递推计算得到趋于或精确的解。
常用的迭代法有Jacobi迭代法、Gauss-Seidel迭代法和SOR迭代法等。
这些方法的时间复杂度通常为O(n^2)。
迭代法的优点是适用于大规模问题,但收敛速度慢,精度较差。
二、矩阵特征值求解方法2.1幂法幂法是求解特征值最大的特征值与对应特征向量的方法。
假设有一个n×n的矩阵A,选择一个初始向量x(0),通过迭代计算x(k)=Ax(k-1)/,Ax(k-1),其中,·,表示向量的范数,直到收敛为止。
最后得到的x为特征向量,特征值为λ=(Ax·x)/(x·x)。
幂法的收敛速度较慢,但适用于特征值分布差异较大的情况。
2.2反幂法反幂法是求解特征值最小的特征值与对应特征向量的方法。
和幂法类似,反幂法选择一个初始向量x(0),通过迭代计算x(k)=(A-λI)^-1x(k-1)/,(A-λI)^-1x(k-1),其中I为单位矩阵,λ为近似的特征值,直到收敛为止。
线性方程组直接解法实验
实验一 线性方程组直接解法实验一、实验目的1.运用matlab 软件完成线性方程组的直接实验;2.通过实验,了解Doolittle 分解方法和列主元消去法解方程组的过程,并比较两种方法的优点。
二、实验题目分别用Doolittle 分解方法和列主元消去法解方程组123410-7018-3 2.09999962 5.9000015-15-1521021⎛⎫⎛⎫⎛⎫⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭x x x x . 输出A ,b ;Doolittle 分解方法的L 和U ;解向量x,det A ;列主元方法的行交换次序,解向量x,det A ;比较两种方法所得的结果。
三、实验原理1) Doolittle 分解方法的原理算法原理:应用高斯消去法解n 阶线性方程Ax b =经过1n -步消去后得出一个等价的上三角形方程组()()n n A x b =,对上三角形方程组用逐步回代就可以求出解来。
这个过程也可通过矩阵分解来实现。
将非奇异阵分解成一个下三角阵L 和上三角阵U 的乘积称为对矩阵A 的三角分解,又称LU 分解。
根据LU 分解,将Ax b =分解为Ly bUx y =⎧⎨=⎩形式,简化了求解问题。
程序框图:变量说明:ij a 为系数矩阵元素,i b 为常数矩阵系数,,ij ij l u 分别为下、上三角矩阵元素。
2)列主元消去法解方程组的原理算法原理:列选主元是当变换到第k步时,从k列的kk a及以下的各元素中选取绝对值a的位置上,然后再进行消元过程。
交换系数矩阵中最大的元素,通过行交换将其交换到kk的两行(包括常数项),相当于两个方程的位置交换了。
程序框图:Array变量说明:k表示消元到a为消元第k步时第k步,kk主对角线元素3)四、实验过程及结果1)Doolittle分解方法的输出结果----------计算实习题----------Page64 第1题用Doolittle分解方法解方程组A =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000L =1.0e+006 *0.0000 0 0 0-0.0000 0.0000 0 00.0000 -2.5000 0.0000 00.0000 -2.4000 0.0000 0.0000 U =1.0e+007 *0.0000 -0.0000 0 0.00000 -0.0000 0.0000 0.00000 0 1.5000 0.57500 0 0 0.0000 X =-0.0000-1.00001.00001.0000det(A)值为-762.00009000----------输出完毕----------2)列主元消去法输出结果----------计算实习题----------Page64 第1题列主元消去法解方程组A =10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000b =8.00005.90005.00001.0000X =0.0000-1.00001.00001.0000detA值为-762.00009000----------输出完毕----------五、实验分析1.运用LU分解法可以成批地解方程组,且速度快.若c先求LU=A3,再解(LU)x=b,则要重新计算,计算量增加;如果按照上述方法计算,能够减少运算次数,加快运算速度.3. ⑴无论当n=10、n=100、n=1000时,x1与x2的值都相等,且随着n的增大,变化的只是解的中间部分数字,头、前后几位数都没有变化.⑵高斯消去法应用于三对角方程组得到的就是所谓的“追赶法”.追赶法不需要对零元素计算,只有6n-5次乘除法计算量,求解速度快.且当系数矩阵对角占优时数值稳定,是解三对角方程组的优秀解法.⑶用LU分解法解此方程组速度慢.顺序高斯消去法实际上就是将方程组的系数矩阵分解成单位下三角矩阵与上三角矩阵的乘积.顺序高斯消去法的消元过程相当于LU分解过程和Ly=b的求解,回代过程则相当于解线性方程组Ux=y,故其求解速度慢.六、附原程序1)Doolittle分解方法原程序fprintf('----------计算实习题----------\n')fprintf('Page64 第1题用Doolittle分解方法解方程组\n')A=[10 -7 0 1 ; -3 2.099999 6 2 ;5 -1 5 -1 ; 2 1 0 2];b=[8;5.900001;5;1];n=length(A);U=zeros(n,n);L=eye(n,n);U(1,:)=A(1,:);L(2:n,1)=A(2:n,1)/U(1,1);for i=2:n;U(i,i:n)=A(i,i:n)-L(i,1:i-1)*U(1:i-1,i:n);L(i+1:n,i)=(A(i+1:n,i)-L(i+1:n,1:i-1)*U(1:i-1,i))/U(i,i); endY=zeros(n);Y(1)=b(1);for i=2:nY(i)=b(i)-L(i,1:i-1)*Y(1:i-1,1);endX=zeros(n,1);if det(U)==0;X=0;elseX(n)=Y(n)/U(n,n);for i=n-1:-1:1X(i)=(Y(i)-U(i,i+1:n)*X(i+1:n,1))/U(i,i);endendAbLUXfprintf('det(A)值为%9.8f\n',det(A))fprintf('----------输出完毕 ----------\n')2)列主元消去法原程序fprintf('----------计算实习题----------\n')fprintf('Page64 第1题列主元消去法解方程组\n')A=[10 -7 0 1 ; -3 2.099999 6 2 ;5 -1 5 -1 ; 2 1 0 2];b=[8;5.900001;5;1];C=[A b];n=length(A);D=zeros(n,n+1);l=zeros(n,1);for i=1:nD=C;k=min(find(C(i:n,i)==max(C(i:n,i))));C(i,i:n+1)=D(k+i-1,i:n+1);C(k+i-1,i:n+1)=D(i,i:n+1);l(i+1:n,1)=C(i+1:n,i)/C(i,i);C(i+1:n,i:n+1)= C(i+1:n,i:n+1)- l(i+1:n,1)*C(i,i:n+1); endX=zeros(n,1);X(n)=C(n,n+1)/C(n,n);for i=n-1:-1:1X(i)=(C(i,n+1)-C(i,i+1:n)*X(i+1:n,1))/C(i,i); endAbXfprintf('detA值为%9.8f\n',det(A))fprintf('----------输出完毕----------\n')。
线性方程组的解法及应用研究
线性方程组的解法及应用研究一、引言线性方程组是数学中一个重要的概念和工具,广泛应用于自然科学、工程技术以及社会经济等领域。
解决线性方程组问题对于研究和应用具有重要的意义。
本文将从线性方程组的定义和基本性质出发,介绍线性方程组的解法和应用研究。
二、线性方程组的定义和基本性质线性方程组由一组形如a₁x₁ + a₂x₂ + ··· + aₙxₙ = b的线性等式组成,其中a₁, a₂, ···, aₙ为系数,x₁, x₂, ···, xₙ为未知数,b为常数。
线性方程组的解就是满足所有等式的未知数值的组合。
线性方程组的基本性质包括解的存在唯一性、线性方程组的线性组合、齐次和非齐次线性方程组等。
三、线性方程组的解法1. 列主元素消去法:将方程组化为阶梯型或行简化阶梯型,通过增广矩阵的行初等变换得到方程组的最简形式,进而求解出未知数的值。
2. 矩阵法:利用矩阵的乘法和逆运算,将线性方程组表示为矩阵的形式,通过求解矩阵的逆或使用矩阵计算的方法,得到线性方程组的解。
3. 克拉默法则:利用行列式的性质推导出克拉默法则,根据方程组的系数矩阵和常数向量求解未知数的值。
4. 向量空间方法:通过线性方程组的解空间和向量空间的关系,利用向量空间的定义、基、维度等概念,求解线性方程组的解。
四、线性方程组的应用研究1. 工程中的应用在工程领域,如电路分析、结构力学、流体力学等,常常需要求解线性方程组来描述系统的状态和行为。
例如,利用线性方程组求解电路网络中的电流和电压分布,可以进行电路设计和分析。
2. 经济学中的应用经济学中的很多问题可以建模为线性方程组,如供求关系、生产函数、投资问题等。
通过求解线性方程组,可以分析经济系统的均衡状态、优化决策以及经济政策的制定。
3. 自然科学中的应用在自然科学领域,线性方程组广泛应用于物理学、化学和生物学等学科中。
求解线性方程组的方法
求解线性方程组的方法1. 矩阵消元法矩阵消元法是求解线性方程组的一种常用方法。
它通过对线性方程组的系数矩阵进行行变换,将其化为简化的行阶梯形式,从而得到方程组的解。
具体步骤如下:1. 将线性方程组的系数矩阵和常数向量合并为增广矩阵。
2. 选择一个主元,通常选择矩阵的左上角元素作为主元。
3. 利用主元所在行的系数将其他行的对应系数消去。
4. 重复以上步骤,不断选取主元,直到将增广矩阵化为行阶梯形式。
5. 根据行阶梯形式,可以得到线性方程组的解。
如果出现矛盾或自由变量,则方程组无解或有无穷多解。
2. 矩阵求逆法矩阵求逆法是另一种求解线性方程组的方法。
它利用线性方程组的系数矩阵的逆矩阵,通过矩阵乘法得到方程组的解。
具体步骤如下:1. 将线性方程组的系数矩阵A求逆,得到逆矩阵A^-1。
2. 将线性方程组的常数向量b作为列向量。
3. 将逆矩阵A^-1与常数向量b相乘,得到方程组的解向量x。
需要注意的是,矩阵求逆法要求线性方程组的系数矩阵是可逆的,即行列式不为零,否则无法求解。
3. 列主元高斯消元法列主元高斯消元法是对矩阵消元法的改进。
它在选择主元时不仅考虑行,还同时考虑列,从而提高了计算的准确性和稳定性。
具体步骤如下:1. 将线性方程组的系数矩阵和常数向量合并为增广矩阵。
2. 选择一个主元,同时考虑主元所在的行和列,通常选择主元绝对值最大的元素作为主元。
3. 利用主元所在行的系数将其他行的对应系数消去。
4. 重复以上步骤,不断选取主元,直到将增广矩阵化为行阶梯形式。
5. 根据行阶梯形式,可以得到线性方程组的解。
如果出现矛盾或自由变量,则方程组无解或有无穷多解。
以上是求解线性方程组的三种常用方法,根据具体问题的复杂程度和要求的精确性,选择相应的方法进行求解。
第二章 解线性代数方程组的直接法(DOC)
第二章 解线性方程组的直接法本章研究的对象是n 阶线性方程组⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++nn nn n n n n n n b x a x a x a b x a x a x a b x a x a x a .........22112222212111212111 (2.1)其矩阵形式为b AX = (2.1)′其中,)(ij a A =是方程组的系数矩阵,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=n x x x X ...21,⎪⎪⎪⎪⎪⎭⎫⎝⎛=n b b b b ...21分别为方程组的未知向量和常数向量。
所谓直接法,就是在不计舍入误差时,经过有限步运算能求得方程组精确解的方法。
下面介绍几种较实用的直接法。
2.1 Gauss 消去法 2.1.1 Gauss 顺序消去法高斯(Gauss )消去法实质是消元法,只是步骤规范,便于编程。
它的基本做法是把方程组(2.1)转化成一个等价的三角方程组⎪⎪⎩⎪⎪⎨⎧==++=+++n n nn n n n n g x b g x b x b g x b x b x b 2222211212111 (2.2) 这个过程称为消元。
然后,逐个求出11,,,x x x n n -,这个过程称为回代。
(一) 高斯消去法的计算过程为了符号统一,把方程组(2.1)改写成下面形式⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++)1()1(2)1(1)1()1()1(2)1(1)1()1()1(2)1(1)1( (212)22221111211n nn n n n n b x a x a x a b x a x a x a b x a x a x a n n n(2.3)用矩阵表示为)1()1(b X A = (2.3)′其中⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡=)1()1(2)1(1)1(2)1(22)1(21)1(1)1(12)1(11)1(nn n n nn a a a a aa a aa A, ⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=)1()1()1()1(...21n b b b b 若0)1(11≠a ,用第二个方程减去第一个方程的)1(11)1(21/a a 倍,第三个方程减去第一个方程的)1(11)1(31/a a 倍,等等。
数值分析第五章解线性方程组的直接法
数值分析第五章解线性方程组的直接法解线性方程组是数值分析中的一个重要问题,对于大规模的线性方程组来说,直接法是一种常用的求解方法。
本文将介绍解线性方程组的直接法,包括高斯消元法和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分解法容易出现数值不稳定的情况,即舍入误差的累积较大,导致计算结果不准确。
求解线性方程组的几种方法
求解线性方程组的几种方法1.列主元高斯消元法:列主元高斯消元法是最常用的求解线性方程组的方法之一、该方法的基本思想是通过消元将系数矩阵转化为上三角矩阵,并通过回代求解未知数。
具体步骤如下:(1)将线性方程组表示为增广矩阵的形式;(2)选取第一列的绝对值最大的元素所在的行,将该行交换到最上面,作为第一步的消元主元;(3)通过一系列的行变换将第一列的所有元素下方的元素消为零;(4)对剩余的n-1个未知数重复以上步骤,即第i步时,将第i列下方的元素消为零;(5)回代求解未知数。
2.列主元LU分解法:列主元LU分解法是通过将系数矩阵分解为一个下三角矩阵L和一个上三角矩阵U,从而将线性方程组的求解转化为求解两个三角矩阵的问题。
具体步骤如下:(1)将线性方程组表示为增广矩阵的形式;(2)选取第一列的绝对值最大的元素所在的行,将该行交换到最上面,作为第一步的分解主元;(3)通过一系列的行变换将第一列的所有元素下方的元素消为零,得到U矩阵;(4)记录每一步的行变换矩阵,得到L矩阵;(5)将已经求得的L和U矩阵代入LUx=b中,得到两个三角矩阵的乘积,即LUx=b;(6)先解Ly=b,再解Ux=y,得到未知数的解。
3. Jacobi迭代法:Jacobi迭代法是一种迭代求解线性方程组的方法。
通过不断迭代,逐渐逼近方程组的解。
具体步骤如下:(1) 将线性方程组重新排列为x=kx+C的形式,其中C表示其他项的系数和常数项;(2)初始化k为0向量;(3) 根据x=kx+C的形式,对每一个未知数进行迭代更新,x_i^(new)=(b_i-Σ(a_ij * x_j))/a_ii;(4)重复迭代直到满足预定的精度要求。
4. Gauss-Seidel迭代法:Gauss-Seidel迭代法也是一种迭代求解线性方程组的方法。
与Jacobi迭代法不同的是,Gauss-Seidel迭代法在每一次迭代中使用每个未知数的最新值。
具体步骤如下:(1) 将线性方程组重新排列为x=kx+C的形式,其中C表示其他项的系数和常数项;(2)初始化k为0向量;(3) 根据x=kx+C的形式,对每一个未知数进行迭代更新,x_i^(new)=(b_i-Σ(a_ij*x_j^(new))+Σ(a_ij*x_j^(old)))/a_ii;(4)每次更新一个未知数时,使用该未知数最新的值进行计算;(5)重复迭代直到满足预定的精度要求。
解线性方程组的直接方法
解线性方程组的直接方法一、高斯消元法高斯消元法是解线性方程组的一种常用且直接的方法。
它的基本思想是通过一系列的代数运算,将方程组化为一个三角方程组,然后从最后一行开始,逐步回代求解未知数。
下面以一个二元一次方程组为例,说明高斯消元法的具体步骤:例如,给定方程组: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。
逆矩阵法的优势在于其求解过程相对简单,计算量较小,并且不需要对系数矩阵进行消元操作。
但是逆矩阵法的限制在于当系数矩阵不可逆时无法使用。
三、克莱姆法则克莱姆法则是解线性方程组的另一种直接方法,它通过定义克莱姆行列式和克莱姆向量,利用行列式的性质求解方程组的解向量。
线性方程组直接法
练习 利用LU分解法求解方程组
1 2 3 x1 2 1 3 5 x2 4. 1 3 6 x3 5
1001 2 3 2 1 答L: U 110 01 2 , y 2 ,x 0 .
111 001 1 1
二、解三对角方程组的追赶法
在数值求解常微分方程边值问题、热传导方程和建立
二、向量和矩阵的范数
定义1 ( 向量范数) x 和 y 是 Rn 中的任意向量 , 向量范数‖•‖是定义
在 Rn上的实值函数, 它满足:
(1) ‖ x ‖≥0, 并且当且仅当 x=0 时, ‖ x ‖=0;
(2) ‖k x ‖=|k| ‖ x ‖, k 是一个实数;
(3) ‖ x + y ‖≤ ‖ x ‖+ ‖ y ‖
1 0 01 2 3
A 2 3
1 5
0 0 1 0
1 0
4
24
LU
3=-72/-24; 2=[-10+4*3]/1;
求解
1=[14-(2*2+3*3)]/1]
Ly (14, 18, 20)T , 得y (14, 10,72)T 同理当 ukk 0或 Ux (14, 10, 72)T , 得x (1, 2, 3)T 很小时,可用
子式 Di 0(i 1,2,,k),即
a11 Di
ai1
a1i
aii
0aa1i((i1i1))
0 Di
Di1 0
由于高斯消去法过在程消中元可能ak(出 kk) 现 0的情况, 这时消去法将无;法即进使行主a元 k(kk) 素0但很小时, 用其作除数,会他导元致素其数量级的长严和重舍增
入误差的扩散,使最得后计也算的解不可靠。
线性方程组及其解法
线性方程组及其解法线性方程组是数学中重要的概念之一,它描述了一组线性方程的集合。
解决线性方程组可以帮助我们理解和解决实际问题,例如工程、经济和科学等领域的应用。
本文将介绍线性方程组的概念、解法以及实际应用。
一、线性方程组的概念线性方程组由多个线性方程组成,每个方程都是变量的线性组合。
一般形式为:a₁x₁ + a₂x₂ + ... + aₙxₙ = b其中,a₁, a₂, ..., aₙ为系数,x₁, x₂, ..., xₙ为变量,b为常数。
变量的个数称为方程组的未知数个数。
二、线性方程组的解法解决一个线性方程组的关键是找到所有使得方程组中的每个方程都成立的变量值。
以下介绍几种常见的线性方程组解法。
1. 直接代入法直接代入法是最基本的线性方程组解法。
它的步骤是:先从一个方程中选择一个变量,解出该变量的值,然后将这个值代入其他方程,减少未知数的个数。
重复这一过程,直到得到所有变量的值。
2. 消元法消元法是线性方程组解法中常用的一种方法。
它利用方程之间的关系,通过加减乘除等运算,将线性方程组化简为更简单的形式,从而求解变量的值。
消元法的关键是使用行变换和列变换来改变方程组的形式,使其更易于求解。
3. 矩阵法矩阵法是一种基于矩阵运算的线性方程组解法。
将线性方程组的系数和常数用矩阵表示,通过矩阵的运算来求解变量的值。
常用的矩阵运算包括矩阵的加法、减法、乘法、转置、逆矩阵等,在求解过程中可以利用这些运算来简化计算。
三、线性方程组的实际应用线性方程组在实际生活中有广泛的应用。
以下是几个具体的例子:1. 物理学中的应用线性方程组在物理学中的应用非常广泛。
例如,力学中的牛顿第二定律、电路分析中的欧姆定律、热传导方程等都可以表示为线性方程组。
通过解决这些方程组,我们可以研究物体的运动、电流的分布以及温度的变化等现象。
2. 经济学中的应用经济学中的供求模型、成本模型和收入模型等经常涉及到线性方程组。
通过解决这些方程组,我们可以研究市场的均衡价格和数量、企业的利润最大化策略以及收入分配等经济问题。
直接法与迭代法在求解大规模稀疏线性方程组中的比较研究
直接法与迭代法在求解大规模稀疏线性方程组中的比较研究在科学和工程问题中,线性代数是一个非常重要的分支领域。
在大规模科学计算和工程计算中,线性方程组的求解是一个需要高效和准确的问题,这个问题的求解是计算机领域中的一个重要难题。
本文将比较和分析直接法和迭代法这两种用于求解大规模稀疏线性方程组的算法。
一、直接法在数学领域中,解决线性方程组是一项非常广泛的研究问题,而直接法是其中的一种传统方法。
在求解小规模的线性方程组时,直接法是一种非常有效的解题方法。
所谓直接法,就是通过对方程组的系数矩阵进行高斯消元等操作,将未知量解出来。
以高斯消元法为例,消元法将系数矩阵的行进行逐行的消元,使得系数矩阵化为一个上三角矩阵,然后通过回带法求解出未知量。
直接法主要有高斯消元法和LU分解法两种,其中高斯消元法是裸的的直接法。
直接法的优点是它的精度非常高,可以获得准确的解。
同时,在小规模的方程组中,直接法的性能也很好。
但是,直接法的缺点也是显而易见的:当方程组的维数大到一定程度时,直接法的时间复杂度会增加到难以计算的程度。
二、迭代法用于求解大规模稀疏线性方程组的另一种方法是迭代法。
迭代法是一种迭代逼近的方法,通过一系列逐步近似地计算来解决问题。
迭代法的核心思想是:场解逐渐逼近正确的解。
相比直接法,迭代法的时间复杂度要低得多。
迭代法包含以下几个步骤:1.选取一个初始解x0;2.给出逼近的准则和停止准则;3.通过计算产生下一个逼近解;4.不断重复以上步骤,直到满足停止准则为止。
迭代法在大规模线性方程组的求解中有着广泛的应用。
迭代法有很多优点,其中最重要的是相比直接法,迭代法的时间复杂度相对要低很多。
另外,迭代法还具有灵活性高,容易适应不同的求解目标等优点。
但是,迭代法也有许多缺点,其中最重要的是其求解精度相对直接法要低。
迭代法也比较复杂,算法实现有很多细节需要处理。
此外,迭代法的收敛速度非常慢,因此,在实际问题中需要通过参数制定来进行优化。
计算方法-解线性方程组的直接法实验报告
计算方法实验二实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】解线性方程组的直接法2.【实验目的】●掌握高斯消元法及选列主元素的技术●掌握三角分解法与追赶法●掌握向量与矩阵的三种范数及其计算方法●理解方程组的性态、条件数及误差分析3.【实验内容】求解方程组,AX=b 其中4. 【实验要求】(1)分别列选主元消去法与不选主元消去法分别对以上两个方程组求解(2)观察小主元并分析对计算结果的影响。
(3)用追赶法求下述三对角线性方程组的解5. 【算法描述】6. 【源程序(带注释)】(1)一:列主元素消去法#include<iostream>#include<cmath>#define N 20using namespace std;void load();float a[N][N];int m;int main(){int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;load();for(i=0;i<m;i++){for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/ for(n=0;n<m+1;n++){s=a[i][n];a[i][n]=a[c][n];a[c][n]=s;}/*将列最大数防在对角线上*/for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r];}}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/}cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t";//system("pause");return 0;}void load(){int i,j;for(i=0;i<m;i++)for(j=0;j<m+1;j++)cin>>a[i][j];}一般消去法#include<stdio.h>void solve(float l[][100],float u[][100],float b[],float x[],int n){int i,j;float t,s1,s2;float y[100];for(i=1;i<=n;i++) /* 第一次回代过程开始*/{s1=0;for(j=1;j<i;j++){t=-l[i][j];s1=s1+t*y[j];}y[i]=(b[i]+s1)/l[i][i];}for(i=n;i>=1;i--) /* 第二次回代过程开始*/{s2=0;for(j=n;j>i;j--){t=-u[i][j];s2=s2+t*x[j];}x[i]=(y[i]+s2)/u[i][i];}}void main(){float a[100][100],l[100][100],u[100][100],x[100],b[100];int i,j,n,r,k; float s1,s2;for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j<=99;j++){l[i][j]=0,u[i][j]=0;if(j==i) l[i][j]=1;}printf ("input n:\n");/*输入方程组的个数*/scanf("%d",&n);printf ("input array A:\n");/*读取原矩阵A*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%f",&a[i][j]);printf ("input array B:\n");/*读取列矩阵B*/for(i=1;i<=n;i++)scanf("%f",&b[i]);for(r=1;r<=n;r++)/*求解矩阵L和U*/{for(i=r;i<=n;i++){s1=0;for(k=1;k<=r-1;k++)s1=s1+l[r][k]*u[k][i];u[r][i]=a[r][i]-s1;}for(i=r+1;i<=n;i++){s2=0;for(k=1;k<=r-1;k++)s2=s2+l[i][k]*u[k][r];l[i][r]=(a[i][r]-s2)/u[r][r];}}printf("array L:\n");/*输出矩阵L*/ for(i=1;i<=n;i++) {for(j=1;j<=n;j++)printf("%7.3f ",l[i][j]);printf("\n");}printf("array U:\n");/*输出矩阵U*/for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%7.3f ",u[i][j]); printf("\n");}solve(l,u,b,x,n);printf("解为:\n");for(i=1;i<=n;i++)printf("x%d=%f\n",i,x[i]);}(2)(3)#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;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 (int 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(){c[0]=c[0]/b[0];for(int 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(){f[0]=f[0]/b[0];for(int 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];}7.【实验结果与分析总结(含运行结果截图)】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯消元法:思 首先来自A化为上三角阵 /* upper-triangular matrix */, 路 再回代求解 /* backward substitution */。
=
Guass列主元消去法步骤
• 基本步骤 • 1.输入A,b,TOL • 2.对于k=1:N
– 2.1选主元P – 2.2若|P|<=TOL 则停止,输出无解信息,否则 – 2.3 换行 – 2.4 消元 • 3.回代求解 • 4.输出解x
A[k][N]=A[k][N]-w;
printf("\n");
A[k][N]=A[k][N]/A[k][k];
}
}
/*方程组的解*/ printf("the root:\n"); for(i=0;i<N;i++)
printf("x[%d]=%f\n",i,A[i][N]) ; }
void main() {double A[N][N+1]=/{1, -1, 2, -1, -16,2, -2, 3, -3, -40,1, 1, 1, 0, -4,1, -1, 4, 3,8 }; clrscr(); Guass(A); }
对于一些特殊类型的方程组,可以保证
a(k 1) kk
不会很小,
因而不需要选主元
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> #define N 4 #define EPS 1e-5
if(fabs(p)<EPS) {printf("the number is error! i =%d,
2.4对于i=k+1:N A(i, k 1: N ) A(i, k 1: N ) A(i, k)* A(k, k 1: N ) b(i) b(i) A(i, k)* b(k)
3.回代求解 对于i=N:-1:1 b(i) b(i) A(i, i+1 : N )* b(i 1: N )
试验3 直接法求解线性方程组
实验内容
• Guass列主元消去法 • Doolittle分解 • 追赶法
试验3 解线性方程组的直接法
/* Direct Method for Solving Linear Systems */
求解
A
x
b
§1 高斯消元法 /* Gaussian Elimination */
A[i][k]=A[i][k]/A[k][k];
A[N-1][N-1]);
for(j=k+1;j<N+1;j++)
exit(-1);
A[i][j]=A[i][j]-A[i][k]*A[k][j]; }
} }
A[N-1][N]=A[N-1][N]/A[N-1][N-1];
/*输出变换后的矩阵*/
/*回代求解*/
printf("The Matrix:\n");
for(k=N-2;k>=0;k--)
for(i=0;i<N;i++)
{w=0;
{ for(j=0;j<N+1;j++)
for(j=k+1;j<N;j++)
printf("A[%d][%d]=%8.4f",
w=w+A[k][j]*A[j][N];
i,j, A[i][j]);
A[k][j]=A[I][j]; A[I][j]=b; }
for(i=k+1;i<N;i++)
if(fabs(A[i][k])>fabs(p))
{p=A[i][k];
I=i;
}
for(i=k+1;i<N;i++)
if(fabs(A[N-1][N-1])<EPS)
{ /*行乘数*/
{printf("the number is error A=%f\n",
k=%d\n",i,k); exit(0); }
void Guass(double A[][N+1]) {int i,j,k=0,I,t; double w=0,p,b;
for(k=0;k<N-1;k++) { /*选主元*/
p=A[k][k]; I=k;
/*换行*/ if(I!=k)
for(j=0;j<N+1;j++) { b=A[k][j];
对于k 1: N 2.1选主元 A( p, k) max A(i, k)
kin
2.2如果 A( p, k) TOL,则停止 2.3如果p k,则转(2.4),否则 A(k,k:N) A(p,k:N),b(k) b(p) 2.4对于j=k+1:N A(k, j) A(k, j) / A(k, k), b(k) b(k) / A(k, k)