24장 : 행렬 (Matrix)


행렬(Matrix)는 행(Row)과 열(Column)로 구성되는 사각형의 격자(Array)에 숫자나 심볼을 배치한 것을 의미합니다.

행렬은 기하학(특히 컴퓨터 그래픽스)이나 통계학에서 시스템을 이루는 다차원의 독립 변수들을 한꺼번에 연산하기 위한 수학적 도구라 볼 수 있습니다.  간단히 말하면 여러 수치를 동일한 방법으로 연산하는 표현이자 도구입니다.

이런 이유로 행렬 또한 컴퓨터로 하는 수치해석의 주요 이슈이며, 매우 중요한 의미를 가집니다.  행렬에 대해서는 고등학교 수학 시간에 필요한 정도는 이미 배웁니다.  만일  기억이 잘 나지 않는다면 행렬에 대한 내용을 복습해 보는 것이 진행하는데 도움이 될 것입니다.

이번 장에서는 행렬의 개념과 표현법, 행렬의 기본 연산, 다원 일차 연립 방정식을 풀기 위한 가우스 소거법, 역행렬을 구하기 위한 가우스-조단 소거법 등에 대해서 알아보고 구현해 볼 것입니다.

강의 자료



강의 동영상

24.0 행렬(Matrix) - 시작 : 여러분들이 즐겨하는 3D 게임들의 입체적인 그림을 그리고, 애니메이션을 구현할 수 있는 수학적 기반이 바로 이 행렬입니다.  이번 장에서는 행렬의 개념과 구현법, 행렬의 기본 연산, 가우스 소거법과 가우스-조단 소거법에 대해서 알아봅니다.



24.1 행렬의 개념과 표현 : 행렬은 행과 열로 이루어지는 사각형 격자에 수치/변수가 있는 구조입니다.  그래서 행렬은 직관적으로 C++의 2차원 배열(Array)의 구조와 들어 맞습니다.  하지만 0이 아닌 값이 별로 없는 희소행렬인 경우는 연결 리스트로 구현하는 것이 효율적입니다.



24.2 DenseMatrix 클래스 : 2차원 배열로 행렬을 구현하는 DenseMatrix 클래스를 구현해 봅니다.  날것의 2차원 배열을 쓰지 않고, 클래스로 랩핑하는 이유는 행렬의 첨자를 벗어나는 예외를 방지하고, 연산자 오버로딩이라는 아름다운 기능을 사용하기 위해서 입니다.



24.3 행렬의 덧셈과 곱셈 : 행렬의 덧셈과 곱셈은 고등학교 수학에서 이미 배웠을 겁니다.  수학식을 프로그래밍 언어로 어떻게 구현할 수 있는지 체험해 보세요.  연산자 오버로딩을 통해 수학식과 비슷한 형태로 사용할 수 있습니다.



24.4 가우스 소거법 (Gaussian Elimination) : 이 절에서는 다원 일차 연립 방정식을 행렬로 풀기 위한 도구를 알아봅니다.  대표적인 풀이법인 가우스 소거법을 알아보고 이를 구현해 봅니다.  가우스-조단 소거법은 대수적인 방법 대신 수치해석으로 연립 방정식을 풀이하는 유용한 도구입니다.  또한 이를 이용하여 행렬식(Determinant)을 구할 수도 있습니다.



24.5 가우스-조단 소거법 (Gauss-Jordan Elimination) : 역행렬(Inverse Matrix)를 구하기 위한 가우스-조단 소거법은 가우스 소거법과 비슷합니다.



24.6 희소 행렬 SparseMatrix 클래스 : 다루어야 하는 행렬이 매우 크다면 메모리 소요량을 걱정해야 할 정도입니다.  보통 이렇게 큰 행렬들은 대부분의 요소가 0인 희소 행렬이기 때문에 이에 적합한 구조를 사용하면 좋습니다.  여기서는 레드-블랙 트리를 검색구조로 채용하여 희소 행렬을 구현해 봅니다.



24.9 행렬 - 결론 : 행렬은 다원 일차 연립 방정식의 풀이, 2차원과 3차원의 일차 변환(Linear Transform) 등 엔지니어링, 컴퓨터 그래픽스,  통계학에서 매우 빈번하게 활용되고 있습니다.  이번 장에서 배운 행렬의 기본 개념과 연산이 앞으로 행렬을 심화 학습하는데 큰 도움이 될 겁니다.




관련글 :
  - C++로 배우는 알고리즘
  - 23장 : 다항식 (Polynomial)
  - 25장 : 방정식 근 찾기

댓글 없음:

댓글 쓰기

인기글