- 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
117 lines
15 KiB
Markdown
Executable File
117 lines
15 KiB
Markdown
Executable File
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 \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)))
|
||
- 
|
||
- 식 (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$ 가 가능하다"는 본문 조건의 이유를 그대로 체험하는 문제. |