이번 떡밥은 템플릿 공부도 하고 수학 공부도 할겸 템플릿을 이용해서 n차행렬의 역행렬을 구해보는것이다. c++를 좀 써본 사람이라면 template<>어쩌구 하는 문법은 알거라고 생각하고 본론으로 들어간다.
이런 행렬을 |
이렇게 묶어주고
|
묶어서 생긴 새로운 행렬들을 A,B,C,D라 하면
|
이렇게 표현할수 있다. (행렬들의 행렬에 대해서도 덧셈, 뺄셈, 곱셈, 실수배가 똑같이 정의된다.) 이런 방법을 재귀적으로 사용한다면 2^n꼴의 행렬을 2*2행렬의 형태로 표현가능하다.
|
이 사실을 바탕으로 matrix 클래스를 짜본다.
dim=2일 경우에는 double a,b,c,d를 가지게하고, dim!=2일때는 matrix<dim/2> a,b,c,d를 가지게 했다. 물론 dim이 2^n일 경우에만 정상적으로 작동한다.
음, 쉽군. 이제 연산자를 정의한다. +,-,*는 매우 쉽게 짤 수 있다.
물론 이 코드들은 template<int dim> class matrix 안에 들어가야겠다. 귀찮겠지만 특수화한 템플릿 클래스 matrix<2>에 대해서도 마찬가지로 정의해줘야한다.
이제 자주 쓰이는 영행렬을 정적변수로 선언한다.
그리고 외부에 다음과 같이 정의해야한다.
이제 역행렬 구하는 것만이 남았는데, 쉬운것부터 하자. matrix<2>먼저 구현해보면
이 코드들도 역시 class matrix<2>안에 들어가야겠다.
행렬들의 행렬의 역행렬을 구하는 것은 실수들의 행렬의 역행렬을 구하는것보다 까다롭다. 그래서 그 부분은 다음 글로 넘겼다.
댓글 영역