#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;
}
本程序主要實現了一個方陣的求逆與實現了逆矩陣和原矩陣的乘積爲單位矩陣
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.