2014-10-10 41 views
0

嗯,这给我一个真正的头痛。我正在构建一个矩阵行列式函数来计算NxN行列式,并使用递归。 逻辑工作正常,但我无法获得正确计算的最终值。NxN递归计算数组行列式C#

这里是我的矩阵行列式代码:

public static double determinant(double[,]array){ 
      double det=0; 
      double total = 0; 
      double[,] tempArr = new double[array.GetLength(0) - 1, array.GetLength(1) - 1]; 

      if(array.GetLength(0)==2) 
      { 
       det = array[0, 0] * array[1, 1] - array[0, 1] * array[1, 0]; 
      } 

      else { 

       for (int i = 0; i <1; i++) 
       { 
        for (int j = 0; j < array.GetLength(1); j++) 
        { 
         if (j % 2 != 0) array[i, j] = array[i, j] * -1; 
         tempArr= fillNewArr(array, i, j); 
         det+=determinant(tempArr); 
         total =total + (det * array[i, j]); 
        } 
       } 
       } 
      return det; 
     } 

约fillNewArr方法,它只是一个方法修剪数组,方法如下: p

ublic static double[,] fillNewArr(double[,] originalArr, int row, int col) 
     { 
      double[,] tempArray = new double[originalArr.GetLength(0) - 1, originalArr.GetLength(1) - 1]; 

      for (int i = 0, newRow = 0; i < originalArr.GetLength(0); i++) 
      { 
       if (i == row) 
        continue; 
       for (int j = 0, newCol=0; j < originalArr.GetLength(1); j++) 
       { 
        if (j == col) continue; 
        tempArray[newRow, newCol] = originalArr[i, j]; 

        newCol++; 
       } 
       newRow++; 
      } 
      return tempArray; 

     } 

的方法工作因为它应该是“我假设”,但最终的结果不是以正确的方式计算的,为什么这是?!

4×4阵列实施例:

{2 6 6 2} 
{2 7 3 6} 
{1 5 0 1} 
{3 7 0 7} 

最终结果应当是-168,而矿是104!

+0

什么是最终结果他们应该是什么? – deathismyfriend 2014-10-10 18:34:37

+0

@deathismyfriend更新了代码,请检查 – WT86 2014-10-10 19:43:33

回答

0

该位

if (j % 2 != 0) array[i, j] = array[i, j] * -1; 
tempArr= fillNewArr(array, i, j); 
det+=determinant(tempArr); 
total =total + (det * array[i, j]); 

使用可变total是永远不会再使用。它可能应该是这样的

double subdet = determinant(fillNewArr(array, i, j)); 
if (j % 2 != 0) subdet *= -1; 
det += array[i, j] * subdet;