实验一 列主元素高斯消去法

  • 格式:doc
  • 大小:39.00 KB
  • 文档页数:4

实验一 高斯消去法
一、实验目的
(1)掌握高斯消去法的基本思路和迭代步骤;
(2)培养编程与上机调试能力。

二、实现功能
本程序采用GAUSS列主元消去法求解线性方程组。
AX=b.
其中A为N阶矩阵,X,b均为N围列向量。

三、算法描述
高斯消去法基本思路设有方程组Ax=b,设A是可逆矩阵。高斯消去法的基本思想就是
将矩阵的初等行变换作用于方程组的增广矩阵B[Ab],将其中的A变换成一个上三角
矩阵,然后求解这个三角形方程组。

四、实验内容
X1-0.5*X2+1.5*X3=0.5
X2-0.25*X3=0.5
X3=-6

五、实验步骤
(1) 写出增广矩阵A;
(2) 选主元;
(3) 判断是否奇异;
(4) 交换对应行元素;
(5) 消元;
(6) 回代,计算出X[1], X[2], X[3].

六、代码

# include
# include
# define delta 1e-6
#define N 100
void main()
{
int i,j,t,r,n,u,c=0;
float p,L,max,s;
float X[N];
float a[N][N+1];
printf("请输入方程的阶数\n"); scanf("%d",&n);
printf("输入的原方程系数,中间用空格隔开\n"); for(i=0;ifor(j=0;jscanf("%f",&a[i][j]);
printf("方程系数为\n");
for(i=0;i{
for(j=0;j{
printf("%.2f ",a[i][j]);
if(j==n) {printf("\n");}
}
}
for(j=0;j{
{
max=fabs(a[j][j]);
r=j;
}
for(i=j+1;iif(fabs(a[i][j])>max)
{
max=a[i][j];
r=i;
}
if(fabs(a[i][j])printf("矩阵奇异");
for(t=j;t{
} p=a[j][t]; a[j][t]=a[r][t]; a[r][t]=p; } for(i=j+1;ifor(t=j;t

printf("输出原方程的解为:\n");
X[n-1]=a[n-1][n]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
s=a[i][n];
for(j=i+1;js=s-a[i][j]*X[j];
X[i]=s/a[i][i];
}
for(u=0;ufor(j=0;j{
printf("%12f",a[u][j]); c++;
if(c%(n+1)==0) printf("\n");
}
for(i=0;i{
printf("x(%d)=%.4f\n",i+1,X[i]); if(i==n-1)
printf("\n");
}
}
七、实验结果

八、实验体会
经过这次的实验,我首先能掌握了高斯消去法的基本思路和迭代步骤,从理
论的角度更好的理解算法,其次通过自己把算法改写为代码,并通过和同学的讨
论研究,更加了解Gauss列主元素消去法的实质,不仅锻炼了我理解和应用该算
法,还使得程序的编写更加熟悉,后面的内容中我要继续认真学习。