티스토리 툴바

나의 큰 O는 logx야..

블로그 이미지
메텔이 기계제국을 무너뜨리기 위해 몸을 은하철도999에 맡겼듯이
by ∫2tdt=t²+c
  • 33,628Total hit
  • 19Today hit
  • 35Yesterday hit

이번 떡밥은 템플릿 공부도 하고 수학 공부도 할겸 템플릿을 이용해서 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>안에 들어가야겠다.
 
행렬들의 행렬의 역행렬을 구하는 것은 실수들의 행렬의 역행렬을 구하는것보다 까다롭다. 그래서 그 부분은 다음 글로 넘겼다.
저작자 표시 비영리
크리에이티브 커먼즈 라이선스
Creative Commons License
TRACKBACK 0 AND COMMENT 0

ARTICLE CATEGORY

분류 전체보기 (95)
적분史 (16)
프로그래밍 (57)
소리 (3)
언어 (8)
미래 (3)
수학 (6)

CALENDAR

«   2012/05   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

ARCHIVE