상세 컨텐츠

본문 제목

템플릿과 역행렬 1. template을 써보자

프로그래밍/테크닉

by ∫2tdt=t²+c 2009. 6. 28. 03:13

본문

이번 떡밥은 템플릿 공부도 하고 수학 공부도 할겸 템플릿을 이용해서 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>안에 들어가야겠다.
 
행렬들의 행렬의 역행렬을 구하는 것은 실수들의 행렬의 역행렬을 구하는것보다 까다롭다. 그래서 그 부분은 다음 글로 넘겼다.

관련글 더보기

댓글 영역