如何使用C中的初等变换计算非奇异矩阵(n * n)的行列式?

时间:2012-08-05 19:33:05

标签: c matrix

我想使用基本变换将我的矩阵变换为上三角(或下三角矩阵),然后将对角元素相乘以找到给定非奇异矩阵的行列式。 我是c编程的初学者,并编写了以下代码来计算非奇异矩阵的行列式。代码是

   #include<stdio.h>
   #include<math.h>     
        void main()
        {
                int i,j,k,r;
                float mat[20][20],temp,diag=1;
                printf("enter the order of the square matrix\n\n");
                scanf("%d",&r);
                for(i=0;i<r;i++)
                {
                    for(j=0;j<r;j++)
                    {
                        printf("enter the (%d , %d)th entry",i+1,j+1);
                        scanf("%f",&mat[i][j]);
                    }
                }
                printf("The matrix we have entered is\n\n ");
                for(i=0;i<r;i++)
                {
                    for(j=0;j<r;j++)
                    {
                        printf("\t%f",mat[i][j]);

                    }
                 printf("\n");
                }
                for(i=0;i<r-1;i++)
                {
                    for(j=i+1;j<r;j++)
                    {
                        temp=mat[j][i]/mat[i][i];
                        for(k=0;k<r;k++)
                        {
                            mat[j][k]=mat[j][k]-temp*mat[i][k];
                        }
                    }
                }
              for(i=0;i<r;i++)
                {

                    diag=diag*mat[i][i];

                }
                printf("\n\nThe value of the determinant is %f",diag);
        }

这适用于任何非奇异矩阵,除了那些零(第1,1个)元素(即第一个对角线元素)。我可以理解这是由于我的

  temp=mat[j][i]/mat[i][i];

code.But这个代码是计算行列式所必需的。所以必须有一些方法来改变程序,使它运行任何非奇异矩阵。如何编辑我的程序以实现我的目的?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我认为最好找到上三角矩阵然后找到行列式。您可能会发现此代码非常有用:

#include<stdio.h>

int main(){
    float  matrix[10][10], ratio, det;
    int i, j, k, n;
    printf("Enter order of matrix: ");
    scanf("%d", &n);
    printf("Enter the matrix: \n");
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            scanf("%f", &matrix[i][j]);
        }
    }
    /* Conversion of matrix to upper triangular */
    for(i = 0; i < n; i++){
        for(j = 0; j < n; j++){
            if(j>i){
                ratio = matrix[j][i]/matrix[i][i];
                for(k = 0; k < n; k++){
                    matrix[j][k] -= ratio * matrix[i][k];
                }
            }
        }
    }
    det = 1; //storage for determinant
    for(i = 0; i < n; i++)
        det *= matrix[i][i];
    printf("The determinant of matrix is: %.2f\n\n", det);
    return 0;
}

取自here