高斯列主元消元法
用列主元高斯消元法求线性代数方程组的解
课程设计任务书前 言回顾普通解方程组的方法,一般都是先逐个削去未知变量,最终得到只有一个未知变量的方程,解之,把得到的值回代到消去变量过程中得到的方程组,逐个求出未知变量。
这种解线性方程组的基本方法就是这里要介绍的高斯消去法。
数学上,高斯消元法(或译:高斯消去法),是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。
当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。
高斯消元法可以用在电脑中来解决数千条等式及未知数。
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。
用关联矩阵表述网络拓扑结构,并根据厂站拓扑结构和网络拓扑结构等概念简化了电力系统的拓扑结构。
根据广义乘法和广义加法的运算规则,将改进的高斯消元算法应用于电力系统拓扑结构分析中,并引入稀疏、分块处理等技术提高了上述拓扑分析的效率。
采用上述高斯消元算法对山东电网220kV 以上的变电站进行拓扑结构分析,结果表明了运用该高斯消元法进行网络拓扑分析的正确性和有效性。
用列主元素法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
然后换行使之变到主元位子上,在进行消元计算。
设)()(k k b X A ,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元,并用MATLAB 软件进行求解。
目录摘要....................................................................................... 错误!未定义书签。
第1章绪论 ......................................................................... 错误!未定义书签。
第2章高斯消元法的算法描述 (2)2.1高斯消元法的原理概述 (2)c231730658" 2.1.1高斯消元法的消元过程 (2)c231730658" 2.1.2高斯消元法的回带过程 (3)c231730658" 2.1.3高斯消元法的复杂度分析 (4)c231730658" 2.2列主高斯消元法原理简介 (5)c231730658" 2.2.1列主高斯消元法的消元过程 (6)c231730658" 2.2.2列主高斯消元法的回带过程 (6)c231730658" 2.2.3列主高斯消元法的算法描述 (6)c231730662"第3章高斯消元法的物理应用 (9)3.1c231730663"电网模型的描述 (9)c231730658" 3.2电网模型的问题分析 (9)c231730658"3.3求解计算 (11)c231730693"参考文献 (13)摘 要用列主元素高斯消去法法,选取每列的绝对值最大的元素作为消去对象并作为主元素。
数值分析6(选主元高斯消元法)
2 1 2 2 3 3 2 1 2 0 5 0 4 6 19 9
14/27
三对角矩阵分解
f u over , with f
f u( x ) 0 x 1 f (0) a, f (1) b
20:22
( k = 2, 3, · · · ,n)
20:22
18/27
下三角方程组 LY = f
1 y1 f1 y f 1 2 2 2 n 1 y n f n
2 3 / 2 1 2
4 4 2 3 12 6 4 1 2 2 1 1
4 4 2 3 / 2 3 6 1 0 1 2 1 2
20:22
4 4 2 2 3 / 2 3 6 3 1 0 5 0 2 19 / 5 9 2
三角分解:
A = LU
三对角矩阵
=
单位下三角阵 上三角阵
AX=F LU X = F ①
20:22
L Y=F
②UX=Y
16/27
LU分解
2 2 1 1 / 2 1 3 2 2 4 2 3 5 1 2 2 1 / 2 1 / 2 5 / 2 2 4 / 5 12 / 5 2 3 5 2 1 1 / 2 1 U L 4/5 1 5 / 4 1 20:22
10 0 0
20:22
7 0 x1 7 x 6.1 0 6 2 2.5 5 2.5 x3
高斯消元法程序
高斯消元法程序一、引言高斯消元法是一种解线性方程组的有效方法,它通过一系列的行变换将方程组转化为简化的阶梯形矩阵,从而求得方程组的解。
本文将详细介绍高斯消元法的原理和实现过程,并给出相应的程序示例。
二、高斯消元法原理高斯消元法的核心思想是通过行变换将线性方程组转化为简化的阶梯形矩阵,从而求得方程组的解。
具体步骤如下:1. 将线性方程组写成增广矩阵的形式,即将系数矩阵和常数向量合并为一个矩阵。
2. 选取一个主元,通常选择系数矩阵的第一行第一列元素作为主元。
3. 通过行变换,将主元下方的元素全部变为0。
具体操作是将主元所在行的倍数加到下方的各行上,使得下方的元素变为0。
4. 选取下一个主元,重复第3步的操作,直到将整个矩阵转化为阶梯形矩阵。
5. 从最后一行开始,依次求解每个未知数的值。
三、高斯消元法程序示例下面给出一个使用Python编写的高斯消元法程序示例:```pythonimport numpy as npdef gaussian_elimination(A, b):n = len(A)Ab = np.concatenate((A, b.reshape(-1, 1)), axis=1)for i in range(n):max_row = ifor j in range(i+1, n):if abs(Ab[j, i]) > abs(Ab[max_row, i]):max_row = jAb[[i, max_row]] = Ab[[max_row, i]]for j in range(i+1, n):factor = Ab[j, i] / Ab[i, i]Ab[j] -= factor * Ab[i]x = np.zeros(n)for i in range(n-1, -1, -1):x[i] = (Ab[i, -1] - np.dot(Ab[i, :-1], x)) / Ab[i, i]return x```四、程序说明1. 程序使用了NumPy库,其中的`np.concatenate()`函数用于将系数矩阵和常数向量合并为增广矩阵。
高斯列主元消去法
高斯列主元消去法2.3高斯列主元消去法解线性方程组一:问题的提出我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。
就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。
实际运算的时候因为只能有限小数去计算,因此只能得到近似值。
在实际运算的时候,我们很多时候也常用高斯消去法。
但是高斯消去法在计算机中运算的时候常会碰到两个问题。
1.一旦遇到一些主元等于0,消元过程便无法进行下去。
2.在长期使用中还发现,即使消元过程能进行下去,但是当一些主元的绝对值很小时,求解出的结果与真实结果相差甚远。
为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。
其中又可以分为列选主元和全面选主元两种方法。
目前计算机上常用的按列选主元的方法。
因此我在这里做的也是列选主元高斯消去法。
二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。
我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。
然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。
高斯消元法的目的就是把一般线性方程组简化成上三角方程组。
于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
三、算法的描述1、设有n元线性方程组如下:=2、第一步:如果a11!=0,令li1= ai1/a11, I= 2,3,……,n用(-li1)乘第一个方程加到第i个方程上,得同解方程组:a(1)11a(1)12...a(1)1nx1b(1)1a(1)21a(1)22...a(1)2nx2b(1)2 .......=.a(1)n-11 a(1)n-12 . .a(1)n-1nxn-1b(1)n-1a(1)n1a(1)n2. . . a(1)nnxnb(1)n简记为:A(2)x=b(2)其中a(2)ij = a(1)ij – li1 a(1)1j ,I ,j = 2,3,..,nb(2)I = b(1)I – li1 b(1)1 ,I = 2,3,...,n第二步:如果a(2)22!=0,令li2= a(2)i2/a(2)22, I= 3,……,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组:a(1)11a(1)12...a(1)1nx1b(1)1a(1)22 ...a(1)2nx2b(1)2 .......=.. .a(n-1)n-1nxn-1b(n-1)n-1. . . a(n)nnxnb(n)n简记为:A(n)x=b(n)最后从方程组的最后一个方程进行回代求解为:n = b(n) / a(n)nni = ( b(k)k - a(k)kjxj ) / a(k)kk以上为高斯消去法的基本过程。
第3章3-01高斯消元法-列主元法ppt课件
顺序高斯消去法的计算量
消元中各步需乘除法次数
第i 步
乘法次数
1
(n 1)2
2
(n 2)2
n 1
合计
1
n (n 1)(2 n 1) 6
除法次数
n 1 n 2
1
n (n 1) 2
.
3.1.2 列主元高斯消去法
为什么列选主:数值不稳定
当高斯消去法的主元
a
(k kk
)
0
时 , 尽管“当
A
非奇异时,
0,
a(2) 22
0,
,
a(n) nn
0
消元过程
mik ai(jk1)
a(k) ik
a(k) kk
(k
1,2,
a(k) ij
mik ak(jk)
, n 1) (i, j k 1,k 2,
,n)
bi(k`)
b(k) i
mikbk(k )
.
回代过程
上 三 角 形 方 程 组 A(n)x b(n) 求 解 过 程
列选主元高斯消去法的优越性,不增加求解过程的运算量,而 大大减小误差。
经过 k 1次消元后得到增广矩阵 ( A(k) | b(k) ) ,在此增广
矩阵的第
k
列的元素
a(k kk
)
,
a(k) k 1,k
,
a(k nk
)
中选取
绝对值最大的
一个,记为
a(k) rk
,然后交换
(
A(k )
|
b(k)
)
中的第
k
第3章 线性代数方程组的数值解法
3.1 高斯消去法 3.2 矩阵三角分解法 3.3 平方根法 3.4 向量和矩阵的范数 3.5 迭代法 3.6 迭代法的收敛性 3.7 方程组的形态和误差分析
高斯消元法详解
高斯消元法详解高斯消元法是一种线性代数中用于解决线性方程组的方法。
它的基本思想是通过一系列的行变换将一个线性方程组转化为一个上三角矩阵,然后通过回带求解出未知数的值。
高斯消元法的基本步骤如下:1. 将待求解的线性方程组写成增广矩阵形式,即将系数矩阵和常数向量合并成一个矩阵。
2. 选取第一行第一列元素不为零的行作为主元行,通过初等行变换将该行化为主元,即使该行第一列元素为1,其余元素为0。
3. 对于每个未被选中的行,将其第一列元素通过初等行变换化为0。
具体做法是将该行乘以主元所在行第一列的相反数,并加到主元所在行上。
4. 重复步骤2和3直到所有未被选中的行都被化为0或者无法选取主元。
5. 回带求解出未知数的值。
从最后一行开始,依次代入已经求出来的未知数值并计算出当前未知数值。
需要注意的是,在进行高斯消元法时需要注意以下几点:1. 当选择主元时应尽量避免选取小数作为主元,因为小数的精度有限,可能会导致计算误差。
2. 当系数矩阵中存在多个相同的行时,需要将它们合并成一个行,以减少计算量。
3. 在进行回带求解时,应注意未知数的顺序和求解的顺序应该一致。
高斯消元法可以用于求解任意大小的线性方程组,但是当方程组的规模很大时,计算量会非常大。
此外,在某些情况下高斯消元法可能会出现无法选取主元或者主元为0的情况,此时需要采用其他方法进行求解。
总之,高斯消元法是一种简单而有效的线性方程组求解方法,在实际应用中得到了广泛的应用。
熟练掌握高斯消元法可以提高我们在科学计算和工程设计中的能力和水平。
列主元高斯消元法
列主元高斯消元法《列主元高斯消元法》被认为是一种十分有效的非负定线性方程组求解方法,在研究过程中曾被用于解决多项式的根的问题,例如求解二次方程及其高次多项式的根。
在数学分析理论及应用中,高斯消元法曾大量的被使用,因此需要对其进行深入的研究。
高斯消元法,又称列主元消元法,其核心思想是通过行变换,将线性方程组变化为上三角矩阵,从而求解问题。
推广到一般情况,假设给定一个下三角矩阵A,它的行列式为D,其定义为D=det(A)。
现在,对矩阵A做行变换,可得到新的矩阵A,其满足det(A=det(A)。
如果变换的主要元素来自第一列的元素,则称之为列主元变换。
一般来说,列主元变换可以将矩阵变为上三角形,高斯消元法就是以此为基础,通过连续重复列主元变换,使得矩阵变为上三角形,从而解决非负定线性方程组求解问题。
首先,对非负定方程组进行矩阵化,可以得到一个系数矩阵A和一个常数项向量b,把它们组合进一个矩阵X,则可以表示成AX=b。
即用AE=b来表示,其中E可以代表某一个线性空间的基,比如n维空间的基Ai=(1,0,….,0),i=1,2…,n。
接下来,再以矩阵X进行转变,以第一列的元素A1、A2、A3、…、An作为主元,对A、b作列主元变换,从而使得A矩阵变为上三角矩阵。
由于变换的主元是第一列的元素,所以整个消元过程将按此进行,使得矩阵A变为三角形,如:A11 A12 A13 A14 An10 A22 A23 A24 An20 0 A33 A34 An30 0 0 A44 An4最后,只需将A阵最后一行转变为单位向量,所有的行变换就完成了,即得到上三角形:A11 A12 A13 A14 An10 A22 A23 A24 An20 0 A33 A34 An30 0 0 1 An4解这种上三角矩阵就会变得十分容易,例如,若A=(A11,A22,A33,… An-1,An),要求解每个矩阵对应的未知数向量x,只需进行下面的步骤:1. 令xn=An/An2.知xn,令xn-1=(A(n-1)-(A(n-1),A)xn)/ A(n-1)3.续令xn-2=(A(n-2)-(A(n-2),A)xn)/A(n-2)4. 一直重复上述步骤,直到x1=(A1-(A1,A)x2)/A1由此,就可以得到所求的向量X,最后,将方程组AX=b转换为可求解的上三角矩阵,即可用列主元高斯消元法得出求解的结果。
解线性方程组的列主元素高斯消去法和lu分解法
数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件: 当A可逆时,列主元Gauss(高斯)消去法一定能进行到底。
优点: 具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。
列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是A=LU,L 是下三角阵,U是上三角阵,Doolittle 分解:L 是单位下三角阵,U是上三角阵;Crout 分解:L 是下三角阵,U是单位上三角阵。
矩阵三角分解的条件是矩阵 A 有唯一的Doolittle 分解的充要条件是 A 的前n-1 顺序主子式非零;矩阵A有唯一的Crout 分解的充要条件是 A 的前n-1 顺序主子式非零。
三角分解的实现是通过(1)Doolittle 分解的实现;(2)Doolittle 分解的缺点:条件苛刻,且不具有数值稳定性。
(3)用Doolittle 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组3.01 6.03 1.99 x1 11) 1.27 4.16 1.23 x2 10.987 4.81 9.34 x3 110 7 0 1 x1 83 2.099999 6 2 x2 5.9000012) 5 1 5 1x3 52 1 0 2 x4 1a、用你熟悉的算法语言编写程序用列主元高斯消去法和LU分解求解上述两个方程组,输出Ax=b 中矩阵 A 及向量b, A=LU 分解的L 及U,detA 及解向量x.b、将方程组(1)中系数 3.01 改为 3.00 ,0.987 改为0.990 ,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
解线性方程组-高斯消去法列主元
的数作主元 arkk1
max
kin
aikk
1
,然后将第 r 行和第 k 行交换(如 r k )。从而在计算 lik 时保证了被除
数的绝对值大于等于除数的绝对值。
实际计算时,当最大的 arkk1 很小时,求解结果同样会严重失真,则求解过程应当停止。设 0是某个 很小的数,当 arkk1 时,过程应该停止,此时已不是算法的问题,而是方程组本身的问题了。
x3 5 1 5 , x2 3 3x3 3 3 35 3 4 , x1 7 x2 x3 2 7 4 5 2 1
此方法就是高斯消去法。
计算流程
记初始方程组 Ax b 为 A0 x b0 。
k 1,即消去第 2 到第 n 个方程中的 x1 ,假定 a110 0 , 目标
a110 a120
是:
A
a201
a202
an01 an02
a1n0
b10
a110 a120
a20n
b20
0
a212
对于j k 1, , n 做 aijk aijk1 lik akkj 1
bik bik1 lik bkk1
直到 k n 1时,消元过程结束, An1 成为上三角矩阵,最后一个方程成为一元一次方程(只含 xn ),
第一步,消元过程: 对增广矩阵进行消元,
7b 11ຫໍສະໝຸດ , 0 x1
x
x2
。
x3
2
A b 4
1
1 5 1
1 1 1
第1节 gauss消元法
若系数矩阵A非奇异,即 det (A)≠0 ,则方程组有 惟一解 x =( x1, x2, …, xn )T . 根据 Gramer(克莱姆)法则,求解方程组(5.1)时, 要计算大量的行列式,所需乘法次数大约为
N=(n2-1)n!
当 n 较大时,这个计算量是惊人的。例 如,当 n= 20 时,约需乘法次数为 N=9.7×1020 如果用每秒一亿次的计算机来计算,需要三十万年时 间。可见Gramer法则不是一种实用的方法。 因此,必须构造出适合于计算机使用的线性方程组的求 解方法。
b
( 2) i
b
(1) i
l i 1b
(1) 1
, i 2,3, , n
第二步,设 a22(2)≠ 0 ,将第二列a22(2)以下各元素消成零,
即依次用
li 2
2 a i(2 ) ( 2) a 22
(i=3,4,…,n)
乘以矩阵[A(2),b(2)]的第二行再加到第i行,得到矩阵
这是与原线性方程组(5.1)等价的方程组.
(1 (1 ( ( a11) x1 a12) x 2 a11) x n b11) n (2 ( ( a 22) x 2 a 22 ) x n b22 ) n 对于等价方程组 ( n 1 ) ( n 1 ) ( n 1 ) a n 1n 1 x n 1 a n 1n x n bn 1 (n ( a nn) x n bnn )
(1 a12) (1 a 22) (1 a 32)
(1 a13) (1 a 23) (1 a 33)
( a11) n ( a 21) n ( a 31) n
( a n1) 2
( a n1) 3
计算方法实验报告_列主元高斯消去法
row_first=A[i][i]; for(int j=0;j<n+1;j++)
计算方法实验报告
{ A[i][j]=A[i][j]/row_first;
} }
for(int k=n-1;k>0;k--) {
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
A_B[i][j]=A[i][j]; } A_B[i][N]=B[i][0]; } return A_B; }
3
//输出矩阵 A 的 row x col 个元素 void Show_Matrix(double **A,int row,int col) {
for(int i=0;i<N;i++)
{
int row=Choose_Colum_Main_Element(N,A_B,i);
if(Main_Element<=e) goto A_0;
Exchange(A_B,N+1,row,i);
Elimination(N,A_B,i);
cout<<"选取列主元后第"<<i+1<<"次消元:"<<endl;
double factor; for(int i=start+1;i<n;i++) {
factor=A[i][start]/A[start][start]; for(int j=start;j<n+1;j++) {
解线性方程组的列主元素高斯消去法和lu分解法
数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
三、算法描述:本次试验采用的是高斯列主元消去法和LU 分解法求解线性方程组的解。
其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A 可逆时,列主元Gauss(高斯)消去法一定能进行到底。
优点:具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。
列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。
注意:省去换列的步骤,每次仅选一列中最大的元。
矩阵的三角分解法是A=LU,L 是下三角阵,U 是上三角阵,Doolittle 分解:L 是单位下三角阵,U 是上三角阵;Crout 分解:L 是下三角阵,U 是单位上三角阵。
矩阵三角分解的条件 是矩阵A 有唯一的Doolittle 分解的充要条件是A 的前n-1顺序主子式非零;矩阵A 有唯一的Crout 分解的充要条件是A 的前n-1顺序主子式非零。
三角分解的实现是通过(1)Doolittle 分解的实现; (2)Doolittle 分解的缺点:条件苛刻,且不具有数值稳定性。
(3)用Doolittle 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x a 、用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.b 、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。
高斯列主元消去法
问题提出:采用高斯列主元消去法解线性方程组。
算法(公式)推导:高斯顺序消去法有一个最大的缺点就是一旦对角元素为0,就进行不下去了,为了解决这个问题就有了高斯主元消去法。
如果在高斯顺序消去法消去过程进行到第i 步时,先选取a ri ()n r i ≤≤中(即第i 列)绝对值最大的元素,设为第j 行的元素aji ,然后将第i+1行至第n 行中的每一行减去第i 行乘以ii kj a a (k 代表行号),依次进行消元,这样得到的算法叫高斯按列主元消去法。
高斯按列主元消去法的算法步骤介绍如下:1. 将方程组写成以下的增广矩阵的形式: 432144434241343332312423222114131211b b b b a a a a a a a a a a a a a a a a 2. 对k=1,2,3,…..,n-1,令∑==nk s sk pk a a max ,交换增广矩阵的第k 行与第p 行;对j=k+1,K+2,……..,n,计算*km jkjm jm kk a a a a a =-(m=k,k+1,....n)kk jk k j j a a b b b *-=算法结束。
3. 在MATLABE 中编程实现的高斯按列主元消去法函数为:GaussXQLineMain功能:高斯按列主元消去法求线性方程组Ax=b 的解调用格式:[x,XA]=GaussXQLineMain(A,b)其中,A :线性方程组的系数矩阵;B:线性方程组中的常数向量;x:线性方程组的解:XA:消元后的系数矩阵(可选的输出参数)。
高斯列主元消去法用MATLAB实现如下所示:4.其中用到上三角矩阵求解函数:在MATLABE中编程实现的上三角系数矩阵求解函数为:SolveUPTriangle 功能:求上三角系数矩阵的线性方程组Ax=b的解调用格式:x=SolveUpTriangel(A,b)其中,A :线性方程组的系数矩阵;b :线性方程组中的常数向量; X :线性方程组的解;上三角系数矩阵求解函数用MATLAB 实现如下所示:高斯按列主元消去法解线性方程组应用实例:用高斯按列主元消去法求解下列线性方程组的解。
高斯消元法和列主元消元法
用第二列的3、4行除以 k22得
- 25 - 5 = 11 = k 32 90 18 11
k
42
=
3 1 9 1
2 1 = 0 1
16 45
第三行减去第二行乘以 k 3 2 , 第四行减去第二行乘以k 4 2 。
由以上可得:
骣 1 5 ç11 ç ç 32 ç 0 19 ç ç 11 11 ç ç ç ç 1870 ç0 0 ç ç 198 ç ç ç ç 0 0 - 1727 ç ç 桫 495 - 4 25 11 1133 198 8195 495 13 ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ ÷ 6468 ÷ ÷ ÷ ÷ 495 ÷
- 4 25 11 1133 198 3421705518 183278700
÷ ÷ ÷ ÷ 147 ÷ ÷ ÷ 11 ÷ ÷ ÷ ÷ 3003 ÷ ÷ ÷ ÷ 198 ÷ ÷ 3421705518 ÷ ÷ ÷ ÷ 183278700 ÷
13
回代过程可得:
X 4 = 1; X 3 = 1; X 2 = 1; X 1 = 1;
1 k 41 = 11
第二行减去第一行乘以 k 21 , 第三行减去第一行乘以 第四行减去第一行乘以
k k
31
,
。
41
由此上可得:
骣 1 ç11 ç ç 90 ç0 ç ç 11 ç ç ç ç ç 0 - 25 ç ç 11 ç ç ç 32 ç0 ç ç 桫 11 5 - 4 13 ÷ ÷ ÷ 32 25 147 ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ ÷ 95 56 126 ÷ ÷ ÷ ÷ 11 11 11 ÷ ÷ ÷ - 27 191 196 ÷ ÷ ÷ ÷ 11 11 11
4-线性方程组的解法
17
定理 1 矩阵 A 可以三角分解的条件如下:
1. 若矩阵 A 的所有顺序主子式不等于零; 2. 若矩阵 A 对称正定; 3. 若矩阵 A 严格对角占优,即:
akk akj , k 1, 2, n 。
j k
18
2 2 1 A 4 5 4 例 3 已知矩阵 ,检验 A 是否满足三角分解的条件, 2 4 3
n n n n a11 a1 a b k 1n 1 n n n akk akn bk n n ann bn
7
消元公式:
(0) aij aij , bi(0) bi , ( i , j 1, 2, ..., n) For k 1, 2, ..., n 1 (k ) ( k 1) ( k 1) aij aij lik akj b( k ) b( k 1) l b( k 1) i i ik k ( k 1) ( k 1) akk ; i , j k 1, ..., n lik aik
利用增广矩阵的初等行变换法表示为:
1 1 2 2 1 1 2 2 1 1 2 2 2 1 1 2 1 3 2 1 3 2 A b 4 1 2 1 3 6 7 3 1
k 1
1
ai1 lik uk1 li1u11 ,
k 1
1
即: li1 ai1 u11 i 2, 3,, n .
这是 U 的第一行和 L 的第一列。
22
设: U 的前 m 1 行和 L 前 m 1 列均已算出,那么:
amj lmk ukj lmk ukj lmmumj ,
gauss高斯消元法
高斯消元法(Gaussian elimination)是一种数值方法,用于求解线性方程组。
它的基本思想是通过一系列的列变换将线性方程组化简成上三角形式,然后再通过回代求解方程。
以下是高斯消元法的步骤:
构造增广矩阵:将线性方程组的系数矩阵A和常数项矩阵B合并形成增广矩阵[A | B]。
主元选择:选择一个主元素,一般选择当前列中绝对值最大的行作为主元行。
如果主元素为零,则需要进行主元调整。
主元调整:如果主元素为零,可以通过交换当前行和下方非零行的位置,使主元不为零。
如果无法找到非零主元行,则方程组可能有无数解或无解。
消元过程:通过消元操作,将主元下方的元素消为零。
具体操作是将主元下方的每一行乘以一个系数,然后将其加到当前行上,使得当前列下方的元素变为零。
重复步骤2、3和4,直到将矩阵化简为上三角形式。
回代求解:从最后一行开始,将求解值代入上一行的表达式中,依次回代求解出所有未知数的值。
需要注意的是,高斯消元法可能会遇到以下情况:主元为零:如果在选取主元时遇到主元为零的情况,需要进行主元调整,即通过交换行位置将主元不为零。
无解或无穷多解:如果消元过程中遇到无法继续消元的情况,可能是因为方程组无解或有无穷多解。
无解的情况是指出现矛盾的方程式,而无穷多解的情况是指方程组中的某些未知数可以取任意值。
高斯消元法是一种非常常用且有效的求解线性方程组的数值方法,但在实际应用中可能需要考虑矩阵的特殊性、数值精度以及计算速度等问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、程序总体结构图
图 1: 程序总体结构图
输出: 调用菜单(manu)函数显示菜单 输入:所须选择的序号.
1:输入系数
2 开始计算
3:退出
2、具体功能框图
1
xxxxxxxxxxxxxxxx
1:SWAP 函数 定义:实数 t 将 a 赋值给 t 将 b 赋值给 a 将 t 赋值给 b
7
xxxxxxxxxxxxxxxx
printf("x1 = %.3f\nx2 = %.3f\nx3 = %.3f\n",x1,x2,x3); }
四、个人总结
这次课设让我更熟悉的掌握了通过 C 语言运用高斯 定理解方程组,也使我对二维数组的认识更加深入了解, 在完成程序中,遇到过较大的困难,但通过重新深入教材 和对资料理解的基础逐步完成。
8
xxxxxxxxxxxxxxxx
五、参考文献
1 谭浩强.《C 程序设计》.北京:清华大学出版社,2006
2 刘成等.《C 语言程序设计实验指导与习题集》.北京:
中国铁道出版社,2007
六、源程序
#include "stdio.h" #include "conio.h"//其中定义了 getch()函数。
b)做初等行变换使原方程组转化为:
* * * * x1 *
0
*
*
*
x2
*
0 0
0 0
* *
* *
x3 x4
* *
第三步消元——在增广矩阵(A,b)中的第三列中(从第三行开
始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,
b)做初等行变换使原方程组转化为:
* * * * x1 *
void swap(float &a,float &b) {
t = a; a = b; b = t; }
2、输入函数,为方程赋予初值
void input() {
printf("a1X1 + b1X2 + c1X3 = d1\na2X1 + b2X2 + c2X3 = d2\na3X1 + b3X2 + c3X3 = d3\n");
2 3
x1 x1
2x2 4x2
5x3 7 x3
5 6
x1 3x2 3x3 5
四、课程设计要求: 程序质量:
用模快化程序设计方法;在程序界面,以菜单的形式调用各功能 函数:程序可读性强,界面友好;输出形式尽量美观。
用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。 用户界面中的菜单至少应包括“输入数据”、“开始计算”、 “退
swap(d1,d3); b2=b1*(a2/a1*(-1))+b2; b3=b1*(a3/a1*(-1))+b3; c2=c1*(a2/a1*(-1))+c2; c3=c1*(a3/a1*(-1))+c3; d2=d1*(a2/a1*(-1))+d2; d3=d1*(a3/a1*(-1))+d3;
指导教师:________
学生签名:________
目录
一、需求分析............................................................ 1 二、程序流程图........................................................ 1 三、核心技术的实现说明及相应程序段 ............... 4 四、个人总结............................................................ 8 五、参考文献............................................................ 9 六、源程序................................................................ 9
t = a; a = b; b = t; } void input() { printf("a1X1 + b1X2 + c1X3 = d1\na2X1 + b2X2 + c2X3 =
9
xxxxxxxxxxxxxxxx
d2\na3X1 + b3X2 + c3X3 = d3\n"); printf("!!!以逗号隔开,回车结束!!!\n"); printf("input three num for a1,a2,a3:"); scanf("%f,%f,%f",&a1,&a2,&a3); printf("input three num for b1,b2,b3:"); scanf("%f,%f,%f",&b1,&b2,&b3); printf("input three num for c1,c2,c3:"); scanf("%f,%f,%f",&c1,&c2,&c3); printf("input three num for d1,d2,d3:"); scanf("%f,%f,%f",&d1,&d2,&d3);
2
xxxxxxxxxxxxxxxx
3COUNT 函数
真
a1 * a1 < a2 * a2
假
swap(a1,a2);
swap(b1,b2);
swap(c1,c2);
swap(d1,d2); 真
a1 * a1 < a3 * a3
swap(a1,a3); swap(b1,b3);
swap(c1,c3);
三、核心技术的实现说明及相应程序段
本程序一共由三个自定义函数和一个主函数组成,其 中主函数以菜单的形式调用其他函数来实现要求的所有 功能。在这些函数当中,交换函数,运算函数是程序中 较为核心的部分,其他的函数为辅,整个程序运行的主界 面如下:
4
xxxxxxxxxxxxxxxx
下面作分布解说: 1、交换赋值函数
真
b2 * b2 < b3 * b3
swap(b2,b3); swap(c2,c3); swap(d2,d3);
c3 = c2 * ( b3/b2 * (-1)) + c3 ; d3 = d2 * ( b3/b2 * (-1)) + d3 ;
假 假
3
xxxxxxxxxxxxxxxx
x3 = d3 / c3; x2 = ( d2 - (x3 * c2) )/b2; x1 = (d1 - (x2 * b1) - (x3 * c1))/a1; printf("x1 = %.3f\nx2 = %.3f\nx3 = %.3f\n",x1,x2,x3);
3、运算函数 运算函数是本程序的主要部分,首先列第一列主元
(找到第一列的最大系数)然后通过调用 SWAP 函数,掉 到第一行,依此类推。求出 Xn 然后回带,最后打印出来
6
xxxxxxxxxxxxxxxx
void count() {
if(a1 * a1 < a2 * a2) {
swap(a1,a2); swap(b1,b2); swap(c1,c2); swap(d1,d2); } if(a1 * a1 < a3 * a3) { swap(a1,a3); swap(b1,b3); swap(c1,c3); swap(d1,d3); } b2=b1*(a2/a1*(-1))+b2; b3=b1*(a3/a1*(-1))+b3; c2=c1*(a2/a1*(-1))+c2; c3=c1*(a3/a1*(-1))+c3; d2=d1*(a2/a1*(-1))+d2; d3=(a3/a1*(-1))+d3; if(b2 * b2 < b3 * b3) { swap(b2,b3); swap(c2,c3); swap(d2,d3); } c3 = c2 * ( b3/b2 * (-1)) + c3 ; d3 = d2 * ( b3/b2 * (-1)) + d3 ; x3 = d3 / c3; x2 = ( d2 - (x3 * c2) )/b2; x1 = (d1 - (x2 * b1) - (x3 * c1))/a1;
void menu() {
puts("1. 数据输入"); puts("2. 开始计算"); puts("3. 退出"); }
float a1,a2,a3,b1,b2,b3,c1,c2,c3,d1,d2,d3; float t; float x1,x2,x3;
void swap(float &a,float &b) {
课程设计
学 号: 班 级: 姓 名: 指导教师 : 2008 年 6 月 26 日
课程设计任务书
一、课程设计题目:用高斯列主元消元法解线性方程 二、课程设计工作自 2008 年 6 月 23 日起至 2008 年 6 月 27 日止 三、课程设计内容:
运用所学的 C 语言知识,编制和调试程序,具有如下功能: 请用高斯列主元消元法解下列方程组:
第一步消元——在增广矩阵(A,b)第一列中找到绝对值最大的
元素,将其所在行与第一行交换,再对(A,b)做初等行变换使
原方程组转化为如下形式:
* * * * x1 *
0
*
*
*
x2