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

📄 matrixcalculation.c

📁 线性代数之伴随矩阵计算C语言实现 伴随矩阵定义:把矩阵所有位置上的元素替换为元素的代数余子式
💻 C
字号:
#define N 3

void initial(int a[N][N])
{
    int i,j;
    for(i=0;i<N;i++)
 for(j=0;j<N;j++)
     a[i][j]=N*i+j+1;
}

void init(int arr[])
{  /* to initiate the array*/
  int i;
  for(i=0;i<N-1;i++)
    arr[i]=i;
}

void sort(int arr[],int start)
{ /*to resort the array from the position 'start' to end*/
   int i,j;
   for(i=start;i<N-1;i++)
     for(j=start;j<N-2;j++)
       if(arr[j]>arr[j+1])
       {
         int t=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=t;
       }
}

int next(int arr[])
{  /* to produce the next arrangemeng*/
  int i,j;
  int temp;
  for(i=N-3;i>=0;i--)
    if(arr[i]<arr[i+1])
      break;
  for(j=N-2;j>i;j--)
    if(arr[j]>arr[i])
      break;
  if(i<0||j<0)
    return;
  temp=arr[i];
  arr[i]=arr[j];
  arr[j]=temp;
  sort(arr,i+1);
}

long jiecheng(int n)
{ /* to compute n!=n*(n-1)*(n-2)....*2*1 */
  long result=1;
  while(n>0)
    result*=n--;
  return result;
}

int nixu(int a[])
{
    int i,j;
    int n=0;
    for(i=0;i<N-2;i++)
      for(j=i+1;j<N-1;j++)
         if(a[i]>a[j])
            n++;
    return n;
}

long hanglie(int b[N-1][N-1])
{
  int array[N-1];
  int count;
  int i,j,k;
  long result=0,t=1;
  init(array);
  k=jiecheng(N-1);
  for(count=0;count<k;count++)
  {
    t=1;
    for(i=0;i<N-1;i++)
    {
      j=array[i];
      t=t*b[i][j];
    }
    if(nixu(array)%2==1)
       result+=-t;
    else
       result+=t;
    next(array);
  }
  return result;
}

void child(int a[N][N],int m,int n,int b[N-1][N-1])
{
    int i,j,row,col;
    row=0;
    for(i=0;i<N;i++)
    {
        if(i==m)
          continue;
       col=0;
       for(j=0;j<N;j++)
          if(j!=n)
             b[row][col++]=a[i][j];
       row++;
    }
}


void bansui(int a[N][N],long c[N][N])
{
    int b[N-1][N-1];
    int i,j;
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
     {
            child(a,i,j,b);
           if((i+j)%2==1)
                c[i][j]=-hanglie(b);
           else
                c[i][j]=hanglie(b);
  }
}

void main()
{
    int a[N][N];
    long c[N][N];
    int i,j,m,n;
    clrscr();
    initial(a);
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
           printf("%4d",a[i][j]);
        printf("\n\n");
    }
    bansui(a,c);
    printf("\nYuZiShi is:\n");
    for(i=0;i<N;i++)
    {
       for(j=0;j<N;j++)
          printf("%12ld",c[i][j]);
      printf("\n\n\n");
    }
}

⌨️ 快捷键说明

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