- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用高斯消元法求解线的性代数方程组
用高斯消元法求解线性代数方程组
(X*是方程组的精确解)
1 高斯消去法高斯(Gauss)消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。 为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。
把方程(I)乘()后加到方程(II)上去,把方程(I)乘()后加到方程(III)上去,即可消去方程(II)、(III)中的x1,得同解方程组
将方程(II)乘()后加于方程(III),得同解方程组:
由回代公式(3.5)得x3 = 2x2 = 8,x1 = -13。
下面考察一般形式的线性方程组的解法,为叙述问题方便,将bi写成ai, n+1,i = 1, 2,…,n。
()
如果a11 1 0,将第一个方程中x1的系数化为1,得
其中 j = 1, …, n + 1(记i = 1, 2, …, n; j = 1, 2, …, n + 1)
从其它n –1个方程中消x1,使它变成如下形式
()
其中
由方程()到()的过程中,元素起着重要的作用,特别地,把称为主元素。
如果()中,则以为主元素,又可以把方程组()化为:
()
针对() 继续消元,重复同样的手段,第k步所要加工的方程组是:
设,第k步先使上述方程组中第k个方程中xk的系数化为1:
然后再从其它(n - k)个方程中消xk,消元公式为:
()
按照上述步骤进行n次后,将原方程组加工成下列形式:
回代公式为:
()
综上所述,高斯消去法分为消元过程与回代过程,消元过程将所给方程组加工成上三角形方程组,再经回代过程求解。
由于计算时不涉及xi, i = 1, 2, …, n,所以在存贮时可将方程组AX = b,写成增广矩阵(A, b)存贮。
下面,我们统计一下高斯消去法的工作量;在()第一个式子中,每执行一次需要次除法,在()第二个式子中,每执行一次需要次除法。因此在消元过程中,共需要
次乘作法。此外,回代过程共有
次乘法。汇总在一起,高斯消去法的计算量为:
次乘除法。#includestdio.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;in-1;i++)
{
if(a[i][i]==0)
{
flag=0;
break;
}
else
{
for(j=i+1;jn;j++) /*消元过程*/
{
t=-a[j][i]/a[i][i];
b[j]=b[j]+t*b[i];
for(k=i;kn;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;in;i++)
{
for(j=0;jn;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;jn;j++)
x[i]=x[i]-a[i][j]*x[j];
x[i]=x
文档评论(0)