12강 / 20강
랭크 — 진짜 정보는 몇 줄인가
식이 셋이라고 조건이 셋인 건 아니다
세 사람에게 같은 질문을 했는데, 두 사람이 똑같은 대답을 했다고 합시다. 대답은 세 개지만 정보는 두 개죠. 행렬에서도 같은 일이 일어납니다.
[ 1 2 3 ]
[ 2 4 6 ] ← 1행의 2배. 새 정보 없음
[ 1 0 1 ]
줄은 셋인데 진짜 정보는 둘입니다. 이 "진짜 정보의 개수"가 랭크(rank)예요.
구하는 법은 이미 배웠습니다. 소거해서 남는 피벗의 개수가 랭크입니다. 베낀 줄은 소거 과정에서 저절로 0줄이 되어 사라져요.
소거 후 남는 0 아닌 줄의 개수 = 랭크.
Python
브라우저에서 실행
🎮 랭크가 뜻하는 모양
숫자를 바꿔 가며 랭크가 3, 2, 1, 0 이 되는 경우를 만들어 보세요. 랭크에 따라 세 열이 만들어 낼 수 있는 것이 공간 → 평면 → 직선 → 점 으로 줄어듭니다.
랭크가 답하는 질문들
랭크 하나만 알면 연립방정식에 대해 많은 것을 말할 수 있습니다.
A 가 m×n 이고 첨가행렬이 [A|b] 일 때:
| 조건 | 해 |
|---|---|
| rank A < rank [A|b] | 해가 없다 — b 가 열들로 안 만들어짐 |
| rank A = rank [A|b] = n | 해가 딱 하나 |
| rank A = rank [A|b] < n | 해가 무수히 — 자유변수 n − r 개 |
첫 줄이 핵심입니다. b 를 덧붙였더니 랭크가 올라갔다는 건, b 가 A 의 열들이 만드는 범위 바깥에 있다는 뜻이에요. 아무리 섞어도 못 만드니 해가 없는 겁니다.
b 를 붙였더니 랭크가 올라가면 = b 가 손 닿지 않는 곳에 있다.
Python
브라우저에서 실행
수치 랭크 — 컴퓨터의 고민
이론에서는 "0인가 아닌가"가 명확합니다. 그런데 컴퓨터의 실수 계산에서는 0.0000000001 같은 값이 나와요. 이게 진짜 0인데 오차가 낀 걸까요, 아니면 정말 작은 값일까요?
구분할 방법이 원리적으로 없습니다. 그래서 컴퓨터는 임계값을 정해 놓고 그보다 작으면 0으로 칩니다. 이렇게 정한 랭크를 수치 랭크라고 해요.
더 믿을 만한 방법은 20강 특잇값 분해를 쓰는 것입니다. 특잇값들이 얼마나 급격히 작아지는지를 보면 "실질적으로 몇 차원짜리 데이터인가"를 훨씬 안정적으로 판단할 수 있어요.
실수 계산에서 '0인지 아닌지'는 생각보다 어려운 질문입니다.
Python
브라우저에서 실행
🤔 확인 문제
[[1,2],[2,4],[3,6]] 의 랭크는?해설 2행은 1행의 2배, 3행은 3배입니다. 전부 같은 정보를 되풀이한 것이라 랭크는 1 이에요. 행이 셋이라고 랭크가 3인 게 아닙니다.
🤔 확인 문제
A 가 5×3 행렬일 때 랭크가 될 수 없는 값은?해설
rank ≤ min(행 수, 열 수) = min(5, 3) = 3 입니다. 독립인 열이 3개뿐이니 랭크가 4가 될 수는 없어요.🤔 확인 문제
rank A = 2 인데 rank [A|b] = 3 이라면?해설 b 를 붙였더니 랭크가 올라갔다는 건 b 가 A 의 열들로 만들어지지 않는다는 뜻입니다. 아무리 섞어도 도달할 수 없으니 해가 없어요.