n階行列式算法(c程序)


#include<stdio.h>

#include<math.h>

#define N 100 //N比輸入的階數大即可

int main()

{   int n,a[N][N],i,j;

    void row_col_times(int b[N][N],int n);

    printf("請輸入方陣階數:\n");

    scanf("%d",&n);

    printf("請輸入%d階的方陣(用空格隔開)\n",n);

    for(i=0;i<n;i++)

    for(j=0;j<n;j++)

    scanf("%d",&a[i][j]);

    printf("您輸入的%d階方陣是:\n");

    for(i=0;i<n;i++)

   {for(j=0;j<n;j++)

   {printf("%3d ",a[i][j]);}//右對齊輸出矩陣

    printf("\n");}

    row_col_times(a,n);//調用行列式乘積函數

    return 0;

}

 

void row_col_times(int b[N][N],int n)

{ int change_col(int c[N][N],int n,int i);

  int product(int d[N][N],int n,int p);

  int i,j,k,p=0;

    for(i=0;i<n-1;i++)//i為階數

    {

     if(b[i][i]==0)//當對角線元素為零時調換列

          { p=p+change_col(b,n,i);}

     for(j=i+1;j<n;j++)//j指列

      { 

       for(k=i+1;k<n;k++)//k指行

       b[k][j]=b[k][j]*b[i][i]-b[k][i]*b[i][j];//最重要的操作

      }

    }

printf("the det of array is:%d",product(b,n,p));//調用對角線乘積+符號函數

}

 

int change_col(int c[N][N],int n,int i)

{ int temp,j,k,flag=0;

  for(k=i;k<n;k++)//k指列

     { if(c[i][k]!=0)  

       { 

         for(j=i;j<n;j++)//j指行

             {

              temp=c[j][i];

              c[j][i]=c[j][k];

              c[j][k]=temp;//調換列

             }

         flag++;//列調換符號記錄

         break;

       }

     }

  return flag;//返回調換符號記錄數

}

 

int product(int d[N][N],int n,int p)

{   int product=1,i;

    for(i=0;i<n;i++)

    product=product*d[i][i];//對角線乘積

    for(i=0;i<n-1;i++)

    product=product/pow(d[i][i],n-i-1);//除回來

    product=product*pow(-1,p);//乘上列調換符號

    return product;

}

/*本程序的構建利用了初等變換下行列式的的不變性

和下三角方陣行列式的公式,並添加了個人的思維方式。

望不吝賜教*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM