안녕하세요~! >_<
저희가 이번에 이산수학을 배우면서, 고등학교 때 배우지 않은 행렬에 대해서도 배우고 있어요
(몇 년 전까지만 해도 수능 수학에 나왔던 영역이었죠...)
여기에서 역행렬을 구하는 과정을 C언어로 만들어 보았어요~!
(지금은 Report 기간이어서 보여드릴 수 없지만, 기간이 끝나고 올려드릴게요~!)
(가우스-조던 방법을 사용했습니다.)
가우스-조던 방법은, 역행렬을 구하는 알고리즘 중 하나로,
행렬 옆에 단위행렬을 붙여서 계산하는데요,
지금부터! 역행렬을 구해볼게요~! (Report 기간 끝나고 C언어 코드도 올릴테니 참고하세요!)
0. 역행렬을 구해볼 행렬
1. 역행렬을 구할 행렬의 오른쪽에 단위행렬을 추가
행렬 오른쪽에 단위행렬을 붙여줍니다.
(단위행렬 : 주대각 성분 = 1, 나머지 성분 = 0인 행렬)
2-1. 행렬의 (1, 1) 성분을 1로 만들기
여기에서 1행 전체를 (1, 1) 성분으로 나누어줍니다. (여기에서는 2로 나누어 주면 됩니다.)
(그러면 (1, 1) 성분은 1이 되겠죠? 단, 성분이 0이면 계산 불가!)
2-2. 행렬의 (1, 1) 성분을 제외한 나머지 1열의 성분을 0으로 만들기
(1, 1) 성분을 1로 만들었으니, 같은 열의 나머지 성분을 순차적으로 0으로 만들어줍니다.
여기에서 n = (행렬의 크기), i = (1로 만든 행), j = (0으로 만들 행), p = (현재의 열)로 두겠습니다.
(아래로 내려가면서 순서대로 계산해주세요~!)
계산 방법은, (i, p) 성분에 적절한 상수를 곱해서 (j, p) 성분을 만들어줍니다. (이 상수를 k로 두겠습니다.)
그리고 (j, 1) 성분부터 (j, n) 성분까지 차례로 k*(i 행의 해당 열의 값)을 빼줍니다.
이해가 안되시나요? 설명을 해드릴게요~!
여기에서는 j = 2일 때, k = 4가 되고, j = 3일 때, k = -2가 됩니다.
그리고 (j, 1) 성분에 4*(i, 1) 성분의 값을 빼주고,
마찬가지로, (j, 2) 성분에 4*(i, 2) 성분의 값을 빼주고 하는 식으로 하시면 됩니다.
이 과정을 아래로 내려가면서 i 행을 제외한 모든 행에 적용해주세요. (아래의 그림 참고!)
과정 2-1 ~ 2-2를 p = n이 될 때까지 p를 1씩 증가시키면서 반복해주세요.
모든 작업이 끝나면, 좌측 행렬 = 단위 행렬이 되겠죠?
여기에서 우측 행렬 = 우리가 구하고자 하는 역행렬! 이 되는 것이죠 ^^
역행렬을 구하기 참 어려웠어요 ㅠ.ㅠ (이를 C언어로 구현한다면......)
작년에도 배우지 않았던 행렬을 이번에 배우게 되어서 이해가 잘 되지 않는 부분도 있었지만,
컴퓨터 관련 학과의 학생인 만큼 기본 지식으로 소장하고자 합니다 ^^
(혹시 오류가 있다면 지적 부탁드릴게요...)