본문 바로가기

역행렬과 연립일차방정식

양쪽에서 곱해 단위행렬이 되는 역행렬을 여인수로 만든 수반행렬과 단위행렬을 붙인 소거의 두 방법으로 구하고, 결과를 곱해서 확인합니다. 피벗이 0일 때의 행 교환과 역행렬이 없는 경우, 연립방정식의 해가 없거나 무한히 많은 경우를 구분합니다.

두 입력 x와 y를 섞어 두 출력을 만들었을 때, 출력만 보고 입력을 되돌릴 수 있을까요? 2x + y = 7과 x + y = 4를 알면 x와 y를 구할 수 있지만, x + y = 2와 2x + 2y = 4는 사실상 같은 정보라서 x와 y를 하나로 정할 수 없습니다. 이 차이를 행렬로 말하면 역행렬이 있느냐의 문제입니다. 이 글에서는 행렬의 연산과 행렬식을 바탕으로 역행렬을 구하는 두 가지 방법을 익히고, 연립방정식의 해가 몇 개인지 판단합니다. 이 글도 선택 심화이며, 8장의 그래프를 먼저 읽어도 됩니다.

역행렬은 양쪽 곱이 단위행렬이다

정사각행렬 A에 대해 AA−1=A−1A=IAA^{-1}=A^{-1}A=I인 행렬 A−1A^{-1}을 A의 역행렬(inverse matrix)이라고 합니다. 2 × 2 행렬은 행렬식 ad−bcad-bc가 0이 아닐 때 다음 공식으로 역행렬을 구할 수 있습니다.

(abcd)−1=1ad−bc(d−b−ca)\begin{pmatrix}a&b\\c&d\end{pmatrix}^{-1}=\frac{1}{ad-bc}\begin{pmatrix}d&-b\\-c&a\end{pmatrix}

대각선의 두 원소를 맞바꾸고, 나머지 두 원소의 부호를 바꾼 뒤, 행렬식으로 나눕니다. 원소마다 역수를 취하는 것이 아니라는 점에 주의해야 합니다. A=(2111)A=\begin{pmatrix}2&1\\1&1\end{pmatrix}는 행렬식이 1이므로 A−1=(1−1−12)A^{-1}=\begin{pmatrix}1&-1\\-1&2\end{pmatrix}이고, 두 행렬을 어느 쪽으로 곱해도 대각선이 1, 나머지가 0이 되어 확인할 수 있습니다.

연립방정식과 소거

연립방정식 2x + y = 7, x + y = 4는 행렬로 A(xy)=(74)A\begin{pmatrix}x\\y\end{pmatrix}=\begin{pmatrix}7\\4\end{pmatrix}입니다. 양변의 왼쪽에 A−1A^{-1}을 곱하면 (xy)=A−1(74)\begin{pmatrix}x\\y\end{pmatrix}=A^{-1}\begin{pmatrix}7\\4\end{pmatrix}이므로 x = 7 - 4 = 3, y = -7 + 8 = 1입니다. 원래 두 식에 넣으면 7과 4가 나와 맞습니다.

역행렬을 구하지 않고 식을 직접 바꾸어 풀 수도 있습니다. 계수와 우변을 나란히 붙인 증강행렬(augmented matrix)에서 한 행은 식 하나입니다. 다음 세 가지 기본 행 연산(elementary row operation)은 해의 집합을 바꾸지 않으며, 우변에도 같은 연산을 합니다.

연산해의 집합이 바뀌지 않는 이유
두 행 맞바꾸기 Ri↔RjR_i\leftrightarrow R_j식을 적는 순서만 바뀌고, 다시 맞바꾸면 되돌아간다
한 행에 0이 아닌 c 곱하기 Ri←cRiR_i\leftarrow cR_i양변에 같은 수를 곱한 것이고, 1/c1/c를 곱하면 되돌아간다. 0을 곱하면 식이 사라지므로 허용하지 않는다
다른 행의 c배 더하기 Ri←Ri+cRjR_i\leftarrow R_i+cR_j원래 두 식을 만족하는 해는 새 식도 만족하고, −c-c배를 더하면 되돌아간다
[217114]⟶[114217]⟶[1140−1−1]\left[\begin{array}{cc|c}2&1&7\\1&1&4\end{array}\right] \longrightarrow \left[\begin{array}{cc|c}1&1&4\\2&1&7\end{array}\right] \longrightarrow \left[\begin{array}{cc|c}1&1&4\\0&-1&-1\end{array}\right]

