高斯消元法 主元消去法
高斯选主元消去法.ppt
1 0 r3 2 r20
2/3 0
1 1/2
0 1
1 1/2
2 / 3 3 0 2 r2
0 1 0 0
3/2 1/2
0 3/2 1 1/2
2 1 0
5
r1 3 r2
1 5/ 3 2 0 0 1/ 3
1 0 1/ 2 0 5/ 2 2
1 0 2/ 3 1 0 1 2/ 3 3 0 1 3/ 2 0 3/ 2 1
0 1
r1
r3
2 1
4 2
5 3
0 1
1 1 5/ 3 2 0
1 0 0
0 0
1/3
m31
1 3
1
m32 2
2 r2 3 r1
1 r3 3 r1
0 0
1
2/3 1/3 5/3
101 110
2/3
2 / 3 1 0 1 2/ 3 1/ 3 1 1 0 1/ 3
yn yi
bn (bi
/ ann
n
aij y j ) / aii
j i 1
(i n 1,,2,1)
优点 该方法数值稳定( mi k 1). 缺点 工作量大. 改进方法 列主元消去法,且此时mi k 1.
4.2 列主元素消去法
设已完成第1步~第k-1步计算,得到与原方程组等价的方程组
)第k列与第jk列元素;
1,, n)
bi bi mik bk (i k 1,, n)
二、 回代求解
a11 a12 a1n y1 b1
经过上述过程,方程组约化为
a22
a2n
y2
b2
ann
yn
2-2 Gauss列主元消去法
S2 若ann 0,则输出“ A是奇异矩阵”;停机 . S3 置xn an,n1 / ann ;
对i n 1, n 2,...1,
ai,n1 n aij x j
置xi
j i 1
aii
S4 输出x1, x2,..., xn ;停机.
作业:
P50 习题3
k in
aik
;
S12 若aik ,k 0,则输出“ A是奇异矩阵”;停机 .
S13 若ik k,则
akj aik , j j k,...,n 1;
S14 对i k 1,..., n
置aik aik / akk ; 对j k 1,..., n 1
置aij aij aik akj.
§2-2 Gauss列主元消去法
一、Gauss列主元消去法的引入 例1. 用3位浮点数运算,求解线性方程组
0.0001xx11
x2 x2
1 2
解: 本方程组的精度较高的解为
x* (1.00010001 ,0.99989999 )T
用Gauss消去法求解
A ( A,b)
0.000100 1
1 1
21
0.000100
m2110 000
0
回代后得到
1
1
1.00 104 1.00 104
x1 0.00 , x2 1.00
与精确解相比,该结果显然是错误的 究其原因,在求行乘数时用了很小的数0.0001作除数
如果在求解时将1,2行交换,即
A ( A,b)
1 0.000100
1 1
a(2) i2
,
交换第2行和第i2行,
2in
然后进行消元,得[ A(3) , b(3) ].
数值分析高斯顺序消去法、列主元消去法LU分解法
数值分析实验报告(1)学院:信息学院班级:计算机0903班姓名:***学号:********课题一A.问题提出给定下列几个不同类型的线性方程组,请用适当的方法求解线性方程组1、设线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------------------1368243810041202913726422123417911101610352431205362177586832337616244911315120130123122400105635680000121324⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x =⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2119381346323125 x *= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T2、设对称正定阵系数阵线方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----------------------19243360021411035204111443343104221812334161206538114140231212200420424⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡87654321x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---4515229232060 x * = ( 1, -1, 0, 2, 1, -1, 0, 2 )T3、三对角形线性方程组⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡------------------4100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡10987654321x x x x x x x x x x = ⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡----5541412621357 x *= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )TB.(1)对上述三个方程组分别用Gauss 顺序消去法与Gauss 列主元消去法;平方根 与改进平方根法;追赶法求解(选择其一) (2)编写算法通用程序(3)在应用Gauss 消去时,尽可能利用相应程序输出系数矩阵的三角分解式C.(1)通过该课题的程序编制,掌握模块化结构程序设计方法 (2)掌握求解各类线性方程组的直接方法,了解各种方法的特点 (3)体会高斯消去法选主元的必要性 实验步骤:(高斯消去法,列主元,LU )1顺序高斯消去法2.LU 分解法3.列主元高斯消去法(如下图)(1)高斯消去法运行结果如下(2)对方程的系数矩阵进行LU分解并求出方程组的解(3)列主元高斯消去法实验体会总结:利用gauss消去法解线性方程组的时候,如果没有经过选主元,可能会出现数值不稳定的现象,使得方程组的解偏离精确解。
高斯方法解线性方程组c程序
高斯消去法和高斯主元消去法解线性方程组:高斯消元法:#include<stdio.h>#include<math.h>main(){int gauss(int n,double a[],double b[]); int i;double a[3][3]={{3,-1,4},{-1,2,-2},{2,-3,-2}}; double b[3]={7,-1,0};if(gauss(3,&a[0][0],b)!=0)for(i=0;i<=2;i++)printf("\nx[%d]=%f\n",i,b[i]);}int gauss(int n,double a[],double b[]) {int i,k,j,p,q;double d,t;for(k=0;k<=n-2;k++){d=a[k*n+k];if(d==0)return(0);for(j=k+1;j<=n-1;j++){p=k*n+j;a[p]=a[p]/d;}b[k]=b[k]/d;for(i=k+1;i<=n-1;i++){for(j=k+1;j<=n-1;j++){p=i*n+j;a[p]=a[p]-a[i*n+k]*a[k*n+j];}b[i]=b[i]-a[i*n+k]*b[k];}}d=a[(n-1)*n+n-1];if(fabs(d)+1.0==1.0){printf("fail\n");return(0);}b[n-1]=b[n-1]/d;for(k=n-2;k>=0;k--){t=0.0;for(j=k+1;j<=n-1;j++)t=t+a[k*n+j]*b[j];b[k]=b[k]-t;}return (1);}⎪⎩⎪⎨⎧=---=-+-=+-0232122743321321321x x x x x x x x x结果:x1=2,x2=1,x3=0.5高斯全选主元法:#include<stdio.h>#include<math.h>#include<stdlib.h>main(){int gauss(int n,double a[],double b[]);int i;double a[3][3]={{3,-1,4},{-1,2,-2},{2,-3,-2}}; double b[3]={7,-1,0};if(gauss(3,&a[0][0],b)!=0)for(i=0;i<=2;i++)printf("\nx[%d]=%f\n",i,b[i]);}int gauss(int n,double a[],double b[]){int *js,i,j,L,k,is,p,q;double d,t;js=malloc(n*sizeof(int));L=1;for(k=0;k<=n-2;k++){d=0.0;for(i=k;i<=n-1;i++)for(j=k;j<=n-1;j++){t=fabs(a[i*n+j]);if(t>d){d=t;is=i;js[k]=j;}}if(d+1.0==1.0)L=0;else{if(js[k]!=k)for(i=0;i<=n-1;i++){p=i*n+k;q=i*n+js[k];t=a[p];a[p]=a[q];a[q]=t;}if(is!=k){for(j=k;j<=n-1;j++){p=k*n+j;q=is*n+j;t=a[p];a[p]=a[q];a[q]=t;}t=b[k];b[k]=b[is];b[is]=t;}}if(L==0){free(js);printf("fail\n");return(0);}d=a[k*n+k];for(j=k+1;j<=n-1;j++){p=k*n+j;a[p]=a[p]/d;}b[k]=b[k]/d;for(i=k+1;i<=n-1;i++){for(j=k+1;j<=n-1;j++){p=i*n+j;a[p]=a[p]-a[i*n+k]*a[k*n+j];}b[i]=b[i]-a[i*n+k]*b[k];}}d=a[(n-1)*n+n-1];if(fabs(d)+1.0==1.0){free(js);printf("fail\n");return(0);}b[n-1]=b[n-1]/d;for(i=n-2;i>=0;i--){t=0.0;for(j=i+1;j<=n-1;j++)t=t+a[i*n+j]*b[j];b[i]=b[i]-t;}js[n-1]=n-1;for(k=n-1;k>=0;k--)if(js[k]!=k){t=b[k];b[k]=b[js[k]];b[js[k]]=t;} free(js);return(1);}结果:x1=2,x2=1,x3=0.5。
作业一 高斯消元法和列主元消元法
用高斯消元法和列主元消去法求解线性代数方程组(X*是方程组的精确解)1 高斯消去法1.1 基本思想及计算过程高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。
为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。
⎪⎩⎪⎨⎧=++II =++I =++III)(323034)(5253)(6432321321321x x x x x x x x x 把方程(I )乘(23-)后加到方程(II )上去,把方程(I )乘(24-)后加到方程(III )上去,即可消去方程(II )、(III )中的x 1,得同解方程组⎪⎩⎪⎨⎧=+-II -=-I =++III)(20223)(445.0)(64323232321x x x x x x x将方程(II )乘(5.03)后加于方程(III ),得同解方程组: ⎪⎩⎪⎨⎧-=-II -=-I =++III)(42)(445.0)(6432332321x x x x x x由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。
下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。
⎪⎪⎩⎪⎪⎨⎧=++++=++++=+++++++1,3322111,223232221211,11313212111n n n nn n n n n n n n n n a x a x a x a x a a x a x a x a x a a x a x a x a x a(1-1)如果a 11 ≠ 0,将第一个方程中x 1的系数化为1,得)1(1,1)1(12)1(121+=+++n n n a x a x a x其中)0(11)0()1(1aa aijj=, j = 1, …, n + 1(记ij ij a a =)0(,i = 1, 2, …, n ; j = 1, 2, …, n + 1)从其它n –1个方程中消x 1,使它变成如下形式⎪⎪⎩⎪⎪⎨⎧=++=++=++++++)1(1,)1(2)1(2)1(1,2)1(22)1(22)1(1,1)1(12)1(121n n n nn n n n n n n n a x a x a a x a x a a x a x a x(1-2)其中n i a m a aij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211)1(11+==n j a a m i i由方程(1-1)到(1-2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素。
23.02 高斯选主元素消去法(1)
4.3 列主元高斯 约当(Gauss –Jordan)消去法 3 列主元高斯—约当 约当( 假设G--J消去法已完成第1步~第k-1步,得到与原方程组等价 消去法已完成第1 假设 消去法已完成第 步 的方程组 A( k ) x = b ( k ) ,其中
(k 1 a 1k ) M O ( 1 a kk )1, n − = (k a kk ) M (k a nk ) (k a1n ) ( L a kk )1, n − , (k ) L a kn M (k ) L a nn
x1 + x2 = 0.9
m 21 = r 0.3 × 10−11 1 0.7 0.3 × 10 −11 消元: 消元: ( A, b) = 1 1 0.9 = 0.3333333333 × 10 12 0.3 × 10 −11 1 0. 7 → 12 − 0.2333333333× 1012 − 0.3333333333× 10 0
0.3 ×10−11 x1 + x2 = 0.7 x1 + x2 = 0.9 ⇔ 0.3 × 10−11 x1 + x2 = 0.7 x1 + x2 = 0.9 r 0.3 × 10−11 1 0.7 r ↔ r 1 1 0 .9 消元: 消元:( A, b ) = → 0.3 × 10 −11 1 0.7 1 1 0.9 1 1 0.9 0.3 × 10−11 → (m21 = = 0.3 × 10−11 ) 1 0 1 0.7 x 2 = 0.7000000000 。 计算解: 计算解: x1 = 0.2000000000
k
bk ←bk ⋅ mkk 上述过程完成后 , 即 k = 1, 2 , L , n , 均已完成 , 则 有
解线性方程组的列主元素高斯消去法和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
计算方法实验报告_列主元高斯消去法
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)中结果比较。
第四章 高斯消元法与选主元
其中 a ij 和 bi 的上标 k 表示第 k 次消元后的系数, 计算公式为 : 对 k = 1,,3, L , n − 1 2 ⎧ m ik = − a ik ( k −1) / a kk ( k −1) ⎪ (k ) ( k −1) ( k −1) + m ik a kj ⎨ a ij = a ij ⎪b ( k ) = b ( k −1) + m b ( k −1) i ik k ⎩ i i , j = k + 1, k + 2 ,..., n
(1) ( 2)
aij
( 2)
= aij + mi 2a2 j , bi
(1)
= bi + mi 2b2
(1)
(1)
i, j = 3,4,...,n
( k −1 ) ≠ 0 ,取 m ik 第k步: 设 a kk 个方程组的xk,i=k+1,k+2,…,n)
( a ikk − 1 ) = − ( k −1 ) a kk
i, j = k +1, k + 2,...,n
继续下去到第n-1步消元,可将线性方程组化为如下上三角方 程组: ⎫
a11 x1 + a12 x 2 + L + a1n x n = b1 ⎪ (1) (1) (1) a 22 x 2 + L + a 2 n x n = b2 ⎪ ⎬ L ⎪ ( n −1) ( n −1) ⎪ a nn x n = bn ⎭
高斯消元法与选主元
高斯消元法是一种古老的直接 法,由它改进得到的选主元消元法,是 目前计算机上常用于求解低阶稠密 矩阵方程组的有效方法,其特点就是 通过消元将一般线性方程组的求解 问题转化为三角方程组的求解问题
§7.3 Gauss主元素消去法
1 1 2 0 1 1
109 9 10
9 9 1 10 10 例: 2 1 1
1 0
109 109
注意:这两个方程组 在数学上严格等价。
x2 1 , x1 0
© 2009, Henan Polytechnic University §3 Gauss主元素消去法
1 2 1
1 2 0 1 1 1
© 2009, Henan Polytechnic University §3 Gauss主元素消去法
1515
第七章 解线性方程组的直接方法
1 0 0 . 8 0. 4 1 0 .5 0 .5 0 .5 0 1 0.6 0.2 0 2.5 1.5 0.5 1.2 0 0 0. 4 0 1 .5 0 .5 1 .5
用顺序Gauss消去法计算:
8个 a 22 1 l 21 1 0.0 ...01 10 9 10 9 10 9
l21 a21 / a11 109
10 9 1
b2 2 l21 1 109
1 1
1 1 1 10 9 9 9 2 0 10 10 小主元 可能导致计 算失败。 x2 1, x1 0
1919
4 4
© 2009, Henan Polytechnic University §3 Gauss主元素消去法
第七章 解线性方程组的直接方法
7.3.1 列主元消去法
第一步:从第一列中选出绝对值最大的元素作为
主元素:
a11 max ai 1
高斯消元法_实验报告
- - 华中科技大学数值分析实验报告系、年级研究生院2012级****类别硕士2013年5月6日实验6.1实验要求:根据教材实验6.1做出相应改编:分别使用Gauss 消元、列选主元。
全选主元的方法求解线性方程组,分别比拟三种消元方法的结果和算法的区别,并说明主元的选取在Gauss 消元的中的作用。
问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。
但由于计算机的数值运算是在一个有限的浮点数集合上进展的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。
主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。
一般来说书本上采用的列选主元的方法对其线性方程组进展求解的,则我们是否可以选择一种行列都选取主元消去的方法来减小相应的误差呢?全主元消元法和列主元消元法一样都是由高斯消元法演变而来。
只不过选取主元的*围有所加大。
全选主元相对于列选主元的更加复杂化了,因为在运算的过程中导致了元的位置发生了变化,这样我们就不得不追踪每个元的位置。
本次实验就几个问题进展了matlab 实验分析,比拟几种计算方法的优劣性。
实验内容:考虑线性方程组编制一个程序:分别能进展Gauss 消去、列选主元Gauss 消去、全选主元Gauss 消去法进展解线性方程组。
对三种算法所得到的结果进展比拟,分析三种计算方法的准确性。
具体内容:〔1〕取矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。
取n=10、n=20计算矩阵的条件数。
分别编写利用matlab 编写运算程序,实现Gauss消去、列选主元消去以及全选主元消去的方法。
比拟三种计算方法的运算结果。
在列选主元的过程中分别采用每步消去过程总选取按模最小或按模尽可能小的元素作为主元或每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
高斯列主元消去法
问题提出:采用高斯列主元消去法解线性方程组。
算法(公式)推导:高斯顺序消去法有一个最大的缺点就是一旦对角元素为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
部分主元消去法
部分主元消去法
部分主元消去法(Partialpivoting)是一种用于求解线性方程
组的数值方法。
它是高斯消元法的一种改进方法,能够有效地避免出现数值不稳定和误差的情况。
在高斯消元法中,我们通过矩阵消元的方式将方程组转化为上三角矩阵形式,然后通过回代求解得到方程组的解。
但是,在矩阵消元的过程中,如果某一行的主元(即该行系数中绝对值最大的数)为0,则会出现除数为0的情况,从而导致计算错误。
为了解决这个问题,部分主元消去法在每次消元前都会选取主元系数绝对值最大的那一行,并将其作为当前行进行操作。
这样可以保证每次消元时的主元都不为0,从而避免了除数为0的情况。
具体来说,部分主元消去法的步骤如下:
1. 选取第1列中主元系数绝对值最大的行,并将其作为第1行。
2. 通过第1行的主元将第2~n行中第1列系数消为0,得到一
个新的矩阵。
3. 选取第2列中主元系数绝对值最大的行,并将其作为第2行。
4. 通过第2行的主元将第3~n行中第2列系数消为0,得到一
个新的矩阵。
5. 重复以上步骤,直到得到一个上三角矩阵。
6. 通过回代求解得到方程组的解。
需要注意的是,部分主元消去法的计算复杂度与高斯消元法相同,为O(n^3)。
但是,在数值稳定性和误差控制方面,部分主元消去法
要优于高斯消元法。
总之,部分主元消去法是一种高效、稳定的求解线性方程组的方法,在实际应用中得到了广泛的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验内容
1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.
(1)
123
123
123
0.101 2.304 3.555 1.183
1.347 3.712 4.623
2.137
2.835 1.072 5.643
3.035
x x x
x x x
x x x
++=
⎧
⎪
-++=
⎨
⎪-++=
⎩
(2)
123
123
123
528
28321
361
x x x
x x x
x x x
++=
⎧
⎪
+-=
⎨
⎪--=
⎩
MATLAB计算源程序
1. 用高斯消元法解线性方程组b
AX=的MATLAB程序
输入的量:系数矩阵A和常系数向量b;
输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n 和有关方程组解X及其解的信息.
function [RA,RB,n,X]=gaus(A,b)
B=[A b]; n=length(b); RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('请注意:因为RA~=RB,所以此方程组无解.')
return
end
if RA==RB
if RA==n
disp('请注意:因为RA=RB=n,所以此方程组有唯一解.')
X=zeros(n,1); C=zeros(1,n+1);
for p= 1:n-1
for k=p+1:n
m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);
end
end
b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')
End
End
2.列主元消元法及其MATLAB程序
用列主元消元法解线性方程组b
AX=的MA TLAB程序
输入的量:系数矩阵A和常系数向量b;
输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个
数n和有关方程组解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>0,
disp('请注意:因为RA~=RB,所以此方程组无解.')
return
end
if RA==RB
if RA==n
disp('请注意:因为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,:);
B(p,:)= B(j+p-1,:); B(j+p-1,:)=C;
for k=p+1:n
m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);
end
end
b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('请注意:因为RA=RB<n,所以此方程组有无穷多解.') end
end
三.实验过程:
1(1)编写高斯消元法的MATLAB文件如下:
clear;
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];
[RA,RB,n,X] =gaus (A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
-0.3982
0.0138
0.3351
(2)编写高斯消元法MATLAB文件如下:
clear;
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;];
[RA,RB,n,X] =gaus (A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
1
2
-1
在MATLAB中利用逆矩阵法检验结果:
(1) 在command windows中直接运行命令:
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];X=A\b
运行结果为:
X =
-0.3982
0.0138
0.3351
(2) 在command windows中直接运行命令:
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;];X=A\b
运行结果为:
X =
1
2
-1
两小题所得结果相同,检验通过
2(1)编写列组高斯消元法MATLAB文件如下:
clear;
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];
[RA,RB,n,X] =liezhu(A,b)
运行结果:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
-0.3982
0.0138
0.3351
(2)编写列组高斯消元法的MATLAB文件如下:
clear;
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;]
[RA,RB,n,X] =liezhu(A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
1
2
-1
与题 1 中逆矩阵计算所得结果相同,检验通过。