#include<stdio.h>
#define M 10
int main()
{
void chengji(int n);
float a[M][M*2];
float b[M][M*2];
float c[M][M*2];
float d[M][M];//存储原矩阵
float t,x;
int k,T,i,j,n;
printf("输入方阵的维数(小于M):\n"); //请输入方阵,即行和列相等的矩阵。
scanf("%d",&T);
n=T;
printf("请输入矩阵:\n");
for(i=0; i<T; i++)
for (j=0; j<T; j++)
{
scanf("%f",&b[i][j]);
d[i][j]=b[i][j];
}
printf("原矩阵为:\n");
for (i=0; i<T; i++)
{
for (j=0; j<T; j++) printf("%10.3f",b[i][j]);
printf("\n");
}
for(i=0; i<T; i++) for(j=0; j<(2*T); j++)
{
if(j<T) a[i][j]=b[i][j];
else if (j==T+i) a[i][j]=1.0;
else a[i][j]=0.0;
}
for(i=0; i<T; i++)
{
for(k=0; k<T; k++)
{
if(k!=i)
{
t=a[k][i]/a[i][i];
for(j=0; j<(2*T); j++)
{
x=a[i][j]*t;
a[k][j]=a[k][j]-x;
}
}
}
}
for(i=0; i<T; i++)
{
t=a[i][i];
for(j=0; j<(2*T); j++) a[i][j]=a[i][j]/t;
}
int y=1;
for(i=0; i<T; i++) y=y*a[i][i];
if(y==0)
printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。\n");
else
{
for(i=0; i<T; i++)
for(j=0; j<T; j++) b[i][j]=a[i][j+T];
printf("逆矩阵为:\n");
for (i=0; i<T; i++)
{
for (j=0; j<T; j++)
printf("%10.3f",b[i][j]);
printf("\n");
}
}
printf("原方阵与逆方阵的积:\n");
k=0;
//int l=0;
//int i,j;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
c[i][j]=0;
for(k=0; k<n; k++)
{
c[i][j]+=d[i][k]*b[k][j];
//printf("%g ",c[i][j]);
}
}
}
for (i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%g ",c[i][j]);
}
puts("");
}
puts(" ");
return 0;
}
本程序主要实现了一个方阵的求逆与实现了逆矩阵和原矩阵的乘积为单位矩阵
最新推荐文章于 2022-04-05 11:16:34 发布