먼저 두 행을 맞바꾸고, 다음으로 R2←R2−2R1R_2\leftarrow R_2-2R_1을 했습니다. 둘째 행에서 −y=−1-y=-1이라 y = 1이고, 첫째 행에서 x = 3입니다. 한 열을 소거할 때 기준으로 쓰는 0이 아닌 원소를 피벗(pivot)이라 하며, 이 계산에서는 첫 열의 1과 둘째 열의 -1이 피벗이었습니다.

여인수로 만드는 수반행렬

3 × 3 이상의 역행렬은 여인수로 구할 수 있습니다. 앞 글의 C=(120013201)C=\begin{pmatrix}1&2&0\\0&1&3\\2&0&1\end{pmatrix}는 det⁡C=13\det C=13입니다. 아홉 자리마다 그 행과 열을 지운 소행렬식에 부호 (−1)i+j(-1)^{i+j}를 곱해 여인수를 구하면 다음과 같습니다.

자리소행렬식에 부호를 곱한 계산여인수
(1, 1)+(1⋅1−3⋅0)+(1\cdot1-3\cdot0)1
(1, 2)−(0⋅1−3⋅2)-(0\cdot1-3\cdot2)6
(1, 3)+(0⋅0−1⋅2)+(0\cdot0-1\cdot2)-2
(2, 1)−(2⋅1−0⋅0)-(2\cdot1-0\cdot0)-2
(2, 2)+(1⋅1−0⋅2)+(1\cdot1-0\cdot2)1
(2, 3)−(1⋅0−2⋅2)-(1\cdot0-2\cdot2)4
(3, 1)+(2⋅3−0⋅1)+(2\cdot3-0\cdot1)6
(3, 2)−(1⋅3−0⋅0)-(1\cdot3-0\cdot0)-3
(3, 3)+(1⋅1−2⋅0)+(1\cdot1-2\cdot0)1

여인수를 제자리에 늘어놓은 여인수행렬(cofactor matrix) K를 전치한 것을 수반행렬(adjugate) adj⁡(C)\operatorname{adj}(C)라고 합니다.

K=(16−2−2146−31),adj⁡(C)=KT=(1−2661−3−241)K=\begin{pmatrix}1&6&-2\\-2&1&4\\6&-3&1\end{pmatrix},\qquad \operatorname{adj}(C)=K^T=\begin{pmatrix}1&-2&6\\6&1&-3\\-2&4&1\end{pmatrix}

일반적으로 n × n 행렬 A에 대해 Aadj⁡(A)=adj⁡(A)A=(det⁡A)IA\operatorname{adj}(A)=\operatorname{adj}(A)A=(\det A)I가 성립하므로, det⁡A≠0\det A\ne0이면 A−1=adj⁡(A)/det⁡AA^{-1}=\operatorname{adj}(A)/\det A입니다. 전치가 필요한 이유는 곱의 한 칸을 보면 알 수 있습니다. Aadj⁡(A)A\operatorname{adj}(A)의 i행 j열은 ∑kaikKjk\sum_k a_{ik}K_{jk}인데, i = j이면 i행으로 여인수 전개한 것이라 det⁡A\det A입니다. i ≠ j이면 j행을 i행으로 바꾼 행렬을 j행으로 전개한 것이 되고, 같은 행이 둘인 행렬의 행렬식이므로 0입니다. 이 C에서는 Cadj⁡(C)C\operatorname{adj}(C)와 adj⁡(C)C\operatorname{adj}(C)C가 모두 대각선이 13이고 나머지가 0이므로, 13으로 나누면 역행렬이 됩니다.

