Gauss列主元法C语言编程实现
Gauss列主元法的C语言编程实现
用高斯列主元消去法解线性方程组Ax=b。编程思路:在消元之前,在剩余的元素中选取绝对值最大的为主元,并将其换到主元的位置,以防止出现小数被大数吃掉的现象。然后再将矩阵化为三角矩阵,按照高斯消去法进行计算,最后进行回代求解。
高斯列主元法程序代码如下:
#include#includevoid main(){float array[4][5], x, s; //定义二维数组和浮点变量//int i, j, m, k; //定义整型变量//printf("please input coefficient matrix array:\n"); //输入增广矩阵array//for(i=0; i<4; i++){for(j=0; j<5; j++){scanf("%f", &array[i][j]); //输入一个4*5阶矩阵//}printf("\n");}for(i=0; i<4; i++) //输出输入的矩阵//{for(j=0; j<5; j++){printf("%8.4f",array[i][j]);}printf("\n");}printf("\n\n\n\n\n\n");for(k=0;k<=3;k++) //在相应的列中选主元//{m = k;for(i=k+1;i<=3;i++){x = fabs(array[m][k]);if(fabs(array[i][k] > x))m = i;}printf("%d\n\n\n\n",m);if(array[m][k]==0){printf("ERROR");return;}else //两行进行比较交换两行//{for(j=k;j<=4;j++){x = array[k][j];array[k][j] = array[m][j];array[m][j] = x;
}for(i=0;i<4;i++){for(j=0;j<5;j++){printf("%8.4f ",array[i][j]);}printf("\n");}printf("\n\n\n\n\n\n");for(i=k+1;i<=3;i++){s = array[i][k]/array[k][k]; //消元过程//for(j=0;j<=4;j++){array[i][j] = array[i][j] - s * array[k][j];}
}}}for(i=0;i<4;i++) //输出变换后的矩阵//{for(j=0;j<5;j++){printf("%8.4f", array[i][j]);}printf("\n");}array[3][4] = array[3][4]/array[3][3]; //回代过程//for(i=2;i>=0;i--){x = 0;for(j=i+1;j<4;j++){x = x + array[i][j] * array[j][4];}array[i][4]=(array[i][4] - x) / array[i][i];} printf("x1 = %f", array[0][4]); //输出结果//printf("\n");printf("x2 = %f", array[1][4]);printf("\n");printf("x3