From 78c2df5de6b2d1abd71beebeb8de4fcbe1ae91fc Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Sun, 26 Jul 2026 08:48:13 +0900 Subject: [PATCH] =?UTF-8?q?docs:=202.3=20=EC=86=8C=EA=B1=B0=201=EB=8B=A8?= =?UTF-8?q?=EA=B3=84=20=EB=B9=84=EC=9A=A9(n=C2=B2)=EC=9D=B4=20=EC=A0=9C?= =?UTF-8?q?=EA=B3=B1=EC=9D=B8=20=EC=9D=B4=EC=9C=A0=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 흔한 오해 교정: 0은 (n-1)개지만 행 연산은 행 전체를 갱신해야 함 - 4×4 그림으로 갱신 영역 = (n-1)×n 직사각형 넓이임을 시각화 - 이중 루프 파이썬 코드로 (n-1)×n 구조 설명 - 2단계(부분행렬 반복)와의 연결 한 줄 추가 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01G8rNxLqi5rYjRamC8uwiJW --- pages/2.3 행렬 계산과 A = LU.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/pages/2.3 행렬 계산과 A = LU.md b/pages/2.3 행렬 계산과 A = LU.md index 920e2fb..674e613 100755 --- a/pages/2.3 행렬 계산과 A = LU.md +++ b/pages/2.3 행렬 계산과 A = LU.md @@ -15,9 +15,24 @@ deck:: Logseq/전공공부/선형대수학 - 📌 원문 (p.97): ((6a635bbc-cd20-4362-8dcc-ae180ca53cba)) - 세는 단위: 소거의 기본 동작은 "피벗 행에 승수를 **곱해서** 아래 행에서 **뺀다**" — 성분 하나를 갱신할 때마다 곱셈 1번 + 뺄셈 1번이 한 쌍으로 든다. 아래에서 "1번"은 이 (곱셈, 뺄셈) 한 쌍을 뜻한다. - **왜 1단계가 약** $n^2$ **번인가** — 1열의 피벗 아래를 전부 0으로 만드는 비용: - - 피벗 아래에는 $(n-1)$ 개의 행이 있다. 그 각각의 행에 대해 "1행 × 승수"를 빼야 한다. - - 한 행을 갱신할 때 그 행의 성분 $n$ 개가 각각 (곱셈+뺄셈) 1번씩 필요하다. - - 따라서 1단계 = $(n-1)$ 행 × $n$ 성분 = $n^2 - n$ 번 ≈ $n^2$ 번. (1행 자체는 바뀌지 않으므로 $n^2$ 이 아니라 $n^2 - n$ 이지만, $n$ 이 크면 차이는 무시된다.) + - ⚠️ **흔한 오해부터**: "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$$