高斯列主元消去法解线性方程组的实现
1 2 1
2 2 2
-1 -3 0 x1 x2 x3 0 = 3 2 高斯列主元消去法解线性方程组的实现 班级 学号 姓名榴莲 一、实验任务 采用高斯列主元消去法求解线性方程组,以下消解方程为例。
二、编程环境 Windows7,Codeblock. 三、算法步骤
加减这两种运算手续,逐步减少方程组中变元的数目,最终使某个方程只含有一
个变元,从而得出所求的解。对于,Gauss 消去法的求解思路为:
(1) 若,先让第一个方程组保持不变,利用它消去其余方程组中的,使之变成
一个关于变元的 n-1 阶方程组。
(2) 按照(1)中的思路继续运算得到更为低阶的方程
组。(3) 经过 n-1 步的消元后,得到一个三角方程。 (4) 利用求解公式回代得到线性方程组的解。
Gauss 消去法的基本思想是,通过将一个方程乘或除某个数以及两个方程相
四、程序流程图
数据结构:
五、程序
#include
#include
void guess(double a[][10],double b[],double x[],int n) {
int k,i,j;
for(k=0; k
{ double ma =
a[k][k]; int tab = k;
for(i=k+1; i
if(fabs(ma)
{ ma = a[i][k];
tab = i;
}
}
double mid; mid
= b[k]; b[k] =
b[tab]; b[tab] =
mid; for(i=k; i
i++) {
mid = a[k][i];
a[k][i] = a[tab][i];
a[tab][i] = mid;
}
for(i=k+1; i
a[i][k]/a[k][k]* b[k];
for(j=k+1; j
a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];
}
a[i][k]=0;
}
}
for(k=n-1; k>=0; k--)
{ double s =0;
for(j=k+1; j
x[k]=(b[k]-s)/a[k][k];
}
}
int main()
{ int i,j;
double a[10][10] = {{1,2,1},{2,2,3},{-1,-3,0}};
double b[10] = {0,3,2};
double x[10];
int k,n=3;
guess(a,b,x,n);
printf("三角化矩阵 A:\n");
for(i=0; i
for(j=0; j
{ printf("%7.2lf",a[i][j]);
}
printf("\n");
}
printf("\n 方程数值 b:\n");
for(i=0; i
printf("\n");
printf("\n 求得的函数值 x:\n");
for(i=0; i
printf("\n");
}
六、实验结果及分析
高斯消去法由消元和回代两个过程组成。消元就是对增广矩阵做有限次的初等行变换,使它的系数矩阵部分变为一个上三角矩阵。用一个数乘某一行加到另一行上。经过 n-1 次消元后,原增广矩阵变为行阶梯矩阵,然后就可以求的 x 值。
七、心得体会
通过这次数值分析实验,使我加深了对 Gauss 消去求解线性方程组的理解,
掌握了利用各种方法进行 Gauss 消元解线性方程组。我相信,在我以后的学习生