首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

C语言经典算法之逆阵:简单逆阵

C语言经典算法之逆阵:简单逆阵

# include "stdio.h"
# define M 3
void main ( )
{
float MAT[M][2*M];
float MAT1[M][M];
float t;
  inti,j,k,l;
/***********************************************/
   /*对矩阵进行初始化*/
for(i=0;i<M;i++)
   for(j=0;j<2*M;j++)
     MAT1[j]='\0';
for(i=0;i<M;i++)
    for(j=0;j<2*M;j++)
    MAT[j]='\0';
    /*MAT1矩阵赋初值  */
for(i=0;i<M;i++)
   for (j=0;j<M;j++)
     scanf("%f",&MAT1[j]);
  /*打印目标矩阵?*/
printf("原矩阵为:\n");
  for(i=0;i<M;i++)
    {
    for (j=0;j<M;j++)   
printf("%5.2f",MAT1[j]);
    printf("\n");
    }
/********************************************/
   /*MAT1矩阵进行扩展,MAT1矩阵添加单位阵,由M*M变成2M*2M矩阵  */
for(i=0;i<M;i++)
   for(j=0;j<2*M;j++)
     if (j<M)  MAT[j]=MAT1[j];
    else if (j==M+i)  MAT[j]=1;
  else MAT[j]=0;
   /*M矩阵进行变换,使得前半部分矩阵成为单位阵,则  */
   /*后半部分矩阵即为所求矩阵逆阵  */
for(i=0;i<M;i++)
   {
   /*对第i行进行归一化    */
    for (j=0;j<2*M;j++)
     for(k=i+1;k<M;k++)
MAT[j]=MAT[j]+MAT[k][j];
     t=MAT;
    for(j=i;j<2*M;j++)
MAT[j]=MAT[j]/t;
    /*对矩阵进行行变换,使得第i 列只有一个元素不为零,且为1*/
    for(k=0;k<M;k++)
if(k!=i)
  {
  t=MAT[k];
  for (l=i;l<2*M;l++)
  MAT[k][l]=MAT[k][l]-MAT[l]*t;
  }
    }
/*将后半部分矩阵即所求矩阵逆阵存入MAT2矩阵。*/
for(i=0;i<M;i++)
   {
   for(j=0;j<M;j++)
     MAT1[j]=MAT[j+M];
   printf("\n");
     
   }
/*********************************************/
   /*输出所求的逆阵*/
  printf("逆阵为:\n");
  for(i=0;i<M;i++)
   {
    for(j=0;j<M;j++)
    printf("%5.2f",MAT1[j]);
    printf("\n");
   }
}
返回列表