C−1=113(1−2661−3−241)C^{-1}=\frac{1}{13}\begin{pmatrix}1&-2&6\\6&1&-3\\-2&4&1\end{pmatrix}

K를 전치하지 않고 그대로 쓰면 틀립니다. 이 C에서도 CKCK의 첫 행은 (−3,8,6)(-3,8,6)이라 13I의 첫 행 (13,0,0)(13,0,0)과 다릅니다. 앞에서 본 2 × 2 공식도 이 식의 특별한 경우입니다. (abcd)\begin{pmatrix}a&b\\c&d\end{pmatrix}의 여인수행렬은 (d−c−ba)\begin{pmatrix}d&-c\\-b&a\end{pmatrix}이고, 이것을 전치하면 공식에 나온 행렬이 됩니다.

단위행렬을 붙여 소거하기

여인수를 쓰지 않고, C 옆에 단위행렬 I를 붙인 [C | I]에 행 연산을 해서 왼쪽을 I로 만들 수도 있습니다. 모든 행 연산을 합친 변환을 E라고 하면 [C | I]는 [EC | E]가 됩니다. 왼쪽이 I, 곧 EC = I가 되었다면 E는 C를 되돌리는 행렬이고, 그것이 오른쪽에 남아 있습니다. 이 방법을 가우스–조던 소거(Gauss–Jordan elimination)라고 합니다.

[120100013010201001]\left[\begin{array}{ccc|ccc}1&2&0&1&0&0\\0&1&3&0&1&0\\2&0&1&0&0&1\end{array}\right]

첫 열에서 R3←R3−2R1R_3\leftarrow R_3-2R_1로 3행 1열을 0으로 만들면 셋째 행은 (0,−4,1∣−2,0,1)(0,-4,1\mid-2,0,1)이 됩니다. 둘째 열에서는 R1←R1−2R2R_1\leftarrow R_1-2R_2로 위를, R3←R3+4R2R_3\leftarrow R_3+4R_2로 아래를 0으로 만들면 셋째 행이 (0,0,13∣−2,4,1)(0,0,13\mid-2,4,1)이 되어 13이 새 피벗입니다. R3←R3/13R_3\leftarrow R_3/13으로 피벗을 1로 만든 뒤, R1←R1+6R3R_1\leftarrow R_1+6R_3과 R2←R2−3R3R_2\leftarrow R_2-3R_3으로 셋째 열의 나머지를 0으로 만들면 끝납니다.

[1001/13−2/136/130106/131/13−3/13001−2/134/131/13]\left[\begin{array}{ccc|ccc}1&0&0&1/13&-2/13&6/13\\0&1&0&6/13&1/13&-3/13\\0&0&1&-2/13&4/13&1/13\end{array}\right]

오른쪽이 앞에서 수반행렬로 구한 C−1C^{-1}과 같습니다. 이 과정을 분수로 정확하게 계산하는 코드는 다음과 같습니다. 행과 열의 번호는 수학처럼 1부터 출력하도록 했습니다.

from fractions import Fraction


def inverse_fraction(matrix, show=False):
    n = len(matrix)
    if n == 0 or any(len(row) != n for row in matrix):
        raise ValueError("정사각행렬이어야 합니다")
    work = [[Fraction(v) for v in row] + [Fraction(int(i == j)) for j in range(n)]
            for i, row in enumerate(matrix)]
    for col in range(n):
        pivot_row = next((r for r in range(col, n) if work[r][col] != 0), None)
        if pivot_row is None:
            raise ValueError(f"{col + 1}열에 0이 아닌 피벗이 없어 역행렬이 없습니다")
        if pivot_row != col:
            work[col], work[pivot_row] = work[pivot_row], work[col]
            if show:
                print(f"R{col + 1} <-> R{pivot_row + 1}")
        pivot = work[col][col]
        if pivot != 1:
            work[col] = [v / pivot for v in work[col]]
            if show:
                print(f"R{col + 1} <- R{col + 1} / {pivot}")
        for r in range(n):
            factor = work[r][col]
            if r != col and factor != 0:
                work[r] = [x - factor * y for x, y in zip(work[r], work[col])]
                if show:
                    print(f"R{r + 1} <- R{r + 1} - ({factor})R{col + 1}")
    return [row[n:] for row in work]


