# include "stdio.h"
# define M 3
void main ( )
{
float MAT[M][2*M];
float MAT1[M][M];
float t;
int i,j,k,l;
/***********************************************/
/*对矩阵进行初始化*/
for(i=0;i
MAT1[j]='\0';
for(i=0;i
MAT[j]='\0';
/*对MAT1矩阵赋初值 */
for(i=0;i
/*打印目标矩阵?*/
printf("原矩阵为:\n");
for (i=0;i
for (j=0;j
printf("\n");
}
/********************************************/
/*对MAT1矩阵进行扩展,MAT1矩阵添加单位阵,由M*M变成2M*2M矩阵 */
for(i=0;i
if (j
else MAT[j]=0;
/*对M矩阵进行变换,使得前半部分矩阵成为单位阵,则 */
/*后半部分矩阵即为所求矩阵逆阵 */
for(i=0;i
/*对第i行进行归一化 */
for (j=0;j<2*M;j++)
for(k=i+1;k
t=MAT;
for(j=i;j<2*M;j++)
MAT[j]=MAT[j]/t;
/*对矩阵进行行变换,使得第i 列只有一个元素不为零,且为1*/
for(k=0;k
{
t=MAT[k];
for (l=i;l<2*M;l++)
MAT[k][l]=MAT[k][l]-MAT[l]*t;
}
}
/*将后半部分矩阵即所求矩阵逆阵存入MAT2矩阵。*/
for(i=0;i
for(j=0;j
printf("\n");
}
/*********************************************/
/*输出所求的逆阵*/
printf("逆阵为:\n");
for(i=0;i
for(j=0;j
printf("\n");
}
}
[楼 主] From:局域网 | Posted:2007-10-08 00:11|
情有独中
级别: 论坛版主
精华: 0
发帖: 8
威望: 8 点
金钱: 36 RMB
在线时间:0(小时)
注册时间:2007-10-08
最后登陆:2007-10-07
--------------------------------------------------------------------------------
#define N 5 /*[注]:修改6为你所要的矩阵阶数*/
#include "stdio.h"
#include "conio.h"
/*js()函数用于计算行列式,通过递归算法实现*/
int js(s,n)
int s[][N],n;
{int z,j,k,r,total=0;
int b[N][N];/*b[N][N]用于存放,在矩阵s[N][N]中元素s[0]的余子式*/
if(n>2) {for(z=0;z
else b[j][k]=s[j+1][k];
if(z%2==0) r=s[0][z]*js(b,n-1); /*递归调用*/
else r=(-1)*s[0][z]*js(b,n-1);
total=total+r;
}
}
else if(n==2) total=s[0][0]*s[1][1]-s[0][1]*s[1][0];
return total;
}
/*n_1()函数用于求原矩阵各元素对应的余子式,存放在数组b[N][N]中,定义为float型*/
void n_1(s,b,n)
int s[][N],n;
float b[][N];
{int z,j,k,l,m,g,a[N][N];
for(z=0;z
for(j=0;j
for (k=0;k
else a[k][g]=s[k][g];
}
b[z][j]=js(a,n-1);
}
}
}
main()
{int a[N][N];
float b[N][N];
int r,z,j;
float temp;
//clrscr();
printf("Input original data:\n");
for(z=0;z
printf("\nPress Enter continue......");
getchar();
//gotoxy(1,1);
printf("The original matrix is:\n");
for(z=0;z
printf("\n");
}
r=js(a,N); /*调用js()函数计算原矩阵的行列式值*/
printf("\nThe original matrix hanglieshi is:|A|==%d\n",r);
if (r==0) printf("Because |A|==0,the original matrix have no nijuzhen!"); /*判断条件:若|A|==0,则原矩阵无逆矩阵,反之则存在逆矩阵*/
else
{n_1(a,b,N); /*调用n_1()函数,得到原矩阵各元素对应的"余子式",存放在数组b[N][N]中*/
for(z=0;z
for(z=0;z
b[z][j]=b[j][z];
b[j][z]=temp;
}
printf("Because |A|!=0,the original matrix have nijuzhen!\n");
printf("The bansuijuzhen A* is:\n");
for(z=0;z
printf("\n");
}
for(z=0;z
printf("\nThe nijuzhen is:(A*)/|A|(|A|=%d)\n",r); /*打印逆矩阵*/
for(z=0;z
printf("\n");
}
}
}