행렬식을 이용하여 연립방정식의 해를 구하는 공식이다. 가브리엘 크라메르가 출판한 《대수 곡선 해석 개론》(Introduction à l'Analyse des lignes Courbes algébriques, 1750)에서 소개가 되어 그의 이름이 붙었으나, 방정식의 개수가 2, 3개일 경우에 대한 공식을 콜린 매클로린이 2년 먼저 발표한 바 있으며, 칼 보이어(Carl B. Boyer), 브루스 헤드먼(Bruce A. Hedman) 등에 의하면 그가 크라메르보다 30년 정도 먼저 발견했다고도 알려져 있다. 사실 매클로린도 방정식의 개수가 4개 이상일 경우에 대한 일반화를 시도하기도 했으나 결정적으로 부호를 정하는 방법을 찾지 못해 공식 도출 단계에 이르지는 못했다.
n×n 행렬 A와 n차원 열벡터 b=b1⋮⋮bn가 있다고 하자. 이때 n차원 열벡터 x=x1⋮⋮xn가 다음과 같은 연립방정식
Ax=b
의 해라면
xidetA=detAi
가 성립한다. 여기서 Ai는 A의 i번째 열을 b로 교체한 행렬이다. detA=0이라면
b가 단위행렬의 j번째 열벡터 ej이고 x=αj라 놓으면 Aαj=ej 이며 αj는 곧 A의 역행렬 A−1의 j번째 열벡터임을 알 수 있다. 크라메르의 공식에 따라 A의 i번째 열을 ej로 교체하면서 계산해주면 αj의 i번째 행의 성분, 즉 αij가 얻어지는데, detAi를 계산할 때 i번째 열에 주목해서 라플라스 전개(여인수 전개)를 적용하면 소행렬식과 여인수를 이용하여 역행렬을 구하는 노가다방법이 도출된다. 즉
소행렬식 n차 정사각행렬 A에서 i행 j열을 제거하여 얻어진 (n−1)차 정사각행렬의 행렬식을 (i,j) 소행렬식(minor)이라고 하며 Mij로 나타낸다. 행렬이랑 비슷한 표기 방식을 쓰기에 행렬로 오인할 수 있으나 Mij는 엄연히 '행렬식'의 값이다.
여인수 Mij에 (−1)i+j를 곱한 값 (−1)i+jMij를 (i,j) 여인수(cofactor)라고 하며 Cij로 나타낸다. Cij를 성분으로 갖는 행렬을 여인수 행렬이라고 하며 C로 나타낸다.
수반행렬 여인수 행렬에 전치행렬을 적용한 CT를 수반행렬(adjugate matrix)이라고 하며 adj(A)로 나타내기도 한다. 한편 A∗orA†로 표기되는 에르미트 수반행렬(Hermitian adjoint)을 짧게 수반행렬 혹은 수반 연산자라고 부르기 때문에 혼동을 피하기 위해 본 용어를 고전적 수반행렬(classical adjoint)이라 나타내기도 하며, 교재에 따라 딸림행렬로 번역되기도 한다. 대한수학회 용어집에서는 '수반행렬', '딸림행렬' 둘 다 공식 용어로 채택하고 있다.
행렬식의 값이 작으면 부동 소수점 연산의 정확도 한계와 나누기 연산 때문에 오차가 매우 커지고, 결과적으로 수치적 안정성(numerical stability)이 쓰레기인 알고리즘이라 제대로 된 소프트웨어라면 이 방식을 사용하지 않는다.
크라메르 공식은 수학적으론 우아하지만 방정식을 수치적으로 계산하는 측면에서는 아무 짝에도 쓸모 없는 알고리즘이란 평가를 받는다. 손으로 알고리즘을 적용하는 것은 일일이 행렬식을 반복적으로 구해줘야 하기 때문에 계산량이 많아 부적절하고, 그렇다고 컴퓨터로 돌리기에는 정확도가 개판이기 때문이다. 이 때문에 선형대수학 교재의 저자로 유명한 MIT 교수 길버트 스트랭은 "크라메르 공식으로 방정식을 푸는 것은 미친짓이다."라고 평하기도 했다. 역행렬은 elementary row operation으로 계산하면 편리하다.
여기선 3차 정사각행렬이라 여인수 행렬의 각 성분을 비교적 쉽게 계산했지만, 차수가 커지면 행렬식 계산량이 겉잡을 수 없이 불어나게 된다. n=4만되어도 3차 행렬식 계산을 4번 해야한다. 어쨌든 아무리 차수가 커도 계산이 가능한 것은 사실이다. 내용 자체는 어려운 편이 아니라 프로그래밍하기는 쉽다. 보통 n=5 이상은 프로그램을 만드는 게 더 빠를 수 있으나 상술한대로 수치에 따라서는 정확도가 떨어지고 시간이 오래 걸릴 수 있다.
라이선스를 별도로 명시하지 않은 문서는CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다.
기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권을 갖습니다.
문서의 기여자는 역사 탭에서 확인할 수 있습니다.
접두어의 N: - 나무위키 사용자, R: - 리그베다 위키의 사용자를 뜻합니다.
자세한 사항은 나무위키에서 동일한 문서의 역사를 참고하시기 바랍니다.