⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcjzqn.c

📁 在Turbo C环境下开发
💻 C
字号:
#define M 20
#include "stdio.h"
/******************************************************************************************/
void inpmat(double sm[M][M],int n)  /*输入函数*/
{
int i,j;
double tmpi;
printf("Input elements of matrix:\n");
for(i=0;i<n;i++)
  for(j=i;j<n;j++)
    {if(i==j)
      {printf("a%d%d=",i+1,i+1);
       scanf("%lf",&tmpi);
       sm[i][i]=tmpi;
       }
     else
      {printf("a%d%d=a%d%d=",i+1,j+1,j+1,i+1);
       scanf("%lf",&tmpi);
       sm[i][j]=tmpi,sm[j][i]=tmpi;
       }
     }
/*for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  {printf("a%d%d=",i+1,j+1);
    scanf("%lf",&tmpi);
    sm[i][j]=tmpi;
   }
*/
}
/******************************************************************************************/
void ouptsm(double sm[M][M],int n)  /*输出原矩阵*/
{
int i,j;
printf("The original matrix is:\n");
for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
    {printf("a%d%d=%.4E\t",i+1,j+1, sm[i][j]);
//     if(n>5)delay(500);
     }
   printf("\n");
  }
}
/******************************************************************************************/
double valdet(double mtx[M][M],int n)  /*求行列式值*/
{
int i,j,cgi,cgj,r,chgop;
double temp,detv;
chgop=0;
if(mtx[0][0]==0)
  {chgop=chgop+1;
   for(cgj=1;cgj<n;cgj++)
    {if(mtx[0][cgj]!=0)
      {for(cgi=0;cgi<n;cgi++)
         temp=mtx[cgi][0],mtx[cgi][0]=mtx[cgi][cgj],mtx[cgi][cgj]=temp;
      }
    }
  }
for(r=0;r<n-1;r++)
  {for(i=r+1;i<n;i++)
    {for(j=n;j>=r;j--)
       mtx[i][j]=mtx[i][j]-mtx[i][r]/mtx[r][r]*mtx[r][j];
     if(mtx[r+1][r+1]==0)
       {chgop=chgop+1;
        for(cgj=r+1;cgj<n;cgj++)
         {if(mtx[r+1][cgj]!=0)
	   {for(cgi=0;cgi<n;cgi++)
	      temp=mtx[cgi][r+1],mtx[cgi][r+1]=mtx[cgi][cgj],mtx[cgi][cgj]=temp;
            }
	 }
       }
     }
   }
if(chgop%2!=0)mtx[n-1][n-1]=mtx[n-1][n-1]*-1;
detv=1;
for(r=0;r<n;r++)
  detv=detv*mtx[r][r];
if(detv==0)detv=0;
return(detv);
}
/******************************************************************************************/
void juzeni(double tm[M][M],double dm[M][M],int n)  /*求出代数余子式和逆矩阵*/
{
int fij,fi,fj,ti,tj,i,j;
double tp[M][M],rank;
ti=0,tj=0;
for(i=0;i<n;i++)
  for(j=0;j<n;j++)
    tp[i][j]=tm[i][j];
rank=valdet(tp,n);
printf("The outcome of elementary transform of determinant is:\n");
for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
     printf("a%d%d=%.4E\t",i+1,j+1,tp[i][j]);
   printf("\n");
  }
printf("The value of the determinant of the matrix is:\t%.4E\n",rank);
for(fi=0;fi<n;fi++)
  for(fj=0;fj<n;fj++)
    {for(i=0;i<n;i++)
     if(i!=fi)
      {for(j=0;j<n;j++)
        {if(j!=fj)
          {tp[ti][tj]=tm[i][j];tj++;}
         }
       tj=0;
       ti++;
       }
     ti=0;
     fij=fi+fj;
     dm[fj][fi]=valdet(tp,n-1);
     if(fij%2!=0)
       dm[fj][fi]=dm[fj][fi]*(-1)/rank;
     else
       dm[fj][fi]=dm[fj][fi]/rank;
     }
}
/******************************************************************************************/
void pdzdjz(double tm[M][M],int n)  /*正定矩阵判定*/
{
int i,j,rank;
double tp[M][M],hlsz;
printf("\tPrimary child determinants calculation\n");
for(rank=1;rank<=n;rank++)
  {for(i=0;i<rank;i++)
     for(j=0;j<rank;j++)
       tp[i][j]=tm[i][j];
   hlsz=valdet(tp,rank);
   if(hlsz<=0)
     {for(i=0;i<rank;i++)
       {for(j=0;j<rank;j++)
         printf("a%d%d=%.4E\t",i+1,j+1,tm[i][j]);
        printf("\n");
//        if(n>5)delay(500);
       }
      printf("The value of %d rank of determinant is:\t%.4E\n",rank,hlsz);
      goto labelout;
     }
   else
      printf("The value of %d rank of determinant is:\t%.4E\n",rank,hlsz);
  }
labelout:
if(rank>n)
  printf("\tThis is a definite angle shot matrix.\n");
else
  printf("The value of this rank of primary child determinant is not over 0.\n\tSo this matrix is not a definite angle shot matrix.\n");
}
/******************************************************************************************/
void jzxchn(double sm[M][M],double dm[M][M],int n)  /*原逆矩阵相乘检验结果*/
{
int i,j,k;
double tm[M][M],acc;
for(i=0;i<n;i++)
  for(j=0;j<n;j++)
    {tm[i][j]=0;
     for(k=0;k<n;k++)
      {acc=sm[i][k]*dm[k][j];
       tm[i][j]=tm[i][j]+acc;
      }
    }
printf("The product of original matrix and negative matrix is:\n");
for(i=0;i<n;i++)
  {for(j=0;j<n;j++)
     printf("a%d%d=%.4E\t",i+1,j+1,tm[i][j]);
   printf("\n");
  }
}
/******************************************************************************************/
main()  /*主函数*/
{
int i,j,n;
double sm[M][M],dm[M][M],tm[M][M],detv;
printf("**********************************BEGIN**********************************\n");
n=0;
while(n<=0||n>20)
 {printf("Input rank of matrix(0<n<20):");
  scanf("%d",&n);
 }
inpmat(sm,n);/*输入矩阵*/
ouptsm(sm,n); /*输出原矩阵*/
printf("Press any key to continue...");
getchar();
getchar();
for(i=0;i<n;i++)
  for(j=0;j<n;j++)
    tm[i][j]=sm[i][j];
pdzdjz(tm,n); /*正定矩阵判定*/
printf("Press any key to continue...");
getchar();
juzeni(tm,dm,n);/*求出逆矩阵*/
printf("The negative matrix is:\n");
for(i=0;i<n;i++)
 {for(j=0;j<n;j++)
   {printf("a%d%d=%.4E\t",i+1,j+1,dm[i][j]);
//    if(n>5)delay(500);
    }
  printf("\n");
}
printf("Press any key to continue...");
getchar();
jzxchn(sm,dm,n);/*逆矩阵与原矩阵相乘判断结果*/
printf("-----------------------------------END-----------------------------------\n Press any key to exit.");
getchar();
return (0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -