이번 떡밥은 템플릿 공부도 하고 수학 공부도 할겸 템플릿을 이용해서 n차행렬의 역행렬을 구해보는것이다. c++를 좀 써본 사람이라면 template<>어쩌구 하는 문법은 알거라고 생각하고 본론으로 들어간다.
이 사실을 바탕으로 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>안에 들어가야겠다.
행렬들의 행렬의 역행렬을 구하는 것은 실수들의 행렬의 역행렬을 구하는것보다 까다롭다. 그래서 그 부분은 다음 글로 넘겼다.
| 이런 행렬을 |
| 이렇게 묶어주고 |
| 묶어서 생긴 새로운 행렬들을 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>안에 들어가야겠다.
행렬들의 행렬의 역행렬을 구하는 것은 실수들의 행렬의 역행렬을 구하는것보다 까다롭다. 그래서 그 부분은 다음 글로 넘겼다.
'프로그래밍 > 테크닉' 카테고리의 다른 글
| if(ptr)ptr=NULL,return; 은 왜 안될까 (쉼표 연산자 이야기) (0) | 2009/09/13 |
|---|---|
| 템플릿과 역행렬 3. 2^n차가 아닌 행렬 (2) | 2009/06/28 |
| 템플릿과 역행렬 2. 본격 역행렬 구하기 (0) | 2009/06/28 |
| 템플릿과 역행렬 1. template을 써보자 (0) | 2009/06/28 |
| 이진-최대공약수 알고리즘. (0) | 2008/12/20 |
| 역삼각함수를 구현해보자. (0) | 2008/12/08 |
| 삼각함수를 구현해보자. (0) | 2008/12/07 |
TRACKBACK 0 AND
COMMENT 0

PREV