Logseq/Major Study/pages/2.3 행렬 계산과 A = LU.md
songyc macbook df8adcd51f 그래프 3분할: English Study / Programming / Major Study 독립 그래프로 분리
- pages 119개·assets 140개+스냅샷 폴더 3개를 참조 추적 기반으로 분류 이동 (전부 git rename, 내용 무변경)
- 공용 페이지(template·card·contents) 3벌 복제, config.edn·custom.css 그래프별 복제
- 옛 Index Page는 _archive/ 보관, 루트 logseq/ 잔재 보존
- CLAUDE.md: 그래프·Anki 프로파일 구조 규칙 신설, 경로·검사 스크립트 갱신
- 복원 지점: 태그 before-graph-split

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G8rNxLqi5rYjRamC8uwiJW
2026-08-05 19:05:21 +09:00

117 lines
15 KiB
Markdown
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

deck:: Logseq/전공공부/선형대수학
- ### 핵심 개념
- **이 절의 요지 3가지**:
- ① $n \times n$ 행렬 $A$ 를 $U$ 로 바꾸는 소거는 약 $\frac{1}{3}n^3$ 번의 곱셈과 뺄셈이 필요하다.
- ② 우변 $b$ 를 $c$ 로 바꾸는 데는 $n^2$ 번이면 된다.
- ③ 행 교환이 없는 소거는 $A$ 를 $LU$ 로 분해한다 ($A = LU$ 의 2가지 증명).
- **가우스-조르단 소거법** (Gauss-Jordan elimination): $AX = I$ 를 열 단위로 한꺼번에 푸는 방법.
- 📌 원문 (p.97): ((6a635ba0-717a-49ea-81c6-1b80acfb2f4c))
- 아이디어: $A^{-1}$ 의 $k$ 번째 열 $x_k$ 는 $Ax_k = e_k$ 의 해다 ($e_k$ 는 $I$ 의 $k$ 번째 열). $n$ 개의 방정식이 모두 같은 계수행렬 $A$ 를 가지므로 첨가행렬을 $[A \ \ I]$ 로 잡고 **소거를 한 번만** 적용한다.
- $$[A \ \ I] \xrightarrow{\text{소거}} [I \ \ A^{-1}]$$
- ⚠️ 가우스-조르단은 (역대입 대신) 피벗 **위쪽**까지 소거해 $A$ 자리를 완전히 $I$ 로 만든다. $Ax=b$ 하나를 푸는 것보다 **느리다**: $A^{-1}$ 가 정말 필요할 때만 쓴다.
- 💡 이 책의 일관된 메시지: $x = A^{-1}b$ 라고 해서 실제로 $A^{-1}$ 를 계산하지는 마라. 소거+역대입이 훨씬 싸다.
- **소거법의 비용** (연산 횟수 세기)
- 📌 원문 (p.97): ((6a635bbc-cd20-4362-8dcc-ae180ca53cba))
- 세는 단위: 소거의 기본 동작은 "피벗 행에 승수를 **곱해서** 아래 행에서 **뺀다**", 성분 하나를 갱신할 때마다 곱셈 1번 + 뺄셈 1번이 한 쌍으로 든다. 아래에서 "1번"은 이 (곱셈, 뺄셈) 한 쌍을 뜻한다.
- **왜 1단계가 약** $n^2$ **번인가**: 1열의 피벗 아래를 전부 0으로 만드는 비용:
- ⚠️ **흔한 오해부터**: "1단계의 목표는 1열에 0을 $(n-1)$ 개 만드는 것이니 $(n-1)$ 번이면 되는 것 아닌가?", 아니다. **0 하나를 만들려면 그 행 전체를 바꿔야 한다.**
- "2행에서 1행 × $\ell_{21}$ 을 뺀다"는 것은 방정식 전체의 연산이다: (방정식 ②) ← (방정식 ②) $\ell_{21}$ × (방정식 ①). 등식이 유지되려면 **2행의 모든 성분**에서 각각 1행의 대응 성분 × $\ell_{21}$ 을 빼야 한다. 1열 성분 하나만 빼고 나머지를 안 건드리면 방정식 자체가 망가진다.
- 즉 "0이 되는 자리"는 행마다 1개지만, 그 부산물로 **그 행의 나머지 성분들도 전부 새 값으로 갱신**된다. 진짜 비용은 여기서 나온다.
- 그림으로 ($n = 4$): 1단계에서 값이 바뀌는 자리를 표시하면 다음과 같다:
- $$\begin{bmatrix} p & \times & \times & \times \\ \bullet & \ast & \ast & \ast \\ \bullet & \ast & \ast & \ast \\ \bullet & \ast & \ast & \ast \end{bmatrix} \qquad \begin{aligned} &p = \text{피벗}, \ \times = \text{1행 (불변)} \\ &\bullet = 0 \text{이 되는 자리 (목표)} \\ &\ast = \text{덩달아 바뀌는 자리} \end{aligned}$$
- 갱신되는 성분 = $\bullet$ 와 $\ast$ 전부 = 세로 $(n-1)$ 행 × 가로 $n$ 열의 **직사각형**. "제곱"의 정체는 이 직사각형의 **넓이**다: $(n-1) \times n = n^2 - n \approx n^2$.
- $n=4$ 로 세어보면: 3행 × 4성분 = 12번 (= $4^2 - 4$).
- 코드로 보면, 1단계는 **이중 루프**다:
- ```python
# 1단계: 1열의 피벗 A[0][0] 아래를 전부 0으로
for i in range(1, n): # 바깥 루프: 피벗 아래의 각 행 → (n-1)번 반복
l = A[i][0] / A[0][0] # 이 행의 승수 (행마다 나눗셈 1번)
for j in range(n): # 안쪽 루프: 그 행의 모든 성분 → n번 반복
A[i][j] -= l * A[0][j] # 곱셈 1번 + 뺄셈 1번 = "1번"
```
- 바깥 루프 $(n-1)$ 번 × 안쪽 루프 $n$ 번 = $(n-1)\,n \approx n^2$. **루프가 두 겹이라 제곱이 된다**: 한 겹($n$)은 "행이 여러 개"에서, 다른 한 겹($n$)은 "행 하나가 성분 여러 개"에서 온다.
- 요약: 1단계 = $(n-1)$ 행 × $n$ 성분 = $n^2 - n$ 번 ≈ $n^2$ 번. (1행 자체는 바뀌지 않으므로 정확히는 $n^2 - n$ 이지만, $n$ 이 크면 차이는 무시된다.)
- 💡 2단계와의 연결 (이미 이해한 부분): 2단계는 똑같은 이중 루프를 오른쪽 아래 $(n-1) \times (n-1)$ 부분행렬에서 도는 것, 그래서 $(n-2)(n-1) \approx (n-1)^2$.
- **왜 총합이** $\frac{1}{3}n^3$ **인가**: 단계마다 문제가 한 사이즈씩 줄어든다:
- 1단계가 끝나면 1행과 1열은 완성. 남은 작업은 오른쪽 아래의 $(n-1) \times (n-1)$ 부분행렬, 크기 $(n-1)$ 짜리 문제를 새로 시작하는 것과 같다. 그래서 2단계 ≈ $(n-1)^2$ 번, 3단계 ≈ $(n-2)^2$ 번, …, 마지막 단계 ≈ $1^2$ 번.
- $$\text{총합} \approx n^2 + (n-1)^2 + (n-2)^2 + \cdots + 2^2 + 1^2 = \frac{1}{3}n\left(n+\tfrac{1}{2}\right)(n+1) \approx \frac{1}{3}n^3$$
- 💡 왜 제곱의 합이 $\frac{1}{3}n^3$ 인가: $1^2 + 2^2 + \cdots + n^2$ 은 곡선 $y = x^2$ 아래 넓이를 폭 1짜리 계단으로 근사한 것과 같다. 그 넓이가 적분 $\int_0^n x^2\,dx = \frac{1}{3}n^3$. 정확한 공식 $\frac{1}{3}n(n+\frac{1}{2})(n+1)$ 을 전개해도 최고차항은 $\frac{1}{3}n^3$ 이고, $n$ 이 충분히 크면 $\frac{1}{2}$ 과 $1$ 은 중요하지 않다.
- 수치로 확인: $n = 100$ 이면 제곱의 합은 정확히 $338{,}350$, 근사값 $\frac{100^3}{3} = 333{,}333$, 오차 1.5%. $n$ 이 클수록 더 정확해진다.
- **왜 우변은** $n^2$ **번뿐인가**: $b$ 는 열 하나(성분 $n$ 개)라서 행렬보다 훨씬 싸다:
- ① 순방향 $b \to c$: 1단계에서 $b_2, \cdots, b_n$ 에서 $b_1$ 의 배수를 뺀다 → $(n-1)$ 번. 2단계는 $b_1$ 과 무관하므로 $(n-2)$ 번. … 마지막 단계는 1번.
- ② 역대입 $c \to x$: $x_n$ 은 $u_{nn}x_n = c_n$ 에서 피벗으로 나누는 1단계. $x_{n-1}$ 은 (이미 구한 $x_n$ 을 대입 + 피벗으로 나눔) 2단계. … $x_1$ 은 $(n-1)$ 개를 대입하고 나누는 $n$ 단계.
- $$\underbrace{[(n-1) + (n-2) + \cdots + 1]}_{①\ b \to c} + \underbrace{[1 + 2 + \cdots + (n-1) + n]}_{②\ c \to x} = n^2$$
- 💡 $n^2$ 이 되는 짝짓기 트릭 (p.98): ①의 $(n-1)$ 과 ②의 $1$, ①의 $(n-2)$ 와 ②의 $2$, … 를 짝지으면 매 쌍의 합이 $n$ 이고 쌍이 $(n-1)$ 개 → $n(n-1)$. ②에 짝 없이 남은 마지막 $n$ 하나를 더하면 $n(n-1) + n = n^2$. 딱 떨어진다.
- **결론:** $LU$ **를 저장하는 이유를 수치로**:
- $A \to LU$ 분해(비싼 부분): $\approx$ $\frac{1}{3}n^3$ 번 => {{c1 **한 번**}}**만** 하면 된다.
id:: 6a654a5b-b7fb-4f00-a8c9-41e828a913cb
새로운 $b$ 마다 드는 비용: {{c1 **Lc=b**}} (순방향) + {{c1 **Ux = c**}} (역대입) = $n^2$
- $n = 1{,}000$ 이면 $\frac{1}{3}n^3 \approx 3.3$ 억 번 vs $n^2 = 100$ 만 번, 두 번째 $b$ 부터는 **약 333배 싸게** 푼다.
- ⚠️ 우변 처리에 필요한 정보(각 단계의 승수 $\ell_{ij}$)가 전부 $L$ 에 저장되어 있다는 것이 핵심, 그래서 $A$ 를 다시 소거할 필요가 없다.
- 크기 감각: $n = 1{,}000$ 이면 약 1초. $n$ 이 2배가 되면 시간은 $2^3 = 8$ 배 ($n^3$ 규칙). 실무의 큰 행렬은 대부분 **희소행렬** (sparse matrix, 대부분 성분이 0)이라 $A = LU$ 계산이 훨씬 빠르다.
- $A = LU$ **분해**: 이 장의 핵심 공식
- 소거 과정 $EA = U$ 를 뒤집으면 $A = E^{-1}U = LU$. [[2.2 소거행렬과 역행렬]]의 식 (11)이 $\ell_{ij}$ 가 $L$ 의 정확한 위치에 배치됨을 보여줬다.
- $L$ **과** $U$ **의 정확한 형태** 🧩:
- $L$ = 주대각선이 1이고, 주대각선 아래 $(i,j)$ 에 승수 $\ell_{ij}$ 가 들어간 **하삼각행렬**.
- $U$ = 소거가 끝난 **상삼각행렬**, 주대각선에 피벗들이 놓인다.
- $$A = LU = \begin{bmatrix} 1 & & \\ \ell_{21} & 1 & \\ \ell_{31} & \ell_{32} & 1 \end{bmatrix} \begin{bmatrix} \text{피벗}_1 & * & * \\ & \text{피벗}_2 & * \\ & & \text{피벗}_3 \end{bmatrix}$$
- **증명 1, 행 단위로 보기**: $L$ 에서 $\ell_{ij}$ 가 제자리에 있는 이유 (p.99~100)
- 📌 원문 (p.99): ((6a635be3-d31e-4142-a915-420dc9b58289))
- 소거 중 피벗 행에서 빼는 것은 $A$ 의 원래 행이 아니라 이미 완성된 $U$ **의 행**이다 (피벗 행은 그 뒤로 다시 바뀌지 않으므로).
- $$(U \text{의 3행}) = (A \text{의 3행}) - \ell_{31}(U \text{의 1행}) - \ell_{32}(U \text{의 2행}) \tag{3}$$
- 📌 원문 (식 (3), p.100): [🔗 PDF 위치](((6a63653f-b4da-4d0f-a4e6-a661af2898b6)))
- ![A=LU 증명 식 (3) (p.100)](../assets/2장_p100_ALU증명_식3.png)
- 이 식을 이항하면:
- $$(A \text{의 3행}) = \ell_{31}(U \text{의 1행}) + \ell_{32}(U \text{의 2행}) + 1 \cdot (U \text{의 3행}) \tag{4}$$
- 📌 원문 (식 (4), p.100): [🔗 PDF 위치](((6a636543-5209-4619-b32e-f0af8ee44f26)))
- ![A=LU 증명 식 (4) (p.100)](../assets/2장_p100_ALU증명_식4.png)
- 식 (4)가 정확히 행렬곱 $A = LU$ 의 3행이다. $L$ 의 3행 $[\ell_{31} \ \ \ell_{32} \ \ 1]$ 이 그대로 읽힌다. 모든 크기 $n$ 에서 성립.
- **증명 2, (열)×(행) 랭크 1 행렬로 보기** (p.100~101)
- 소거를 "$A$ 에서 (L의 열)·(U의 행) 인 랭크 1 행렬을 빼는 것"으로 본다.
- 1단계: $\ell_1 = (1, \ell_{21}, \ell_{31}, \cdots)$ 과 $u_1 = (A$ 의 1행$)$ 에 대해 $A - \ell_1 u_1 = A_2$ 를 만들면 $A_2$ 의 1행과 1열은 전부 0.
- 반복하면 매 단계 "$L$ 의 열 $\ell_j$ × $U$ 의 피벗 행 $u_j$" 를 소거하고, 조각을 다시 합치면:
- $$A = \ell_1 u_1 + \ell_2 u_2 + \cdots + \ell_n u_n = \begin{bmatrix} \ell_1 & \cdots & \ell_n \end{bmatrix}\begin{bmatrix} u_1 \\ \vdots \\ u_n \end{bmatrix} = LU \tag{5}$$
- 💡 1장 마지막의 "(열)×(행) 곱셈" 관점이 여기서 진가를 발휘한다. $U$ 의 피벗 행 $u_k$ 는 앞에 $(k-1)$ 개의 0, $L$ 의 열 $\ell_k$ 도 위에 $(k-1)$ 개의 0으로 시작.
- **행 교환 없이** $A = LU$ **분해가 가능한 조건** (p.101)
- "행 교환이 없고 피벗에 0이 없는 $A = LU$ 분해는 언제 가능한가?"
- 📌 원문 (질문, p.101): ((6a635bfb-bcd2-4ff3-9fd5-31424ab7abb4))
- 답: $A$ 의 **왼쪽 상단 모서리에 있는 모든** $k \times k$ **부분행렬** $A_k$ **가 가역행렬**일 때만 가능하다 ($k = 1, \cdots, n$).
- 📌 원문 (답, p.101): ((6a635c01-2fd8-4235-a9d8-052b6b5f93d7))
- 이유: 소거 과정이 좌상단 모서리 부분행렬을 순서대로 분해하기 때문, $A_k = L_k U_k$ 이 성립하려면 각 $A_k$ 가 가역이어야 한다.
- 💡 직관: $k$ 번째 피벗은 좌상단 $k\times k$ 블록 안에서 결정된다. 앞쪽 블록이 특이하면 그 시점에 피벗 0을 만나 행 교환이 필요해진다.
- $LU$ **를 이용한** $Ax = b$ **풀이, 두 개의 삼각 시스템**
- $A = LU$ 를 알고 나면: $Ax = b$ ⟺ $L(Ux) = b$ ⟺ 두 단계로 분리.
- ① $Lc = b$ 를 **순방향 대입**으로 풀어 $c$ 를 얻는다 (소거가 우변에 하던 일).
- ② $Ux = c$ 를 **역대입**으로 풀어 $x$ 를 얻는다.
- 💡 같은 $A$ 에 우변 $b$ 만 바뀌는 문제를 여러 번 풀 때 진가: 비싼 $\frac{1}{3}n^3$ 분해는 한 번만, 이후는 $b$ 마다 $n^2$ 만 든다.
- ### ❓ 스스로 점검
- $A \to U$ 소거, 우변 처리($b \to c \to x$)의 연산 횟수는 각각 대략 얼마인가? 유도 과정도 요약하라.
- $A \to U$ 는 약 $\frac{1}{3}n^3$ 번: 1단계는 $(n-1)$ 행 × $n$ 성분 ≈ $n^2$ 번이고, 단계마다 부분행렬 크기가 하나씩 줄어 $n^2 + (n-1)^2 + \cdots + 1^2 \approx \int_0^n x^2 dx = \frac{1}{3}n^3$.
- 우변은 정확히 $n^2$ 번: 순방향 $(n-1) + \cdots + 1$, 역대입 $1 + 2 + \cdots + n$, 합치면 $n^2$. 그래서 $LU$ 를 한 번 구해두면 새 $b$ 마다 $n^2$ 만 든다 ($n=1000$ 이면 분해 대비 약 333배 싸다).
- $A = LU$ 에서 $L$ 의 주대각선과 그 아래에는 정확히 무엇이 들어가는가?
- 주대각선에는 1, 주대각선 아래 $(i,j)$ 성분에는 소거 때 쓴 승수 $\ell_{ij}$ 가 부호 그대로 들어간다. ($U$ 의 주대각선에는 피벗.)
- "소거에서 피벗 행에 곱해 빼는 행은 $A$ 의 행이 아니라 $U$ 의 행이다". 왜 이 관찰이 $A = LU$ 증명의 핵심인가?
- $(U$ 의 $i$ 행$) = (A$ 의 $i$ 행$) - \sum_{j<i} \ell_{ij}(U$ $j$ $)$ 이항하면 $(A$ $i$ $) = \sum_{j<i}\ell_{ij}(U$ $j$ $) + 1\cdot(U$ $i$ $)$, 이것이 정확히 행렬곱 $LU$ $i$ 행이기 때문.
- 교환 없이 $A = LU$ 가능할 필요충분조건은?
- 왼쪽 상단의 모든 $k \times k$ 부분행렬 $A_k$ ($k=1,\cdots,n$)가 가역인 .
- $[A \ \ I] \to [I \ \ A^{-1}]$ (가우스-조르단) $Ax=b$ 풀이보다 느린데도 배우는 이유는?
- $A^{-1}$ 전체가 필요할 $n$ 개의 방정식 $Ax_k = e_k$ 소거 번으로 동시에 풀어주는 체계적 방법이기 때문. (실전에서는 $A^{-1}$ 만들지 않고 $LU$ 푸는 것이 원칙.)
- ### 연습문제 풀이 (솔루션 참고)
- **문제 1** ( 표시: 중요한 문제): 순방향 소거가 $\begin{bmatrix} 1&1 \\ 1&2 \end{bmatrix}x = \begin{bmatrix} 5\\7 \end{bmatrix}$ $\begin{bmatrix} 1&1 \\ 0&1 \end{bmatrix}x = \begin{bmatrix} 5\\2 \end{bmatrix}$ 바꾼다. 빈칸을 채워라.
- $\ell_{21} = 1$ (2행에서 1행 × 1 ). 역대입 단계의 행렬은 $L = \begin{bmatrix} 1&0 \\ 1&1 \end{bmatrix}$.
- $L$ $Ux_1 = (5,2)$ 곱하면 원래 방정식 $Ax = (5,7)$ 되찾는다. 문자로: $Ux = c$ $L$ 곱하면 $Ax = b$.
- 💡 "$L$ 소거를 되돌리는 행렬"이라는 $A = LU$ 의미를 2×2 확인하는 문제.
- **문제 7** ( 표시: 풀어볼 만한 문제): 대칭행렬 $A = \begin{bmatrix} a&a&a&a \\ a&b&b&b \\ a&b&c&c \\ a&b&c&d \end{bmatrix}$ $L, U$ 피벗 4개가 존재할 조건.
- 소거하면 모든 승수가 1: $L = \begin{bmatrix} 1&&& \\ 1&1&& \\ 1&1&1& \\ 1&1&1&1 \end{bmatrix}$, $U = \begin{bmatrix} a&a&a&a \\ &b-a&b-a&b-a \\ &&c-b&c-b \\ &&&d-c \end{bmatrix}$.
- 피벗은 $a, \ b-a, \ c-b, \ d-c$ 4개의 조건: $a \neq 0$, $b \neq a$, $c \neq b$, $d \neq c$.
- 💡 피벗이 "연속된 값의 " 나오는 아름다운 패턴. 대칭행렬의 소거가 얼마나 규칙적인지 보여준다.
- **문제 10**: $L = \begin{bmatrix} 1&0&0 \\ 1&1&0 \\ 1&1&1 \end{bmatrix}$, $U = \begin{bmatrix} 1&1&1 \\ 0&1&1 \\ 0&0&1 \end{bmatrix}$, $b = (4,5,6)$. $Lc = b$ 에서 $c$, $Ux = c$ 에서 $x$ 구하라. $A$ ?
- $Lc = b$ 순방향: $c_1 = 4$, $c_1 + c_2 = 5 \Rightarrow c_2 = 1$, $c_1+c_2+c_3 = 6 \Rightarrow c_3 = 1$ $c = (4,1,1)$.
- $Ux = c$ 역방향: $x_3 = 1$, $x_2 = 0$, $x_1 = 3$ $x = (3, 0, 1)$.
- $A = LU = \begin{bmatrix} 1&1&1 \\ 1&2&2 \\ 1&2&3 \end{bmatrix}$, 방금 것이 정확히 $A$ 대한 순방향 소거 + 역대입이다.
- 💡 $LU$ 풀이의 2단계 절차(①$Lc=b$ ②$Ux=c$)를 손에 익히는 표준 문제.
- **문제 15** ( 표시: 쉽지만 중요한 문제): $A$ 교환 없이 피벗 5, 9, 3을 가질 , 왼쪽 상단 2×2 부분행렬 $A_2$ 피벗은?
- $A_2$ 피벗은 **5, 9**: 앞의 피벗 그대로.
- 이유: $A$ 대한 소거는 왼쪽 상단 모서리에서 시작하므로, 처음 단계가 $A_2$ 대한 소거다 ($A_k = L_k U_k$).
- 💡 "모서리 부분행렬이 가역이어야 $A=LU$ 가능하다" 본문 조건의 이유를 그대로 체험하는 문제.