fix: 2.4 부분피벗 보강분의 볼드-수식 중첩 5곳 수정, 검사 스크립트에 exit 코드 추가
- 직전 커밋에서 검사가 위반을 잡고도 exit 0이라 커밋이 통과한 구멍 수정 - CLAUDE.md 검사 스크립트: 위반 시 exit 1 → '검사 && git commit' 체인으로 커밋 차단 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G8rNxLqi5rYjRamC8uwiJW
This commit is contained in:
parent
82590cbd74
commit
467027e372
@ -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)"
|
||||
```
|
||||
- 언어는 한국어. 수학·전문 용어는 필요시 영어 병기.
|
||||
- ## 정리 스타일 (기존 노트 기준)
|
||||
|
||||
@ -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일 때, 수학적 필수)과 "안전을 위한 교환"(피벗이 작을 때, 수치적 선택)을 구분할 것. 부분피벗은 후자다.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user