def multiply(left, right):
    return [[sum(x * y for x, y in zip(row, column)) for column in zip(*right)] for row in left]


C = [[1, 2, 0], [0, 1, 3], [2, 0, 1]]
inverse = inverse_fraction(C, show=True)
for row in inverse:
    print(" ".join(str(x) for x in row))
identity = [[int(i == j) for j in range(3)] for i in range(3)]
print(multiply(C, inverse) == identity, multiply(inverse, C) == identity)
P = [[0, 1, 0], [1, 0, 0], [0, 0, 1]]
print(inverse_fraction(P, show=True) == P)
for bad in ([[1, 2, 3], [2, 4, 6], [0, 1, 1]], [[1, 2, 3], [4, 5, 6]]):
    try:
        inverse_fraction(bad)
    except ValueError as error:
        print("오류:", error)
R3 <- R3 - (2)R1
R1 <- R1 - (2)R2
R3 <- R3 - (-4)R2
R3 <- R3 / 13
R1 <- R1 - (-6)R3
R2 <- R2 - (3)R3
1/13 -2/13 6/13
6/13 1/13 -3/13
-2/13 4/13 1/13
True True
R1 <-> R2
True
오류: 3열에 0이 아닌 피벗이 없어 역행렬이 없습니다
오류: 정사각행렬이어야 합니다

work의 앞 n칸은 계수, 뒤 n칸은 단위행렬로 시작한 부분이고, 행 연산을 할 때 두 부분에 함께 적용합니다. 열마다 0이 아닌 피벗을 찾고, 필요하면 행을 맞바꾸고, 피벗을 1로 만든 뒤, 같은 열의 다른 행을 모두 0으로 만듭니다. Fraction으로 계산하므로 1/13 같은 값이 반올림 없이 정확합니다. 출력된 여섯 연산은 앞에서 손으로 한 연산과 같고, 두 방향의 곱이 모두 단위행렬이라 역행렬이 맞습니다.

기준 자리의 0과 역행렬 없음을 구별한다

위 출력의 P는 첫 피벗 자리가 0입니다. 피벗 자리는 지금 소거하는 열에서 피벗을 놓을 칸으로, 소거의 기준이 되므로 기준 자리라고도 부릅니다. 그렇다고 바로 역행렬이 없다고 판단하면 안 됩니다. 0으로 나눌 수는 없지만, 같은 열의 아래 행에서 0이 아닌 원소를 찾아 행 전체를 맞바꾸면 소거를 계속할 수 있습니다. P는 R1↔R2R_1\leftrightarrow R_2 한 번으로 왼쪽이 I가 되고, 같은 맞바꿈이 오른쪽의 I도 P로 바꾸므로 P−1=PP^{-1}=P입니다. 실제로 P2=IP^2=I입니다.

기준 자리 0과 행 교환

P의 첫 피벗이 0이라 나눌 수 없다. 왼쪽과 오른쪽을 함께 교환한다. 각 단계의 값과 전환 이유를 비교합니다.

이산수학 · 역행렬의 실패 조건

기준자리0이면 행 교환 가능성부터 확인합니다

0으로 나누기 전에 아래 행을 살핍니다. 행 교환은 왼쪽 계수와 오른쪽 단위행렬 부분에 함께 적용합니다.

