From 467027e372cebc3dddd74927f4ae5441cb227d25 Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Sun, 26 Jul 2026 08:56:37 +0900 Subject: [PATCH] =?UTF-8?q?fix:=202.4=20=EB=B6=80=EB=B6=84=ED=94=BC?= =?UTF-8?q?=EB=B2=97=20=EB=B3=B4=EA=B0=95=EB=B6=84=EC=9D=98=20=EB=B3=BC?= =?UTF-8?q?=EB=93=9C-=EC=88=98=EC=8B=9D=20=EC=A4=91=EC=B2=A9=205=EA=B3=B3?= =?UTF-8?q?=20=EC=88=98=EC=A0=95,=20=EA=B2=80=EC=82=AC=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=EC=97=90=20exit=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 직전 커밋에서 검사가 위반을 잡고도 exit 0이라 커밋이 통과한 구멍 수정 - CLAUDE.md 검사 스크립트: 위반 시 exit 1 → '검사 && git commit' 체인으로 커밋 차단 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01G8rNxLqi5rYjRamC8uwiJW --- CLAUDE.md | 7 ++++--- pages/2.4 치환행렬과 전치행렬.md | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index eead801..0b65535 100755 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -40,16 +40,17 @@ disable-anki-sync:: true - ⚠️ **수식은 반드시 다른 마크업 밖에 단독으로 쓴다.** `$...$`가 굵은 글씨(`**...**`) 등 다른 문법 안에 중첩되면 Logseq이 수식을 렌더링하지 못하고 문자 그대로 노출된다. - 잘못된 예: `**3차원 ($\mathbb{R}^3$)**` → 올바른 예: `**3차원** ($\mathbb{R}^3$)` - 강조하려는 구절에 수식이 섞여 있으면 텍스트 부분만 `**...**`로 감싸고 수식은 밖으로 뺀다. 예: `$Ax$ **를 계산하는 2가지 방법**` - - ⚠️ **Claude가 반복적으로 어긴 규칙이다 (특히 소제목·헤더성 볼드 구절에서). 페이지를 작성·수정했으면 커밋 전에 반드시 아래 검사를 실행해 위반 0건을 확인한다:** + - ⚠️ **Claude가 반복적으로 어긴 규칙이다 (특히 소제목·헤더성 볼드 구절에서). 페이지를 작성·수정했으면 커밋 전에 반드시 아래 검사를 실행한다. 위반이 있으면 exit 1 이 나므로, 반드시 `이 검사 && git commit` 형태로 체인해 위반 시 커밋이 차단되게 한다:** ```bash python3 -c " - import re, io, glob + import re, io, glob, sys bad = 0 for f in glob.glob('pages/*.md'): for i, l in enumerate(io.open(f, encoding='utf-8'), 1): for m in re.finditer(r'\*\*([^*]+?)\*\*', l): if '\$' in m.group(1): print(f'{f}:{i}:', m.group(0)[:80]); bad += 1 - print('볼드-수식 중첩 위반:', bad)" + print('볼드-수식 중첩 위반:', bad) + sys.exit(1 if bad else 0)" ``` - 언어는 한국어. 수학·전문 용어는 필요시 영어 병기. - ## 정리 스타일 (기존 노트 기준) diff --git a/pages/2.4 치환행렬과 전치행렬.md b/pages/2.4 치환행렬과 전치행렬.md index 40de137..c0d3580 100755 --- a/pages/2.4 치환행렬과 전치행렬.md +++ b/pages/2.4 치환행렬과 전치행렬.md @@ -35,15 +35,15 @@ deck:: Logseq/전공공부/선형대수학 - 요약: 작은 피벗 → 큰 승수 → 큰 수끼리의 뺄셈 → 정보 소실 + 오차 증폭. - **파국의 수치 예** — 유효숫자 3자리 컴퓨터를 가정하고 다음을 풀어보자 (참해는 $x \approx 1.0001$, $y \approx 0.9999$): - $$0.0001x + y = 1 \qquad x + y = 2$$ - - **교환 없이** (피벗 $0.0001$): $\ell = \dfrac{1}{0.0001} = 10000$. 2행 갱신: $y$ 계수는 $1 - 10000 = -9999$, 우변은 $2 - 10000 = -9998$ — 그런데 3자리 컴퓨터는 둘 다 $-1.00 \times 10^4$ 로 반올림한다 ("$1$"과 "$2$"라는 정보가 통째로 소실!). 그러면 $y = 1.00$, 역대입에서 $0.0001x = 1 - 1.00 = 0$ → $x = 0$. **참값 $x \approx 1$ 인데 $0$ 이 나왔다 — 100% 오답.** + - **교환 없이** (피벗 $0.0001$): $\ell = \dfrac{1}{0.0001} = 10000$. 2행 갱신: $y$ 계수는 $1 - 10000 = -9999$, 우변은 $2 - 10000 = -9998$ — 그런데 3자리 컴퓨터는 둘 다 $-1.00 \times 10^4$ 로 반올림한다 ("$1$"과 "$2$"라는 정보가 통째로 소실!). 그러면 $y = 1.00$, 역대입에서 $0.0001x = 1 - 1.00 = 0$ → $x = 0$. **참값** $x \approx 1$ **인데** $0$ **이 나왔다 — 100% 오답.** - **행 교환 후** (피벗 $1$): $x + y = 2$ 를 위로. $\ell = \dfrac{0.0001}{1} = 0.0001$. 1행 갱신: $(1 - 0.0001)y = 1 - 0.0002$ → 3자리로 $1.00\,y = 1.00$ → $y = 1.00$, $x = 2 - 1.00 = 1.00$. **3자리 정밀도 안에서 정확하다.** - 💡 행렬은 특이행렬 근처도 아니고 문제 자체는 멀쩡하다 — 순전히 **피벗 선택** 때문에 결과가 0점과 100점으로 갈렸다. - **왜 "가장 큰 수"를 피벗으로 고르면 해결되는가**: - - 같은 열에서 절댓값이 가장 큰 수를 피벗으로 올리면, 모든 승수가 $\ell = \dfrac{\text{지울 성분}}{\text{피벗}}$ 에서 분자 ≤ 분모가 되어 **항상 $|\ell| \le 1$** 이 보장된다. + - 같은 열에서 절댓값이 가장 큰 수를 피벗으로 올리면, 모든 승수가 $\ell = \dfrac{\text{지울 성분}}{\text{피벗}}$ 에서 분자 ≤ 분모가 되어 **항상** $|\ell| \le 1$ 이 보장된다. - 📌 원문 (p.107): ((6a635d42-c493-49c3-be5e-3a661e755e22)) - $|\ell| \le 1$ 이면: 곱해서 빼는 양이 원래 행과 비슷한 크기 → 자릿수 소실이 없고, 기존 오차도 곱셈으로 **커지지 않는다** (1 이하를 곱하면 같거나 작아질 뿐). 위 사슬 ②③이 원천 차단된다. - - **"$L$ 의 성분이 1 이하"의 뜻** — 어려운 말이 아니다: - - [[2.3 행렬 계산과 A = LU]]에서 봤듯 $L$ 의 주대각선 아래 성분들은 **정확히 승수 $\ell_{ij}$ 들**이다. 그러니 "부분피벗을 하면 $L$ 의 모든 성분이 1 이하"라는 문장은 = "**모든 단계의 승수가 $|\ell| \le 1$**"의 다른 표현일 뿐이다. + - **"** $L$ **의 성분이 1 이하"의 뜻** — 어려운 말이 아니다: + - [[2.3 행렬 계산과 A = LU]]에서 봤듯 $L$ 의 주대각선 아래 성분들은 **정확히 승수** $\ell_{ij}$ **들**이다. 그러니 "부분피벗을 하면 $L$ 의 모든 성분이 1 이하"라는 문장은 = "**모든 단계의 승수가** $|\ell| \le 1$"의 다른 표현일 뿐이다. - 📌 원문 (p.107): ((6a635d3f-54ac-451b-9c25-98e20dfdc20f)) - 즉 완성된 $L$ 을 보면 그 소거가 수치적으로 안전했는지 한눈에 보인다 — 성분이 전부 1 이하면 오차를 증폭시킨 단계가 하나도 없었다는 증거다. - ⚠️ 수학적으로는 0만 아니면 피벗이 될 수 있지만, 컴퓨터에서는 **크기**가 중요하다 — "필요한 교환"(피벗이 0일 때, 수학적 필수)과 "안전을 위한 교환"(피벗이 작을 때, 수치적 선택)을 구분할 것. 부분피벗은 후자다.