如何计算矩阵NxN的行列式? [递归]

问题描述 投票:-4回答:1

我一直在互联网上寻找一种算法来计算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;
}


如您所见,矩阵是一个复数矩阵,其中所有数字都是复数,并且还返回复数。

此方法无效。有什么想法可以改变使其生效吗?

c++
1个回答
0
投票

下面链接上的使用Sarrus规则(非递归方法)示例在Javascript中,但是很容易用C编写https://github.com/apanasara/Faster_nxn_Determinant

仅通过两个循环的nxn行列式计算

© www.soinside.com 2019 - 2024. All rights reserved.