2010-05-27 2 views
2

NxN 행렬 C 행렬의 행렬을 어떻게 계산합니까?C#에서 NxN 행렬 결정자 계산

+12

이 숙제가 있습니까? –

+3

정의가 충분하지 않습니까? http://en.wikipedia.org/wiki/Determinant? C#에서 구현하려고 시도했을 때 특정 문제가 발생 했습니까? –

+5

지금까지 작성한 코드를 제공해 주시면 도와 드리겠습니다. 그러나 우리는 그것을 당신을 위해 코드화하지 않을 것입니다. –

답변

3

위 삼각형 형태로 축소 한 다음 위치 i == j에있는 모든 값을 함께 곱하는 중첩 루프를 만듭니다. 당신은 그것을 가지고 있습니다.

+2

중첩 루프 일 필요는 없습니다. 왜냐하면 i == j 인 위치 (i, j)에서 모든 위치 (i, i)에 대해 수행 할 수 있기 때문입니다. – JAB

+0

좋은 지적, +1. – Brandi

+1

계산 한 결과가 결정자의 부정 일 수 있습니다. 첫 번째 대각선의 곱을 취한 다음 (-1)^[상 삼각 형태로 전환하는 데 사용 된 행 스왑의 수]를 곱해야합니다. – Kevin

7

OP는이 질문의 정확한 복제본으로 닫힌 4x4 행렬에 대해 특별히 묻는 another question을 게시했습니다. 당신이 당신의 벡터 데이터를 저장

public double GetDeterminant() { 
    var m = _values; 
    return 
     m[12] * m[9] * m[6] * m[3] - m[8] * m[13] * m[6] * m[3] - 
     m[12] * m[5] * m[10] * m[3] + m[4] * m[13] * m[10] * m[3] + 
     m[8] * m[5] * m[14] * m[3] - m[4] * m[9] * m[14] * m[3] - 
     m[12] * m[9] * m[2] * m[7] + m[8] * m[13] * m[2] * m[7] + 
     m[12] * m[1] * m[10] * m[7] - m[0] * m[13] * m[10] * m[7] - 
     m[8] * m[1] * m[14] * m[7] + m[0] * m[9] * m[14] * m[7] + 
     m[12] * m[5] * m[2] * m[11] - m[4] * m[13] * m[2] * m[11] - 
     m[12] * m[1] * m[6] * m[11] + m[0] * m[13] * m[6] * m[11] + 
     m[4] * m[1] * m[14] * m[11] - m[0] * m[5] * m[14] * m[11] - 
     m[8] * m[5] * m[2] * m[15] + m[4] * m[9] * m[2] * m[15] + 
     m[8] * m[1] * m[6] * m[15] - m[0] * m[9] * m[6] * m[15] - 
     m[4] * m[1] * m[10] * m[15] + m[0] * m[5] * m[10] * m[15]; 
} 

그것은 가정 : 당신은 혼자 4 × 4 행렬로 제한하는 대신 일반 솔루션을 찾고 있지만하지 않는 경우 글쎄, 당신이 진정한 노력 앤 찾고 추한하지만 코드를 사용할 수 있습니다 16- 요소 배열의 순서로, (이 경우의 double하지만 float 너무 일 것이다)라고 _values :

0, 1, 2, 3, 
4, 5, 6, 7, 
8, 9, 10, 11, 
12, 13, 14, 15 
0

표준 방법 LU decomposition이다. 라이브러리를 직접 코딩하는 대신 사용할 수도 있습니다. 나는 C#에 대해 모른다. 그러나 40 년 표준은 LAPACK이다.