기준자리0이면 행 교환 가능성부터 확인합니다정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준자리가0이면 아래 행의 같은 열을 찾고, 비0 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.현재 기준자리 = 0같은 열의 아래 행에0 아닌 값이 있나요?두 행 전체 교환오른쪽 I도 함께비0 피벗으로소거 계속이 열에 피벗 없음역행렬 없음있음없음
기준자리0이면 행 교환 가능성부터 확인합니다정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준자리가0이면 아래 행의 같은 열을 찾고, 비0 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.현재 기준자리 = 0같은 열의 아래 행에0 아닌 값이 있나요?두 행 전체 교환오른쪽 I도 함께비0 피벗으로소거 계속이 열에 피벗 없음역행렬 없음있음없음
  • 화살표: 판단 뒤의 처리 순서
  • 마름모: 아래 행의 같은 열 확인

실수 정사각행렬의 앞 열 소거가 끝난 상태입니다. 현재 행과 아래 행의 이 열 값이 모두0이면 새 피벗을 놓을 수 없습니다. 기준자리0 하나만 보고 실패하지 않습니다. 이 실패는 역행렬 없음이며 모든 우변의 연립방정식에 해가 없다는 뜻은 아닙니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 0 피벗부터 전체 행 교환까지 진행합니다.
관계도의 보충 설명
전체 도표의 표기·관계·조건
구분전체 도표의 내용
제목기준 자리 0과 행 교환
제목·표기기준 자리 0이면 행 교환 가능성부터 확인합니다
관계 설명정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준 자리가 0이면 아래 행의 같은 열을 찾고, 0이 아닌 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.
노드·선 표기현재 기준 자리 = 0
노드·선 표기0이 아닌 피벗으로
설명·조건실수 정사각행렬의 앞 열 소거가 끝난 상태입니다. 현재 행과 아래 행의 이 열 값이 모두 0이면 새 피벗을 놓을 수 없습니다. 기준 자리 0 하나만 보고 실패하지 않습니다. 이 실패는 역행렬 없음이며 모든 우변의 연립방정식에 해가 없다는 뜻은 아닙니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
0 피벗

P의 첫 피벗이 0이라 나눌 수 없다.

  • 피벗·행 1: P=[[0,1,0],[1,0,0],[0,0,1]]
  • 아래 행의 같은 열 탐색
비영 행 찾기

둘째 행 첫 값 1을 선택한다.

  • 피벗·행 1: row2 col1=1
  • 교환할 행 확정
전체 행 교환

왼쪽과 오른쪽을 함께 교환한다.

  • 피벗·행 1: 증강행렬 양쪽의 두 전체 행 교환
  • 피벗·행 2: 왼쪽 I, 오른쪽 P
  • 소거 재개; P⁻¹=P

기준 자리 0과 행 교환

P의 첫 피벗이 0이라 나눌 수 없다. 왼쪽과 오른쪽을 함께 교환한다. 각 단계의 값과 전환 이유를 비교합니다.

이산수학 · 역행렬의 실패 조건

기준자리0이면 행 교환 가능성부터 확인합니다

0으로 나누기 전에 아래 행을 살핍니다. 행 교환은 왼쪽 계수와 오른쪽 단위행렬 부분에 함께 적용합니다.

기준자리0이면 행 교환 가능성부터 확인합니다정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준자리가0이면 아래 행의 같은 열을 찾고, 비0 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.현재 기준자리 = 0같은 열의 아래 행에0 아닌 값이 있나요?두 행 전체 교환오른쪽 I도 함께비0 피벗으로소거 계속이 열에 피벗 없음역행렬 없음있음없음
기준자리0이면 행 교환 가능성부터 확인합니다정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준자리가0이면 아래 행의 같은 열을 찾고, 비0 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.현재 기준자리 = 0같은 열의 아래 행에0 아닌 값이 있나요?두 행 전체 교환오른쪽 I도 함께비0 피벗으로소거 계속이 열에 피벗 없음역행렬 없음있음없음
  • 화살표: 판단 뒤의 처리 순서
  • 마름모: 아래 행의 같은 열 확인

실수 정사각행렬의 앞 열 소거가 끝난 상태입니다. 현재 행과 아래 행의 이 열 값이 모두0이면 새 피벗을 놓을 수 없습니다. 기준자리0 하나만 보고 실패하지 않습니다. 이 실패는 역행렬 없음이며 모든 우변의 연립방정식에 해가 없다는 뜻은 아닙니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 0 피벗부터 전체 행 교환까지 진행합니다.

