台湾冬天去哪里玩:用c语言写的列主元消去法出错了

来源:百度文库 编辑:神马品牌网 时间:2024/05/09 20:54:52
#include <stdio.h>
main()
{
float A[4][4],B[4][5],s=0;
int i,j,m,k;
float max,t;
printf("请输入系数矩阵:\n");
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
{scanf("%f",&A[i][j]);
}
}
printf("请输入增广矩阵:\n");
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
{scanf("%f",&B[i][j]);
}
}
for(j=0;j<3;j++) /*一共有四行,要选取3个主元*/
{max=B[j][j];
for(i=j+1;i<4;i++)
{if(B[i][j]>max) /*以j来表示主对角线上的元素的坐标*
{max=B[i][j];m=i;}
}
if(max==0)
printf("矩阵是奇异矩阵");
else
{for(k=0;k<5;k++)
{t=B[j][k];B[j][k]=B[m][k];
B[m][k]=t;} /*求主元*/
}
for(i=j+1;i<4;i++)
for(k=j;k<5;k++)
B[i][k]=B[i][k]-B[j][k]*(B[i][j]/max);/*消去主元所在行下面的元素*/
}
printf("最终矩阵为:\n");
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
printf("%f",B[i][j]);
printf("\n");
}
getchar();
}
这个题目是要解决高斯消去法的一个特例,即列主元消去法,它找矩阵中每一列最大的,然后将它作为主元,将矩阵最终变成上三角的形式,但编译后发现,虽然矩阵变成了上三角的形式,但其他的元素在消元的过程中却没有发生改变,我怀疑这与浮点数的除法有关,请高手帮忙啊。