2014-10-10 5 views
0

글쎄, 이것은 정말로 두통을주고 있습니다. NxN 결정자를 계산하기 위해 행렬 결정 함수를 만들고 있는데, 재귀를 사용하고 있습니다. 로직이 정상적으로 작동하지만 최종 값을 올바르게 계산할 수 없습니다. 여기 NxN 순환 C를위한 Computing Array Determinant C#

는 매트릭스 결정 요인에 대한 내 코드입니다 : 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; 

     } 

:

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 방법에 대한이 배열을 정돈하는 단지 방법입니다, 방법은 다음과 같다 "가정"하지만 최종 결과는 올바른 방식으로 계산되지 않았으므로 그 이유는 무엇입니까?

× 4 배열 예 : 광산 104 동안

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

최종 결과가 -168되어야!

+0

최종 결과는 무엇입니까? – deathismyfriend

+0

@deathismyfriend이 (가) 코드를 업데이트했습니다. 확인하십시오. – WT86

답변

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;