관계도의 보충 설명

전체 도표의 표기·관계·조건
구분전체 도표의 내용
제목기준 자리 0과 행 교환
제목·표기기준 자리 0이면 행 교환 가능성부터 확인합니다
관계 설명정사각행렬의 앞 열 소거가 끝난 상태에서 현재 기준 자리가 0이면 아래 행의 같은 열을 찾고, 0이 아닌 값이 있으면 전체 행을 교환해 계속하며 없으면 역행렬을 만들 수 없습니다.
노드·선 표기현재 기준 자리 = 0
노드·선 표기0이 아닌 피벗으로
설명·조건실수 정사각행렬의 앞 열 소거가 끝난 상태입니다. 현재 행과 아래 행의 이 열 값이 모두 0이면 새 피벗을 놓을 수 없습니다. 기준 자리 0 하나만 보고 실패하지 않습니다. 이 실패는 역행렬 없음이며 모든 우변의 연립방정식에 해가 없다는 뜻은 아닙니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
0 피벗

P의 첫 피벗이 0이라 나눌 수 없다.

  • 피벗·행 1: P=[[0,1,0],[1,0,0],[0,0,1]]
  • 아래 행의 같은 열 탐색
비영 행 찾기

둘째 행 첫 값 1을 선택한다.

  • 피벗·행 1: row2 col1=1
  • 교환할 행 확정
전체 행 교환

왼쪽과 오른쪽을 함께 교환한다.

  • 피벗·행 1: 증강행렬 양쪽의 두 전체 행 교환
  • 피벗·행 2: 왼쪽 I, 오른쪽 P
  • 소거 재개; P⁻¹=P

반면 S=(123246011)S=\begin{pmatrix}1&2&3\\2&4&6\\0&1&1\end{pmatrix}는 R2←R2−2R1R_2\leftarrow R_2-2R_1을 하면 둘째 행이 모두 0이 됩니다. 둘째 행이 첫째 행의 두 배라 새로운 정보가 없었던 것입니다. 이 상태에서는 어떤 행과 맞바꾸어도 독립인 행이 늘어나지 않으므로 왼쪽을 I로 만들 수 없고, det⁡S=0\det S=0이며 역행렬이 없습니다. 코드는 앞 열들의 소거를 마친 뒤 셋째 열에서, 현재 행과 그 아래 행에 0이 아닌 원소가 하나도 없음을 확인하고 오류를 냈습니다. 피벗 자리 하나가 0인 것과, 그 열에 피벗으로 쓸 원소가 전혀 없는 것은 다른 상황입니다.

역행렬이 없어도 해가 있을 수 있다

계수행렬의 역행렬이 없으면 연립방정식의 해는 하나로 정해지지 않지만, 해가 없을 수도 있고 무한히 많을 수도 있습니다. x + y = 2와 2x + 2y = 5를 소거하면 둘째 식에서 첫째 식의 두 배를 빼서 0 = 1이 나오므로, 두 식을 함께 만족하는 해가 없습니다. 둘째 식의 우변이 4라면 같은 소거에서 0 = 0이 되어 새 조건이 사라지고, y = t를 마음대로 정하면 x = 2 - t가 되어 해가 무한히 많습니다.

두 경우 모두 계수행렬의 행렬식은 0입니다. 그래서 행렬식이 0이라는 것만으로는 해가 없는지 무한히 많은지 알 수 없고, 우변까지 함께 소거해 보아야 합니다. 앞의 S에서 역행렬을 구하지 못한 것은 역행렬이 없다는 뜻일 뿐, S를 계수로 하는 모든 연립방정식에 해가 없다는 뜻은 아닙니다.

