2013-05-04 3 views
0

4x4 행렬을 뒤집어 쓰려고합니다. 수십 개의 계산식으로 행렬식을 계산하는 몇 가지 예를 보았습니다. 이것은 저에게 효과적이지 않은 것처럼 보였습니다. 어딘가에, 내가이 문제를 해결하는 또 다른 방법을 찾기 위해 노력했지만, 내 대답이 있었다 :4x4 행렬 알고리즘을 반전합니다.

public Matrix inverse() 
{ 
    double[] array = new double[]{ 
     1/m[0], m[4], m[8],  0, 
     m[1], 1/m[5], m[9],  0, 
     m[2], m[6], 1/m[10], 0, 
     -m[12], -m[13], -m[14],  1/m[15] 
    }; 
    return new Matrix(array); 
} 

Basicly 무엇 내가 할 것은 그것이이 아주 잘 일하고있다, 구성 요소의 모두의 반전을 계산하고, 기대 숫자 15, 마지막 숫자, 그것은 무한대를 뿜어 내고 있습니다. 이유는 무엇입니까? 내 유일한 추측은 0으로 나눈 것입니다. 그렇지만 질문은 0의 역수는 무엇입니까? 대답은 0입니까?

+3

매트릭스 반전이 나쁘고 기분이 좋을 것입니다. –

+1

당신의 제안 된 '솔루션'은 순수한 말도 안되는 소리입니다 ... –

답변

1

4 × 4 행렬의 역행렬을 쓸 수있는 귀하의 시도가 완전히 잘못된 것입니다 (이 관련이 있지만, 내 행렬은 행 큰 경우 확실하지 않음). 그것이 결코 작동 할 수 없기 때문에 그것을 고치려고 아무런 요령이 없습니다.

1/0의 결과는 무엇입니까? 글쎄, 그것은 제로에 의한 나눗셈이고 결과는 정의되지 않습니다. 1/0 == x을 만족하는 실제 수치는 x입니다. 그때 있다면 1 == x*0 == 0, 모순. 컴퓨터에서 0으로 나누기를 시도하면 오류가 발생하거나 특수 부동 소수점 값 Inf이 반환 될 수 있습니다. 후자는 사용자 환경에서 발생하는 것으로 보입니다.

나는 왜 determinant based code을 거절했는지 알 수 없습니다. 아마도 구현하기 까다로운 일일 것입니다. 그러나 그것이 바로 그 방법입니다. 당신은 그 복잡성을 단축시키지 않을 것입니다.

+0

나는 먼 길을 갈 것입니다. – user2037921

+0

'double [,]'으로 더 나아지지 않겠습니까? 또는 m00, m01, ..., m10, m11 등의 멤버가있는 구조체. 다음 코드를 쉽게 사용할 수 있습니다. http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index .htm –

관련 문제