第五章-解线性方程组的直接方法
- 格式:ppt
- 大小:3.56 MB
- 文档页数:53
解线性方程组的直接方法一、高斯消元法高斯消元法是解线性方程组最常用的方法之一、它通过一系列的消元操作,将线性方程组转化为阶梯型方程组,从而求解未知数的值。
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可逆。
第五章解线性方程组的直接方法⏹预备知识⏹消元法⏹矩阵分解法⏹追赶法⏹误差分析线性代数是数值计算方法的基础,学习它对数值计算方法其它内容的学习会有很大的帮助。
无论是插值公式的建立,还是微分方程的离散格式的构造,其基本思想都是转化为代数问题来处理,即归结为解线性方程组。
MATLAB的强大功能是建立在矩阵和向量运算基础上的,线性代数的学习也可以大大提高对MATLAB的掌握程度。
线性方程组的基本解法:直接解法:经过有限步算术运算,在不考虑舍入误差的情况下求得方程组的精确解;迭代解法:用某种极限过程逐步逼近方程组的精确解。
5.1 预备知识: 矩阵和向量及线性方程组的解方阵:m=n 的矩阵;零矩阵:所有元素都为0的矩阵。
在MATLAB中零矩阵由zeros 命令定义。
如A=zeros(m,n)定义一个m×n 零矩阵,n×n 零矩阵可以用命令A=zeros(n)定义。
单位矩阵:所有对角元为1而其余元素均为0的方阵。
单位矩阵记为I。
在MATLAB 中单位矩阵由eye命令定义。
如A=eye(n)定义一个n阶单位矩阵。
元素都是1的矩阵:在MATLAB中元素都是1的矩阵由ones命令定义。
如A=ones(m,n)定义一个m×n阶的元素都是1的矩阵。
矩阵的加法和减法:行列数相同的矩阵之间才可以进行加法和减法。
矩阵的乘法:若A的行数和B的列数相等,则它们可以相乘C=AB。
其中C的第i 行第j列元素等于A的第i行和B的第j列对应元素乘积之和。
逆矩阵:若两个方阵A和B满足:AB=I且BA=I,则称A和B互为逆矩阵。
在MATLAB 中M的逆矩阵由inv(M) 命令计算。
对于任一非奇异矩阵都可用inv命令计算其逆矩阵。
若MATLAB拒绝计算一个方阵的逆矩阵,则此矩阵一定是奇异的。
一个奇异矩阵的行列式是0(或者至少有一行(列)可以用其它行(列)通过多次加法和减法表示)。
行列式:方阵A的行列式是一个标量值,用det(A)或|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,所以此方程组有唯一解。
数值分析第五章解线性方程组的直接法解线性方程组是数值分析中的一个重要问题,对于大规模的线性方程组来说,直接法是一种常用的求解方法。
本文将介绍解线性方程组的直接法,包括高斯消元法和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。
逆矩阵法的优势在于其求解过程相对简单,计算量较小,并且不需要对系数矩阵进行消元操作。
但是逆矩阵法的限制在于当系数矩阵不可逆时无法使用。
三、克莱姆法则克莱姆法则是解线性方程组的另一种直接方法,它通过定义克莱姆行列式和克莱姆向量,利用行列式的性质求解方程组的解向量。