| 태그 'minor'에 해당되는 글 1건 |
| 일반적인 방법으로 NxN의 역행렬을 구하는 프로그램 |
Tech 07/11/12 11:50 ( Translate this page  )
글 주소 : https://ohyung.net/467
많은 분들이 검색어를 누질르고 계시는 역행렬입니다.
이방법 2x2 는 안되는거 같기도 합니다 -.ㅡ; 나중에 다시 봐야지;;;

가우스 방법은 추후에 소개 하도록 하고 이번엔 일반적인 방법으로 코딩을 해보죠...

( 오늘 퀴즈를 보기때문에 정리할겸 블로깅 해봅니다. )

Determinant...
우선적으로 NbyN행렬의 경우 역행렬이 존재하려면 |A| =/= 0 즉...
Determinant가 '0'이 아니어야 합니다.

그뒤 Det 값이 있다면 A의 cofactor를 구하게 됩니다.

Cofactor는 각 자리에 맞게 +- 한것과 그 위치의 Minor의 Det값입니다.
이해가 안되죠 ;;; 저도 잘 이해가 되지 않았습니다.
이런건 그림으로 설명하는게 좋죠;;;


우선 이런 행렬이 있습니다.
3x3 행렬입니다. 뭐 이건 쉽죠...
그냥 이런식으로 설명합니다.











자 우선 Cofactor를 구합니다.
각 자리수에 맞게 자리 마다 +- 를 해줍니다. ( -1^(i+j) 입니다. )
그리고 각 자리 즉 a11이었던 곳에서 + 자로 상하좌우를 제거 하고 남은 2x2 행렬 ( Minor )의 Det 값을 a11에 넣습니다.



대충 위와 같이 하시면 됩니다. 그뒤에 Transpose를 해줍니다.

논리는 b(ji) = a(ij) 입니다.



즉 Adjoint는 Cofactor를 구한뒤 그것을Transpose를 한것입니다.

역시 수학을 설명하는건 세상 가장 킹왕짱 어렵군요.



위처럼 Cofactor를 구한뒤 Transpose를 한것과 같습니다.

최종결과는
위와 같습니다.

즉 3x3 행렬으로 역행렬을 구해보면...

우선 Determinant를 구한다.
' 0 ' 이 아니면 역행렬 존재.

원래 3x3행렬의 Cofactor를 구하고 Minor의 Determinant를 각자리에 대입
그뒤 Transpose를 수행한뒤

처음에 구한 Det(A)값으로 나눠준다.

역행렬 완성!!!


이와 같은 알고리즘을 가지고 코딩을 해봤습니다.



위의 코드는 아래의 CC라이센스에 의해 이용가능함.
최적화는 알아서 할것. i,j 안쓰는 변태는 아님;;; -.-; ( 믿어주삼! )
| 이 포스트에 대한 이용규약 |
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 라이센스 에 따라 이용하실 수 있습니다.
This work is licensed under a Creative Commons Attribution 2.0 Korea LicenseLink in a new window.

| 트랙백 |
트랙백 주소 :: https://ohyung.net/rserver.php?mode=tb&sl=467