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

标签 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];

代码。但是此代码对于计算行列式是必需的。因此必须有一些方法来更改程序,使其适用于任何非奇异矩阵。我如何编辑我的程序来实现我的目的?感谢您的帮助。

最佳答案

我觉得最好先求上三角矩阵,然后再求行列式。您可能会发现此代码很有用:

#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

关于c - 如何使用 C 中的初等变换计算非奇异矩阵 (n*n) 的行列式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819433/

相关文章:

c++ - 对称矩阵中的线性索引

c++ - 2 名玩家,pion 在矩阵中移动

arrays - 将矩阵折叠成列

c - 如何使用内核头文件编译用户空间程序

c - 如何为外部目录创建 makefile

c - Atmel AVR ADMUX 寄存器未分配值

python - 给定转移概率矩阵,如何生成随机序列?

c++ - 在iOS上运行没有GUI的应用程序?

c++ - 在 C 或 C++ 中使用分布生成数字

java - 如何创建邻居的ArrayList来协调无向图中的节点?