计算矩阵的行列式

时间:2017-01-04 20:37:53

标签: c++

我试图使用行操作计算方阵的行列式。 我遇到了这段代码,但我真的不明白它是如何工作的。

subisubj做了什么?它是否使用行操作?

此代码背后的逻辑是什么?

int c, subi, i, j, subj;

double submat[10][10],d=0;

if (n == 2) {
    return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
}
else {
    for (c = 0; c < n; c++) {
        subi = 0;
        for (int i = 1; i < n; i++) {
            subj = 0;
            for (j = 0; j < n; j++) {
                if (j == c)
                    continue;
                submat[subi][subj] = mat[i][j];
                subj++;
            }
            subi++;
        }
        d = d + (pow(-1, c)*mat[0][c] * determinant(n - 1, submat));
    }
}
return d;

2 个答案:

答案 0 :(得分:0)

这是一个递归函数,使用Laplace expansion计算其基本情况为2乘2矩阵的行列式。

然而,对我来说,它似乎不是一个好的计划:

  1. 如果输入为1×1矩阵

  2. ,该怎么办?
  3. submat的大小限制为10 x 10

  4. submat浪费内存

  5. 当矩阵很大时,最好使用LU decomposition

答案 1 :(得分:0)

该功能,如下所示:

double determinant(int n, double mat[10][10]);

以递归方式遍历行并在该行的子矩阵上调用自身,第一列为所有矩阵返回一个值。递归以2乘2矩阵结束。