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

📄 inv.cpp

📁 对矩阵求逆
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
double *C,a[100];
double   *MatrixInver(double   A[],int   n)             //矩阵转置
        {
          int   i,j;
          double   *B=NULL;
          B=(double   *)malloc(n*n*sizeof(double));
       
          for(i=0;i <n;i++)
          for(j=0;j <n;j++)
          B[i*n+j]=A[j*n+i];
          return   B;
        }
double   Surplus(double   A[],int   n)                   //求矩阵行列式
        {
          int   i,j,k,p,r;
          double   X,temp=1,temp1=1,s=0,s1=0;
          if(n==2)
          {for(i=0;i <n;i++)
          for(j=0;j <n;j++)
          if((i+j)%2)   temp1*=A[i*n+j];
          else   temp*=A[i*n+j];
          X=temp-temp1;}
          else{
          for(k=0;k <n;k++)
          {for(i=0,j=k;i <n,j <n;i++,j++)
          temp*=A[i*n+j];
          if(n-i)
          {for(p=n-i,r=n-1;p> 0;p--,r--)
          temp*=A[r*n+p-1];}
          s+=temp;
          temp=1;
          }
          for(k=n-1;k>=0;k--)
          {for(i=0,j=k;i<n,j>=0;i++,j--)
          temp1*=A[i*n+j];
          if(n-i)
          {for(p=n-1,r=i;r <n;p--,r++)
          temp1*=A[r*n+p];}
          s1+=temp1;
          temp1=1;
          }
          X=s-s1;}
          return   X;
        }
double   *MatrixOpp(double   A[],int   n)               //矩阵求逆
        {
          int   i,j,x,y,k;
          double   *SP=NULL,*AB=NULL,*B=NULL,X;                  //*C;
          SP=(double   *)malloc(n*n*sizeof(double));
          AB=(double   *)malloc(n*n*sizeof(double));
          B=(double   *)malloc(n*n*sizeof(double));
          X=Surplus(A,n);
          X=1/X;
          for(i=0;i<n;i++)                               //求矩阵伴随矩阵
          for(j=0;j<n;j++)
          {
     for(k=0;k<n*n;k++)
              B[k]=A[k];                                 //B[]变成A[];
     {
     for(x=0;x<n;x++)
                  B[i*n+x]=0;
              for(y=0;y<n;y++)
                  B[n*y+j]=0;
          B[i*n+j]=1;
          SP[i*n+j]=Surplus(B,n);
          AB[i*n+j]=X*SP[i*n+j];
          }
          }
          C=MatrixInver(AB,n);                         //MatrixInver  求倒置
          return   C;
        }

int main()
{
 int n,i;
 while(scanf("%d",&n)!=EOF)                               //求m*n阶矩阵的逆运算
 {
  for(i=0;i<n*n;i++)
    scanf("%lf",&a[i]);//printf("%lf\n",Surplus(a,m,n));           //输出行列式
     MatrixOpp(a,n);
  for(i=0;i<n*n;i++)
  {
   printf("%.5f ",C[i]);
   if(!((i+1)%n))
    printf("\n");
  }
 }
 return 0;
}

⌨️ 快捷键说明

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