정리

  • 역행렬은 양쪽에서 곱해 단위행렬이 되는 행렬이며, 2 × 2에서는 대각선을 맞바꾸고 나머지 부호를 바꾼 뒤 행렬식으로 나눕니다.
  • 기본 행 연산인 맞바꾸기, 0이 아닌 수 곱하기, 다른 행의 배수 더하기는 해의 집합을 바꾸지 않으므로 연립방정식을 풀 때 씁니다.
  • 수반행렬은 여인수행렬을 전치한 것이고, 행렬식이 0이 아니면 A−1=adj⁡(A)/det⁡AA^{-1}=\operatorname{adj}(A)/\det A입니다.
  • [A | I]에 행 연산을 해서 왼쪽을 I로 만들면 오른쪽에 역행렬이 남으며, 구한 역행렬은 양쪽으로 곱해서 확인합니다.
  • 피벗 자리가 0이면 아래 행과 맞바꾸어 계속하고, 그 열에 0이 아닌 원소가 없을 때만 역행렬이 없습니다. 역행렬이 없을 때 연립방정식의 해가 없는지 무한히 많은지는 우변까지 소거해 판단합니다.

연습 문제

1. 소거로 풀기

x + 2y = 5, 3x + 4y = 11을 소거로 풀고, 구한 해를 원래 식에 넣어 확인하세요.

해설 보기

둘째 식에서 첫째 식의 3배를 빼면 (3x+4y)−3(x+2y)=11−15(3x+4y)-3(x+2y)=11-15, 곧 -2y = -4이므로 y = 2입니다. 첫째 식에 넣으면 x + 4 = 5이므로 x = 1입니다. 원래 식에 넣으면 1 + 4 = 5, 3 + 8 = 11로 모두 맞습니다. 해는 (x, y) = (1, 2)입니다.

2. 해가 무한히 많은 경우

x - y = 1, 2x - 2y = 2의 해는 몇 개인가요? 해를 모두 나타내세요.

해설 보기

둘째 식은 첫째 식의 두 배라서 조건이 사실상 하나뿐입니다. y = t를 아무 실수로 정하면 x = t + 1이 두 식을 모두 만족하므로, 해는 (t + 1, t) 꼴로 무한히 많습니다. x = 1, y = 0처럼 해를 하나만 적으면 해 전체를 나타낸 것이 아닙니다. 계수행렬 (1−12−2)\begin{pmatrix}1&-1\\2&-2\end{pmatrix}의 행렬식이 0이라 역행렬은 없지만, 해가 없는 것은 아닙니다.

3. 피벗이 0인 2 × 2 행렬

Q=(0321)Q=\begin{pmatrix}0&3\\2&1\end{pmatrix}의 역행렬이 있는지 판단하고, 있다면 2 × 2 공식으로 구한 뒤 소거할 때 어떤 행 연산부터 해야 하는지 설명하세요.

해설 보기

det⁡Q=0⋅1−3⋅2=−6\det Q=0\cdot1-3\cdot2=-6으로 0이 아니므로 역행렬이 있습니다. 공식에 따라 Q−1=1−6(1−3−20)=(−1/61/21/30)Q^{-1}=\frac{1}{-6}\begin{pmatrix}1&-3\\-2&0\end{pmatrix}=\begin{pmatrix}-1/6&1/2\\1/3&0\end{pmatrix}입니다. 소거로 구할 때는 첫 피벗 자리가 0이라 그대로 나눌 수 없으므로, 먼저 아래 행과 맞바꾸는 R1↔R2R_1\leftrightarrow R_2부터 합니다. 첫 피벗이 0이어도 역행렬이 있을 수 있다는 것을 보여 주는 예입니다. 본문의 inverse_fraction에 Q를 show=True로 넣어도 첫 줄에 R1 <-> R2가 출력됩니다.

소거를 복습할 때는 피벗 값을 계산하기 전에 어떤 행 연산을 썼는지부터 적어 보세요. 역행렬과 증강행렬은 OpenStax의 역행렬 설명에서, 수반행렬 공식은 MIT Strang 강의에서 더 볼 수 있습니다. 다음 글 관계와 그래프를 계산하는 행렬에서는 같은 행렬 곱셈을 참과 거짓의 연산으로 바꾸어 관계를 계산합니다.