C语言矩阵求逆问题0
xnlzz2014.09.23浏览268次分享举报
#include
void main()
{
int N;
float a[10][10],b[10][20],c[10][10],t;
int i,j,m;
printf("Please input the degree of matrix N:\n");
scanf("%d",&N);
printf("Please input the matrix A of its determinant isn't 0(%ddegree):\n",N); //矩阵A的各元素存入二维数组a中。
for(i=0;i
for(j=0;j
scanf("%f",&a[i][j]);
//增广矩阵(A|E)存入二维数组b中
for(i=0;i
for(j=0;j
b[i][j]=a[i][j];
for(i=0;i
for(j=N;j<2*N;j++)
b[i][j]=0;
for(i=0;i
b[i][N+i]=1;
for(m=0;m
{
t=b[m][m];
i=m;
while(b[m][m]==0)
{
b[m][m]=b[i+1][m];
i++;
}
if(i>m)
{
b[i][m]=t;
for(j=0;j
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}
for(j=m+1;j<2*N;j++)
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}
}
for(i=m+1;i
for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j]/b[m][m];
for(j=2*N-1;j>=m;j--)
b[m][j]/=b[m][m];
}
printf("The first steped augment matrix is:\n");
for(i=0;i
{
for(j=0;j<2*N;j++)
printf("%3.5f ",b[i][j]);
printf("\n");
}
m=N-1;
while(m>0)
{
for(i=0;i
for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j];
m--;
}
printf("The Final augment matrix is:\n");
for(i=0;i
{
for(j=0;j<2*N;j++)
printf("%3.5f ",b[i][j]);
printf("\n");
}
for(i=0;i
for(j=0;j
c[i][j]=b[i][N+j];
printf("The inverse matrix is:\n");
for(i=0;i
{
for(j=0;j
printf("%3.5f ",c[i][j]);
printf("\n");
}
}