我试图使用行操作计算方阵的行列式。 我遇到了这段代码,但我真的不明白它是如何工作的。
subi
和subj
做了什么?它是否使用行操作?
此代码背后的逻辑是什么?
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;
答案 0 :(得分:0)
这是一个递归函数,使用Laplace expansion计算其基本情况为2乘2矩阵的行列式。
然而,对我来说,它似乎不是一个好的计划:
如果输入为1×1矩阵
submat的大小限制为10 x 10
submat浪费内存
当矩阵很大时,最好使用LU decomposition。
答案 1 :(得分:0)
该功能,如下所示:
double determinant(int n, double mat[10][10]);
以递归方式遍历行并在该行的子矩阵上调用自身,第一列为所有矩阵返回一个值。递归以2乘2矩阵结束。