用高斯消元法求解线性代数方程组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用高斯消元法求解线性代数方程组
12341115-413-2823113-21041513-21719x x x x ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 1111X *⎡⎤⎢⎥
⎢⎥=⎢⎥⎢⎥
⎣⎦
(X *是方程组的精确解)
1 高斯消去法
1。

1 基本思想及计算过程
高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解.
为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想.
⎪⎩⎪
⎨⎧=++II =++I =++III)
(323034)(5
253)(6
432321
321321x x x x x x x x x 把方程(I)乘(2
3-)后加到方程(II)上去,把方程(I)乘(2
4-)后加到方程(III )上去,即可消去方程(II)、
(III)中的x 1,得同解方程组
⎪⎩

⎨⎧=+-I I -=-I =++III)
(20
223)(445.0)(6
4323232321x x x x x x x
将方程(II)乘(
5
.03
)后加于方程(III ),得同解方程组: ⎪⎩

⎨⎧-=-I I -=-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(1a
a a
ij
j
=
, 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 a
ij i ij ij ,,2)1(1)1( =⋅-=,1,,3,211
)
1(1
1+==
n j a a m i i
由方程(1—1)到(1—2)的过程中,元素11a 起着重要的作用,特别地,把11a 称为主元素.
如果(1-2)中0)
1(22≠a ,则以)1(22a 为主元素,又可以把方程组(1-2)化为: ⎪⎪


⎪⎪⎪⎨⎧=++=++=+++=+++++++)2(1
,)2(3)2(3)
3(1,3)2(33)2(33)2(1,2)2(23)2(232)
1(1,1)1(12)1(121 n n n nn n n n n n n n n n n a x a x a a x a x a a x a x a x a x a x a x (1-3)
针对(1—3) 继续消元,重复同样的手段,第k 步所要加工的方程组是:
⎪⎪
⎪⎪
⎪⎩
⎪⎪

⎪⎪⎨⎧=++=++=+++=+++=++++-+---+---+-----++)
1(1,)1()1()
1(1,)1()1()
1(1,1)1()1(11)
2(1
,2)2(23)2(232)
1(1,1)1(13)1(132)1(121 k n n n k nn k k nk k n k n k nn k k kk k n k n k kn k k k k n n n n n n a x a x a a x a x a a x a x a x a x a x a x a x a x a x a x
设0)
1(≠-k kk a ,第k 步先使上述方程组中第k 个方程中x k 的系数化为1:
)
(1,)()(1,k n k n k kn k k k k k a x a x a x ++=++
然后再从其它(n — k )个方程中消x k ,消元公式为:
⎪⎪⎪
⎩⎪⎪⎪⎨⎧+=++=⋅-=++==----n
k i n k j a a a a n k k j a a a k kj
k ik k ij k ij k kk
k kj
k kj ,11,,11,,1,)
()1()1()()
1()
1()( (1—4)
按照上述步骤进行n 次后,将原方程组加工成下列形式:
⎪⎪
⎪⎩

⎪⎪⎨
⎧==+=+++=+++++-+---++)(1,)
1(1,1)1(1)
2(1
,2)2(23)2(232)
1(1,1)1(13)1(132)1(121 n n n n n n n n n nn n n n n n n n a x a x a x a x a x a x a x a x a x a x 回代公式为:
⎪⎩

⎨⎧-=-==∑+=++1
,,11
)
()
(1,)
(1
, n k x a a x a x n
k j j k kj
k n k k n n n
n (1-5)
综上所述,高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回
代过程求解。

由于计算时不涉及x i , i = 1, 2, …, n ,所以在存贮时可将方程组AX = b ,写成增广矩阵(A, b)存贮。

下面,我们统计一下高斯消去法的工作量;在(1—4)第一个式子中,每执行一次需要)(k n n --次除法,
在(1-5)第二个式子中,每执行一次需要)()]1([k n k n -⨯--次除法。

因此在消元过程中,共需要
[]
)12)(1(6
1
)1()1()()1(1
21++=
+-=+-+-⨯+-∑∑==n n n k n k n k n k n n
k n
k
次乘作法.此外,回代过程共有
)1(2
)(1
-=
-∑=n n
k n n
k 次乘法.汇总在一起,高斯消去法的计算量为:
3
3)13(3232n n n n n n -+=-+ 次乘除法。

1.2 基于VC 的C 语言程序
#include 〈stdio.h>
#define n 4 /*n 为方程组系数矩阵的阶数*/ int Gauss(float a [n ][n ],float b [n ]) {
int i ,j ,k,flag=1; float t;
用高斯消元法求解线性代数方程组 for(i=0;i<n-1;i++)
{
if(a[i][i]==0)

flag=0;
break;

else

for(j=i+1;j〈n;j++) /*消元过程*/
{
t=—a[j][i]/a[i][i];
b[j]=b[j]+t*b[i];
for(k=i;k<n;k++)
a[j][k]=a[j][k]+t*a[i][k];


}
return(flag);
}
void zg_matric(float a[n][n],float b[n]) /*输出增广矩阵*/
{
int i,j;
for(i=0;i〈n;i++)

for(j=0;j〈n;j++)
printf("%10f”,a[i][j]);
printf("%10f",b[i]);
printf("\n");
}
printf("\n");
}
void main()

static float a[n][n]={{11,1,5,-4},{-2,8,2,3},{3,-2,10,4},{1,3,-2,17}}; float b[n]={13,11,15,19};
float x[n]={0,0,0,0};
int i,j,flag;
zg_matric(a,b);
flag=Gauss(a,b);
zg_matric(a,b);
if(flag==0) /*无解*/
printf("Gauss method dose not run.");
else /*回带过程开始*/

x[n—1]=b[n—1]/a[n-1][n—1];
for(i=n—2;i〉=0;i--)

x[i]=b[i];
for(j=i+1;j〈n;j++)
x[i]=x[i]—a[i][j]*x[j];
x[i]=x[i]/a[i][i];
}
for(i=0;i〈n;i++) /*输出方程组的解*/
printf(”x%d=%11.7f\n”,i+1,x[i]);
}

1.3 运行结果图。

相关文档
最新文档