我一直在Internet上搜索一种算法,该算法可以递归地计算NxN martix的行列式。 (我对尺寸一无所知,所以N可以是每个小于256的整数)
complex<double> Matrix::matrixDeterminant(complex<double> **matrix, int n) {
complex<double> det(0,0);
complex<double> **submatrix;
submatrix[i] = new complex<double>[n]
for(int i = 0; i< n; i++) {
submatrix[i] = new complex<double>[n];
}
if (n == 2)
return ((matrix[0][0] * matrix[1][1]) - (matrix[1][0] * matrix[0][1]));
else {
for (int x = 0; x < n; x++) {
int subi = 0;
for (int i = 1; i < n; i++) {
int subj = 0;
for (int j = 0; j < n; j++) {
if (j == x)
continue;
submatrix[subi][subj] = matrix[i][j];
subj++;
}
subi++;
}
det = det + (pow(-1, x) * matrix[0][x] * matrixDeterminant(submatrix, n - 1 ));
}
}
return det;
}
如您所见,矩阵是一个复数矩阵,其中所有数字都是复数,并且还返回复数。
此方法无效。有什么想法可以改变使其生效吗?
答案 0 :(得分:0)
以下链接上的使用Sarrus规则(非递归方法)示例使用Javascript,但可以轻松地用C编写 https://github.com/apanasara/Faster_nxn_Determinant
nxn仅通过两个循环进行行列式计算