用C语言进行列主元素高斯消元法,遇到问题

本来应该是增广矩阵做相应变换,但是一直找不到问题,就是在计算m(行与行相减的系数)之后,这个m值会莫名其妙的赋给矩阵(二维数组a[N][N])的a[0][0],如果用增广矩阵的话,会被赋给b[0],详细麻烦看代码,谢谢了。。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define N 3
int main()
{
double a[N][N]={{0.012,0.01,0.167},{1,0.8334,5.91},{3200,1200,4.2}};
double m[N-1][N-1]={{0,0},{0,0}};
double temp;
int i,j,k,l;
int maxline=0,change=0;
for(i=0;i<N;i++) //显示系数矩阵
{
for(j=0;j<N;j++)
{
printf("%lf\t",a[i][j]);
}
printf("\n");
}
//以下为算法
for(k=0;k<N-1;k++) //k为算法执行步骤数
{
//选行号,确定列主元
for(i=k,j=k;i<N;i++)
{
for(l=i+1;l<N;l++)
{
if(a[i][j]<a[l][j])
{
maxline=l;
change=1;
}
}
}
//将主元交换到相应位置
if(change==1)
{
for(j=k;j<N;j++)
{
temp=a[k][j];
a[k][j]=a[maxline][j];
a[maxline][j]=temp;
}
}
change=0;//清空标志位
printf("\n\n选主元\n\n"); //再显示一下
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%lf\t",a[i][j]);
}
printf("\n");
}
//计算m值,并进行高斯消去
for(i=k+1;i<N;i++)
{
m[i][k]=a[i][k]/a[k][k];
for(j=0;j<N;j++)
{
temp=a[i][j];
a[i][j]=temp-m[i][k]*a[k][j];
}
}
printf("\n\n消去\n\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%lf\t",a[i][j]);
}
printf("\n");
}
}
return 0;
}

for(i=k+1;i<N;i++)
{
m[i-1][k]=a[i][k]/a[k][k]; //这里m的坐标应该是[i-1][k],如果是[i][k]会造成越界
for(j=0;j<N;j++)
{
temp=a[i][j];
a[i][j]=temp-m[i-1][k]*a[k][j]; //这里也一样
}
}

m是2X2的数组,而a是3X3的数据,即a[1][0]与a[0][0]的比值应存在m[0][0]中!

希望可以帮到你!
温馨提示:答案为网友推荐,仅供参考
相似回答