5차 정사각행렬 같은 경우는 어떻게 역행렬을 구할수 있을까??? 간단한 방법은 5차를 억지로 8차로 늘려버리는 것이다.
남는 자리에 0 (대각선은 1)을 채우면 된다. 그리고 얘의 역행렬을 구하고 왼쪽위에서 5x5개만 찝어내면 그게 원래의 역행렬이다. 그러면 이제 할일은 2^n꼴이 아닌 matrix를 2^n꼴로 확장시키는 것.
2^m꼴이 아닌 수 n을 n이상의 2^m꼴로 바꿔주기 위해서 만든 클래스이다. roundbit<7>::value하면 8이 되고, roundbit<33>::value하면 64가 되겠다.
halfdim의 정의도 약간 손보고, round라는 놈도 새로 만들었다. dim이 2^n이 아닐때, 즉 round>dim일때 나머지 공간에 0과 1을 채워준다.
이렇게 해서 2^n꼴이 아닌 임의의 정사각행렬의 역행렬도 구할수 있게되었다. 템플릿 프로그래밍으로 간단하게(? 좀 복잡헌듸) 역행렬 구하는 프로그램을 짜봤다. (근데 이게 과연 효율적인지는 모르겠다. 가우스 조던 소거법이 더 좋을지도.)
이것은 서비스정신에서 비롯한 FullCode!
댓글 영역