71강에서 행렬 에 딸린 부분공간 두 개를 보았습니다. 영공간 와 열공간 입니다.
그런데 도 행렬이므로 거기에도 두 개가 딸립니다. 그러면 네 개가 됩니다.
이 강의에서 네 공간의 관계를 완전히 밝힙니다. 결론은 두 가지입니다.
첫째, 네 차원이 계수 하나로 모두 정해집니다. 만 알면 나머지가 따라옵니다.
둘째, 두 쌍이 서로 직교합니다. 그것도 그냥 직교가 아니라 서로의 직교여공간이며, 그래서 공간이 정확히 둘로 갈립니다.
이 그림이 03단원의 결론이며, 82강의 최소제곱과 88강의 특이값 분해가 모두 이 위에 세워집니다.
문제. 을 봅니다.
(1) 네 부분공간을 정의하고 각각이 어느 에 사는지 쓰세요.
(2) 를 구하세요.
(3) 네 차원을 모두 구하세요.
생각의 실마리. (1)에서 가 이고 이 이므로, 네 공간이 두 개씩 짝지어 같은 곳에 삽니다.
풀이. (1) 는 이므로 , 입니다.
| 공간 | 정의 | 사는 곳 |
|---|---|---|
| 열공간 | 열들이 생성 | \mathbb{R}^ |
| 영공간 | A\mathbf{x}=\mathbf | \mathbb{R}^ |
| 행공간 | 행들이 생성 | \mathbb{R}^ |
| 좌영공간 | A^{\top}\mathbf{y}=\mathbf | \mathbb{R}^ |
에 두 개, 에 두 개입니다.
(2) 셋째 행이 첫째의 배와 둘째의 합입니다. 검산에서 입니다.
(3) 73강의 정리들로 모두 정해집니다.
| 공간 | 차원 | 값 |
|---|---|---|
검산에서 이 확인됩니다.
이 문제에서 배우는 것: 네 차원이 하나로 정해집니다.
차원 정리. 가 이고 이면
첫 줄은 73강 문제 3의 행계수 열계수입니다. 둘째 줄은 계수-퇴화차수 정리를 와 에 각각 적용한 것입니다.
"좌영공간"이라는 이름의 유래도 짚어 둡니다. 의 양변을 전치하면
이므로 를 왼쪽에서 곱해 영이 되는 벡터입니다. 그래서 좌영공간입니다.
네 공간이 두 개씩 같은 공간에 산다는 점이 이 강의의 열쇠입니다. 같은 곳에 살면 서로의 관계를 물을 수 있고, 문제 3에서 그것이 직교임이 드러납니다.
바로 확인 1.
확인 1-1. 네 부분공간의 이름을 쓰세요.
답. 열공간, 영공간, 행공간, 좌영공간입니다.
확인 1-2. 가 이고 계수가 일 때 네 차원을 쓰세요.
답. 입니다.
확인 1-3. 좌영공간이라 부르는 이유를 쓰세요.
답. 이므로 왼쪽에서 곱해 영이 되기 때문입니다.
문제. 문제 1의 에 대해 네 공간의 기저를 각각 구하세요.
(1) 기약행사다리꼴을 만드세요.
(2) 열공간과 행공간의 기저를 읽으세요.
(3) 영공간과 좌영공간의 기저를 구하세요.
생각의 실마리. 72강 심화 1에서 열공간 기저는 원래 열에서 골라야 한다고 했습니다. 행공간은 사정이 다릅니다. 행 연산이 행공간을 바꾸지 않으므로 RREF의 행을 그대로 써도 됩니다.
풀이. (1) 소거하면
이고 피벗 열이 입니다.
(2) 열공간은 의 첫째와 셋째 열입니다.
행공간은 RREF의 영이 아닌 행들입니다.
(3) 영공간은 자유변수 에 대해 73강 문제 4의 방법으로 구합니다.
좌영공간은 을 풀면
입니다. 실제로 셋째 행이 첫째의 배 더하기 둘째이므로 입니다. 행들 사이의 관계식입니다.
검산에서 모두 확인됩니다.
이 문제에서 배우는 것: 소거 한 번으로 넷을 얻습니다.
구하는 법.
공간 기저 열공간 원래 의 피벗 열 행공간 RREF의 영이 아닌 행 영공간 자유변수마다 특수해 하나 좌영공간 을 소거하거나 행 관계식
열공간과 행공간에서 규칙이 다른 이유를 다시 짚습니다.
| 행 연산이 보존하는가 | |
|---|---|
| 행공간 | 예 |
| 열공간 | 아닙니다 |
| 영공간 | 예 |
| 좌영공간 | 아닙니다 |
행 연산은 행들의 일차결합을 취하는 일이므로 행들이 생성하는 공간이 변하지 않습니다. 반면 열은 성분이 통째로 바뀌므로 열공간이 달라집니다. 72강 심화 1에서 보존되는 것은 열 자체가 아니라 열들 사이의 관계라고 한 이유입니다.
좌영공간의 의미도 중요합니다. 행들 사이의 일차 관계를 모은 것입니다. 계수가 이면 독립인 행이 개이고 나머지 개가 그것들로 만들어지므로, 관계식이 개 있습니다. 그래서 입니다.
바로 확인 2.
확인 2-1. 열공간 기저를 RREF에서 읽으면 안 되는 이유를 쓰세요.
답. 행 연산이 열공간을 바꾸기 때문입니다.
확인 2-2. 행공간 기저는 RREF에서 읽어도 됩니까?
답. 됩니다. 행 연산이 행공간을 보존합니다.
확인 2-3. 좌영공간의 원소가 뜻하는 것을 쓰세요.
답. 행들 사이의 일차 관계식의 계수입니다.
문제. 문제 2에서 구한 기저들로 다음을 계산하세요.
(1) 행공간 기저와 영공간 기저의 내적
(2) 열공간 기저와 좌영공간 기저의 내적
(3) 관찰한 것을 정리하고 증명하세요.
생각의 실마리. (3)에서 을 성분이 아니라 행 단위로 읽어 봅니다. 66강 문제 1에서 의 번째 성분이 번째 행과 의 내적이었습니다.
풀이. (1) 검산에서 모든 내적이 입니다.
(2) 역시 입니다.
(3) 정리합니다.
이 문제에서 배우는 것: 직교 관계.
직교 정리.
증명이 한 줄입니다. 이면 인데, 이것을 행 단위로 읽으면
입니다. 가 모든 행과 수직이므로 행들의 일차결합과도 수직이고, 따라서 행공간 전체와 수직입니다.
""이라는 식을 이렇게 읽는 것이 이 강의의 전환점입니다. 방정식을 푸는 문제가 수직인 방향을 찾는 문제가 됩니다.
둘째 줄은 같은 논증을 에 적용한 것입니다.
그런데 단순한 직교가 아닙니다. 차원을 보면 더 강한 사실이 나옵니다.
두 공간의 차원이 딱 맞아떨어집니다. 그러면 서로가 서로의 직교여공간입니다.
직교여공간. 에 대해
를 의 직교여공간이라 합니다.
정리하면 이렇습니다.
단순히 수직인 것과 직교여공간인 것은 다릅니다. 에서 축은 축과 수직이지만, 축의 직교여공간은 평면 전체입니다. 여기서는 차원이 정확히 채워지므로 여공간입니다.
이 사실이 왜 강력한지 봅니다. 이 정확히 둘로 갈립니다.
73강 문제 5의 직합이며, 두 공간이 직교하므로 교집합이 입니다. 실제로 가 양쪽에 있으면 자기 자신과 수직이라 입니다.
바로 확인 3.
확인 3-1. 을 직교의 언어로 다시 쓰세요.
답. 가 의 모든 행과 수직이라는 뜻입니다.
확인 3-2. 두 쌍의 직교 관계를 쓰세요.
답. 영공간과 행공간, 좌영공간과 열공간이 각각 직교합니다.
확인 3-3. "수직"과 "직교여공간"의 차이를 쓰세요.
답. 여공간은 수직이면서 차원이 딱 채워져 공간을 둘로 가릅니다.
문제. 네 공간의 관계를 하나의 그림으로 정리하려 합니다.
(1) 과 에 각각 무엇이 있는지 쓰세요.
(2) 가 각 부분을 어디로 보내는지 쓰세요.
(3) 전체 구조를 서술하세요.
생각의 실마리. 를 인 변환으로 보고, 입력 쪽 두 조각이 각각 어떻게 되는지 따라갑니다.
풀이. (1) 각각 두 조각으로 갈립니다.
검산에서 이고 으로 확인됩니다.
(2) 영공간은 정의상 으로 갑니다. 행공간은 열공간으로 갑니다.
(3) 전체 구조를 서술합니다.
이 문제에서 배우는 것: 선형대수의 기본 정리.
구조. 는 을 둘로 가르고 각각을 이렇게 다룹니다.
입력 쪽 의 작용 출력 쪽 영공간 () 전부 으로 뭉갭니다 행공간 () 일대일로 옮깁니다 열공간 () 그리고 좌영공간 ()은 로 도달할 수 없는 부분입니다.
둘째 줄의 "일대일"이 핵심입니다. 증명해 봅니다.
행공간의 두 벡터 에 대해 라 하면 이므로 입니다. 그런데 는 행공간에도 있고, 두 공간의 교집합이 이므로
입니다. 행공간에 제한하면 가 단사입니다. 그리고 상이 열공간 전체이므로 전단사이며, 차원이 양쪽 다 인 것과 일관됩니다.
**이것을 "선형대수의 기본 정리"**라 부릅니다. 73강의 계수-퇴화차수 정리에 직교 구조를 더한 것입니다.
두 정리를 비교합니다.
| 정리 | 말하는 것 |
|---|---|
| 계수-퇴화차수 (73강) | 차원이 과 로 갈립니다 |
| 기본 정리 (74강) | 그 두 조각이 직교하고, 하나는 뭉개지고 하나는 동형으로 옮겨집니다 |
후자가 더 강합니다. 차원만 세는 것이 아니라 어디가 어디로 가는지까지 말합니다.
이 그림에서 68강의 결과들이 다시 읽힙니다.
| 68강 | 지금 |
|---|---|
| 해가 존재 | , 즉 가 좌영공간 성분이 없습니다 |
| 해가 유일 | , 뭉개지는 조각이 없습니다 |
| 해집합 | , 영공간 방향으로 뻗은 아핀 집합 |
바로 확인 4.
확인 4-1. 가 행공간을 어디로 보냅니까?
답. 열공간으로 일대일로 옮깁니다.
확인 4-2. 그것이 일대일인 이유를 쓰세요.
답. 차가 영공간에 있는데 행공간과의 교집합이 이기 때문입니다.
확인 4-3. 좌영공간의 뜻을 한 문장으로 쓰세요.
답. 로는 도달할 수 없는 방향들입니다.
문제. 을 봅니다.
(1) 행공간 성분과 영공간 성분으로 가르세요.
(2) 와 을 비교하세요.
(3) 무엇이 관찰됩니까?
생각의 실마리. 64강의 정사영을 부분공간으로 확장합니다. 행공간의 기저를 행으로 담은 에 대해
이 행공간으로의 정사영입니다. 82강에서 유도하며 지금은 도구로 씁니다.
풀이. (1) 검산에서
이고 입니다.
(2) 둘 다 로 같습니다.
(3) 영공간 성분은 를 통과할 때 사라집니다.
또 피타고라스 정리가 성립합니다. 검산에서 세 값이 모두 입니다.
이 문제에서 배우는 것: 분해의 의미.
분해. 모든 은
로 유일하게 갈라지며 두 성분은 직교합니다.
63강의 피타고라스 정리가 그대로 성립합니다. 두 성분이 수직이기 때문입니다.
이 분해가 주는 해석이 여럿입니다.
| 성분 | 뜻 |
|---|---|
| \mathbf{x}_ | 가 보는 부분 |
| \mathbf{x}_ | 가 보지 못하는 부분 |
만 관측할 수 있다면 은 결코 알 수 없습니다. 정보가 완전히 사라집니다.
여기서 최소 노름 해가 나옵니다. 의 해가 무수히 많을 때, 해집합은 인데 그중
입니다. 다른 해는 그것에 영공간 성분을 더한 것이고, 피타고라스 정리에서
이기 때문입니다.
검산에서 확인합니다. pinv로 얻은 해의 노름이 이고 행공간에 있으며, 영공간 방향을 더하면 노름이 , , 로 커집니다. 전부 여전히 해인데 더 깁니다.
83강의 의사역행렬이 이 해를 줍니다. 69강 심화 5에서 "부족결정계에서 해를 고르는 규칙"이라고 한 것이 여기서 기하적 정체를 얻습니다. 영공간 성분을 으로 두는 것입니다.
같은 분해를 출력 쪽에서 하면 최소제곱이 나옵니다.
에 해가 없는 것은 이기 때문이고, 그 부분을 포기하고 만 맞추는 것이 최소제곱입니다. 82강의 주제입니다.
바로 확인 5.
확인 5-1. 인 이유를 쓰세요.
답. 영공간 성분이 에 의해 이 되기 때문입니다.
확인 5-2. 최소 노름 해가 어디에 있습니까?
답. 행공간에 있습니다.
확인 5-3. 해가 없는 것을 네 공간의 언어로 설명하세요.
답. 에 좌영공간 성분이 있기 때문입니다.
| 공간 | 정의 | 사는 곳 | 차원 |
|---|---|---|---|
| 열들이 생성 | \mathbb{R}^ | ||
| A\mathbf{x}=\mathbf | \mathbb{R}^ | ||
| 행들이 생성 | \mathbb{R}^ | ||
| A^{\top}\mathbf{y}=\mathbf | \mathbb{R}^ |
| 직교 관계 | |
|---|---|
| \mathcal{N}(A)=\mathcal{C}(A^{\top})^ | 에서 |
| \mathcal{N}(A^{\top})=\mathcal{C}(A)^ | 에서 |
| 직합 | |
| 직합 |
| 기저 구하기 | 방법 |
|---|---|
| 열공간 | 원래 의 피벗 열 |
| 행공간 | RREF의 영 아닌 행 |
| 영공간 | 자유변수마다 특수해 |
| 좌영공간 | 행들 사이의 관계식 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 열공간 기저를 RREF에서 읽습니다 | 원래 열을 씁니다 |
| 행공간도 원래 행이라 생각합니다 | RREF 행을 써도 됩니다 |
| 좌영공간 차원을 이라 합니다 | 입니다 |
| 수직이면 여공간이라 합니다 | 차원이 채워져야 합니다 |
문제 6. 네 부분공간의 이름과 사는 곳을 쓰세요.
답. 열공간과 좌영공간은 에, 영공간과 행공간은 에 있습니다.
문제 7. 가 이고 계수가 일 때 네 차원을 쓰세요.
답. 입니다.
문제 8. 두 쌍의 직교 관계를 쓰세요.
답. 영공간 행공간, 좌영공간 열공간입니다.
문제 9. 을 직교로 다시 쓰세요.
답. 가 모든 행과 수직입니다.
문제 10. 열공간 기저를 어디서 읽습니까?
답. 원래 의 피벗 열입니다.
문제 11. 행공간 기저를 어디서 읽습니까?
답. RREF의 영이 아닌 행입니다.
문제 12. 좌영공간의 원소가 뜻하는 것을 쓰세요.
답. 행들 사이의 일차 관계식입니다.
문제 13. 가 행공간을 어디로 보냅니까?
답. 열공간으로 일대일로 옮깁니다.
문제 14. 의 직합 분해를 쓰세요.
답. 입니다.
문제 15. 인 이유를 쓰세요.
답. 영공간 성분이 사라지기 때문입니다.
문제 16. 최소 노름 해가 어디에 있는지와 그 이유를 쓰세요.
답. 행공간에 있으며 피타고라스 정리로 다른 해보다 짧습니다.
문제 17. 에 해가 없는 이유를 네 공간으로 설명하세요.
답. 에 좌영공간 성분이 있기 때문입니다.
문제 18. 가 정사각이고 가역일 때 네 공간을 쓰세요.
답. 열공간과 행공간이 전체이고 두 영공간은 입니다.
심화 1. 직교여공간의 성질을 정리하고 를 증명하세요.
풀이. 이 부분공간일 때 의 성질을 봅니다.
은 부분공간입니다. 이 모든 것과 수직이고, 가 의 모든 원소와 수직이면 도 그렇습니다. 내적이 선형이기 때문입니다.
입니다. 가 양쪽에 있으면 자기 자신과 수직이라 입니다. 63강의 양정치성이 쓰입니다.
입니다. 의 기저를 행으로 담은 행렬 를 만들면
입니다. 이므로 문제 3의 관계이고, 계수-퇴화차수에서
입니다.
이제 를 증명합니다.
한쪽은 쉽습니다. 이면 의 모든 원소와 수직이므로 입니다.
반대쪽은 차원으로 얻습니다. 위 결과를 에 적용하면
입니다. 포함 관계가 있고 차원이 같으므로 73강 문제 2에서 두 공간이 같습니다.
증명의 구조가 인상적입니다. 포함은 정의에서, 등호는 차원 세기에서 나옵니다. 직접 구성하지 않고도 결론이 나옵니다.
이 결과로 문제 3의 관계식이 대칭적으로 정리됩니다.
행공간을 "영공간에 수직인 것 전부"로 기술할 수 있습니다. 71강 문제 4에서 부분공간을 기술하는 두 방식(생성과 방정식)을 말했는데, 직교여공간이 그 둘을 바꾸는 장치입니다.
| 기술 | 방식 |
|---|---|
| 생성 (만듭니다) | |
| ... | |
| 방정식 (거릅니다) |
심화 2. 프레드홀름 택일 정리를 진술하고 증명하세요.
풀이. 가 해를 가질 조건은 였습니다. 그것을 확인하려면 열공간을 직접 계산해야 합니다. 더 편한 판정법이 있습니다.
프레드홀름 택일 정리. 다음 둘 중 정확히 하나가 성립합니다.
- 가 해를 가집니다.
- 이고 인 가 있습니다.
증명. 문제 3에서 이었고, 심화 1에서 이므로
입니다. 따라서
입니다. 이 조건이 깨지는 것이 2번입니다.
실용적 가치를 봅니다. 해가 없음을 보이려면 조건 2의 하나만 제시하면 됩니다. 완결된 증거입니다.
문제 1의 에서 좌영공간이 로 생성되므로
입니다. 조건 하나로 정리되었습니다. 이면 이므로 해가 없습니다.
이 정리가 나타나는 곳이 많습니다.
| 분야 | 형태 |
|---|---|
| 선형계획 | 쌍대성 정리 |
| 볼록해석 | 분리 초평면 정리 |
| 미분방정식 | 적분 조건 (가해성) |
| 최적화 | KKT 조건의 상보성 |
셋째 줄이 이름의 유래입니다. 적분방정식에서 해가 존재할 조건이 "우변이 수반 문제의 해와 직교"인 형태로 나오며, 프레드홀름이 그것을 다뤘습니다.
첫째 줄도 같은 구조입니다. "원 문제에 해가 있다" 또는 "쌍대 문제에 증서가 있다" 중 하나가 성립합니다. 209강대의 최적화에서 다시 봅니다.
심화 3. 네 부분공간을 특이값 분해로 다시 보세요.
풀이. 88강에서 정식으로 다루지만, 이 강의의 그림이 거기서 어떻게 완성되는지 미리 봅니다.
특이값 분해는 이며 가 직교행렬이고 가 대각입니다. **의 대각에 개의 양수 이 있고 나머지는 **입니다.
검산에서 문제 1의 의 특이값이
이고 이 아닌 것이 개로 계수와 같습니다.
네 부분공간의 기저가 의 열에서 바로 나옵니다.
| 공간 | 기저 |
|---|---|
| 의 앞 개 열 | |
| 의 나머지 열 | |
| 의 앞 개 열 | |
| 의 나머지 열 |
와 가 직교행렬이므로 이 기저들은 정규직교입니다. 소거로 구한 기저는 직교가 아니었는데, 특이값 분해는 직교 기저를 줍니다.
그리고 문제 4의 그림이 더 선명해집니다. 를 의 번째 열이라 하면
입니다. 행공간의 기저 방향이 열공간의 기저 방향으로 배 되어 갑니다.
문제 4에서 "행공간이 열공간으로 일대일로 옮겨진다"고 했는데, 그 일대일 대응이 정확히 무엇인지를 특이값 분해가 알려 줍니다. 방향마다 늘어나는 비율이 다르며 그 비율이 특이값입니다.
수치적 이점도 큽니다.
| 방법 | 계수 판정 |
|---|---|
| 소거 | 피벗이 인가 (문턱에 민감) |
| SVD | 특이값이 문턱보다 큰가 |
72강 심화 4에서 matrix_rank가 특이값을 쓴다고 했는데, 이 때문입니다. 소거는 반올림에 취약하지만 특이값은 안정적입니다.
심화 4. 네 부분공간의 그림이 최소제곱과 최소 노름 해를 어떻게 설명하는지 정리하세요.
풀이. 82강과 83강의 내용을 이 강의의 언어로 미리 봅니다.
과결정: 에 좌영공간 성분이 있습니다.
에 해가 없는 것은 에서 이기 때문입니다. 는 언제나 안에 있으므로 을 만들 방법이 없습니다.
그러면 도달 가능한 것 중 가장 가까운 것을 겨냥합니다. 64강의 최소 거리 정리에서 그것이 정사영 입니다.
잔차가 좌영공간에 있다는 것이 정규방정식의 정체입니다.
82강의 정규방정식이 세 줄 만에 나왔습니다. 네 부분공간의 직교 관계 하나에서 따라옵니다.
부족결정: 해집합이 영공간만큼 뻗어 있습니다.
문제 5에서 본 대로 행공간에 있는 해가 최소 노름입니다.
둘 다인 경우도 있습니다. 가 과결정이면서 계수가 부족하면, 최소제곱 해가 무수히 많고 그중 최소 노름인 것을 고릅니다. 의사역행렬 가 정확히 그 해를 줍니다.
| 상황 | 가 주는 것 | 어느 공간이 관여하는가 |
|---|---|---|
| 가역 | 정확한 해 | 없습니다 |
| 과결정 | 최소제곱 해 | 좌영공간 (잔차) |
| 부족결정 | 최소 노름 해 | 영공간 (자유도) |
| 둘 다 | 최소제곱 중 최소 노름 | 둘 다 |
두 영공간이 두 종류의 결함을 각각 담당합니다. 좌영공간은 "맞출 수 없는 부분"이고 영공간은 "정할 수 없는 부분"입니다.
68강에서 존재와 유일성을 따로 다뤘는데, 각각이 하나의 부분공간에 대응합니다.
심화 5. 네 부분공간이 실무 문제에서 어떻게 해석되는지 정리하세요.
풀이. 추상적인 네 공간이 실제 문제에서 무엇을 뜻하는지 봅니다.
회귀에서. 가 설계행렬이고 가 관측이면
| 공간 | 해석 |
|---|---|
| 모형이 설명할 수 있는 것 전부 | |
| 잔차가 사는 곳, 자유도 | |
| 식별되지 않는 계수 방향 | |
| 식별되는 계수 방향 |
셋째 줄이 다중공선성입니다. 영공간 방향으로 계수를 움직여도 예측이 똑같으므로, 데이터가 그 방향을 결정하지 못합니다.
회로에서. 키르히호프 법칙이 정확히 이 구조입니다. 가 관련행렬일 때
| 공간 | 해석 |
|---|---|
| 전류 법칙을 만족하는 순환 전류 | |
| 전위차로 표현되는 전압 | |
| 전압 법칙의 독립 루프 |
**그래프의 순환 개수가 **이며, 오일러 공식과 이어집니다.
신호처리에서. 측정 행렬 가 신호를 관측으로 옮기면
| 공간 | 해석 |
|---|---|
| 관측되지 않는 신호 성분 | |
| 만들어 낼 수 있는 관측 |
CT나 MRI에서 각도가 부족하면 영공간이 커지고, 그만큼 복원이 불확정해집니다. 69강 심화 5의 부족결정계이며, 추가 가정으로 메웁니다.
추천 시스템에서. 사용자-항목 행렬이 저계수라 가정하면, 관측된 항목이 의 일부를 알려 주고 나머지를 그 구조로 채웁니다. 73강 심화 5의 저계수 근사입니다.
공통 원리를 정리합니다.
| 부분공간 | 실무적 의미 |
|---|---|
| 도달 가능한 것 | |
| 도달 불가능한 것 (오차의 자리) | |
| 식별 가능한 것 | |
| 식별 불가능한 것 (모호성의 자리) |
두 영공간이 문제의 한계를 정확히 표시합니다. 모형을 세울 때 "무엇을 알 수 없는가"를 먼저 파악하는 것이 중요하며, 그 답이 영공간과 좌영공간입니다.
심화 6. 부분공간을 수치적으로 다룰 때의 주의점을 논하세요.
풀이. 이론에서 네 공간은 정확히 정해집니다. 데이터에서는 그렇지 않습니다.
첫째, 계수가 문턱에 의존합니다.
검산에서 특이값이 으로 셋째가 정확히 이었습니다. 이것은 가 정확한 정수 성분을 갖기 때문이며, 실제 데이터에서는 같은 값이 나옵니다. 그것을 으로 볼지가 판정을 바꿉니다.
| 문턱 | 결과 |
|---|---|
| 너무 크게 | 실제 신호를 잡음으로 버립니다 |
| 너무 작게 | 잡음을 신호로 삼아 불안정해집니다 |
matrix_rank의 기본 문턱은 정도이며, 가장 큰 특이값에 비례합니다. 절대 크기가 아니라 상대 크기로 판단합니다.
둘째, "거의 영공간"이 실질적으로 영공간처럼 행동합니다.
특이값이 인 방향은 이론상 영공간이 아니지만, 그 방향의 정보를 복원하려면 을 곱해야 하므로 잡음이 함께 배 커집니다. 실질적으로 알 수 없습니다.
이것이 91강의 조건수 이야기와 이어집니다.
이 크면 작은 특이값 방향이 사실상 영공간이며, 67강 심화 6에서 본 "문제가 나쁜" 경우입니다.
셋째, 기저의 선택이 안정성을 바꿉니다.
소거로 구한 기저는 직교가 아니고, 벡터들이 거의 평행할 수 있습니다. 그러면 좌표 계산이 불안정합니다. **직교 기저를 쓰면 조건수가 **이므로 안전합니다.
| 방법 | 얻는 기저 | 안정성 |
|---|---|---|
| 소거 (RREF) | 일반 기저 | 나쁠 수 있습니다 |
| 그람슈미트 (80강) | 정규직교 | 좋습니다 (변형판) |
| QR (80강) | 정규직교 | 좋습니다 |
| SVD (88강) | 정규직교 | 가장 좋습니다 |
실무에서 네 부분공간의 기저가 필요하면 SVD를 씁니다. 소거는 손계산과 이해에 쓰고, 계산은 분해에 맡깁니다. 69강과 70강에서 반복한 원칙이 여기서도 같습니다.
이 강의에서는 numpy만 씁니다. 소거로 네 기저를 모두 구하고 직교 관계를 직접 확인하며, 분해와 최소 노름 해까지 봅니다. 직교는 내적이 인지 보면 되므로 검산이 직접적입니다.
import numpy as np
def rref(M):
R = M.astype(float).copy(); m, n = R.shape; r = 0; piv = []
for c in range(n):
k = None
for i in range(r, m):
if abs(R[i, c]) > 1e-12: k = i; break
if k is None: continue
if k != r: R[[r, k]] = R[[k, r]]
R[r] = R[r] / R[r, c]
for i in range(m):
if i != r and abs(R[i, c]) > 1e-12: R[i] -= R[i, c] * R[r]
piv.append(c); r += 1
if r == m: break
return np.round(R, 10) + 0.0, piv
def nullbasis(A):
"""자유변수마다 특수해를 하나씩 만들어 영공간 기저를 돌려줍니다."""
R, p = rref(A); m, n = A.shape
free = [j for j in range(n) if j not in p]
B = []
for f in free:
v = np.zeros(n); v[f] = 1.0
for i, pc in enumerate(p): v[pc] = -R[i, f]
B.append(v)
return (np.column_stack(B) + 0.0 if B else np.zeros((n, 0)))
A = np.array([[1.,2.,0.,1.],[0.,0.,1.,3.],[2.,4.,1.,5.]])
m, n = A.shape; r = int(np.linalg.matrix_rank(A))
print(m, n, r) # 3 4 2
# --- 문제 1: 네 차원 -----------------------------------------------------
print(r, n-r, r, m-r) # 2 2 2 1
# --- 문제 2: 네 기저 -----------------------------------------------------
R, p = rref(A); print(R.tolist(), p)
# [[1.0, 2.0, 0.0, 1.0], [0.0, 0.0, 1.0, 3.0], [0.0, 0.0, 0.0, 0.0]] [0, 2]
col = A[:, p]; print(col.tolist()) # 원래 열에서 고릅니다
# [[1.0, 0.0], [0.0, 1.0], [2.0, 1.0]]
row = R[:r, :]; print(row.tolist()) # RREF의 행을 그대로 씁니다
# [[1.0, 2.0, 0.0, 1.0], [0.0, 0.0, 1.0, 3.0]]
N = nullbasis(A); print(np.round(N, 10).tolist())
# [[-2.0, -1.0], [1.0, 0.0], [0.0, -3.0], [0.0, 1.0]]
NL = nullbasis(A.T); print(np.round(NL, 10).tolist())
# [[-2.0], [-1.0], [1.0]] (-2R1 - R2 + R3 = 0)
# --- 문제 3: 직교 관계 ---------------------------------------------------
print(np.round(row @ N, 12).tolist()) # 행공간 . 영공간
# [[0.0, 0.0], [0.0, 0.0]]
print(np.round(A @ N, 12).tolist())
# [[0.0, 0.0], [0.0, 0.0], [0.0, 0.0]]
print(np.round(NL.T @ col, 12).tolist()) # 좌영공간 . 열공간
# [[0.0, 0.0]]
print(np.round(NL.T @ A, 12).tolist())
# [[0.0, 0.0, 0.0, 0.0]]
# --- 문제 4: 차원의 합 ---------------------------------------------------
print(r + (n-r), n, r + (m-r), m) # 4 4 3 3
# --- 문제 5: 행공간 성분과 영공간 성분으로 가릅니다 ----------------------
x = np.array([1., 2., -1., 3.])
P_row = row.T @ np.linalg.solve(row @ row.T, row) # 행공간으로의 정사영
xr = P_row @ x; xn = x - xr
print(np.round(xr, 8).tolist())
# [1.09803922, 2.19607843, 0.47058824, 2.50980392]
print(np.round(xn, 8).tolist())
# [-0.09803922, -0.19607843, -1.47058824, 0.49019608]
print("%.12f" % float(xr @ xn)) # -0.000000000000 (직교)
print(np.round(A@x, 8).tolist(), np.round(A@xr, 8).tolist())
# [8.0, 8.0, 24.0] [8.0, 8.0, 24.0] (영공간 성분은 사라집니다)
print("%.8f %.8f %.8f" % (np.linalg.norm(x)**2,
np.linalg.norm(xr)**2 + np.linalg.norm(xn)**2, np.linalg.norm(x)**2))
# 15.00000000 15.00000000 15.00000000 (피타고라스)
# --- 문제 5: 최소 노름 해는 행공간에 있습니다 ---------------------------
b = A @ np.array([1.,0.,2.,0.])
xp = np.linalg.pinv(A) @ b
print(np.round(xp, 8).tolist(), np.allclose(A@xp, b))
# [0.07843137, 0.15686275, 0.17647059, 0.60784314] True
print("%.8f" % float(np.linalg.norm(xp)), np.allclose(P_row @ xp, xp))
# 0.65678958 True (행공간에 있습니다)
for t in [0.5, -1.0, 2.0]:
cand = xp + t*N[:, 0]
print("%.8f" % float(np.linalg.norm(cand)), bool(np.allclose(A@cand, b)))
# 1.29667750 True
# 2.33053053 True
# 4.52010758 True (전부 해인데 더 깁니다)
# --- 심화 3: 특이값으로 계수를 셉니다 -----------------------------------
U, s, Vt = np.linalg.svd(A)
print(np.round(s, 8).tolist()) # [7.52282977, 2.32530261, 0.0]
print(int(np.sum(s > 1e-10))) # 2
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 네 차원이 이고 합이 각각 와 입니다. 입력 쪽과 출력 쪽이 정확히 채워집니다.
둘째, 기저를 구하는 규칙이 공간마다 다릅니다. 열공간은 원래 의 첫째·셋째 열이고, 행공간은 RREF의 두 행입니다. 좌영공간의 은 이라는 행 관계식 그대로입니다.
셋째가 이 강의의 중심입니다. **네 개의 내적 계산이 모두 정확히 **입니다. 행공간과 영공간, 좌영공간과 열공간이 각각 수직입니다. NL.T @ A가 영벡터인 것은 좌영공간이 의 모든 열과 수직이라는 뜻입니다.
넷째, 분해에서 영공간 성분이 를 통과하며 사라집니다. 와 이 둘 다 입니다. 그리고 피타고라스 정리가 로 정확히 성립합니다.
다섯째, 최소 노름 해가 행공간에 있고 노름이 입니다. 영공간 방향을 더한 세 후보는 여전히 해인데 노름이 , , 로 커집니다. 83강의 의사역행렬이 무엇을 고르는지가 눈에 보입니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 몇 개의 기저 벡터가 수직이라고 두 공간 전체가 직교하는 것은 아닙니다. 다만 기저끼리 수직이면 일차결합끼리도 수직이므로 이 경우는 충분하며, 그 논리는 문제 3의 증명이 맡습니다. 또 특이값 셋째가 0.0으로 출력되었지만 이것은 소수 여덟째 자리까지 반올림한 결과이며, 실제로는 기계 정밀도 수준의 값입니다. 문턱 으로 세었고 그 선택이 결과를 좌우한다는 점이 심화 6의 주제입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 열공간 | 열들이 생성합니다 | |
| 영공간 | 입니다 | |
| 행공간 | 행들이 생성합니다 | |
| 좌영공간 | 입니다 | |
| W^ | 직교여공간 | 의 모든 것과 수직입니다 |
| 직합 | 교집합이 입니다 | |
| A^ | 의사역행렬 | 최소제곱 중 최소 노름을 줍니다 |
| 프레드홀름 | Fredholm | 존재의 택일 정리입니다 |
다음 75강에서는 기저를 바꾸는 일을 다룹니다. 72강에서 같은 벡터가 기저에 따라 다른 좌표를 갖는 것을 보았는데, 두 좌표 사이의 변환이 행렬 곱으로 표현됩니다. 그것이 04단원에서 행렬을 선형변환으로 읽고 닮음을 다루는 준비이며, 85강의 대각화가 "가장 좋은 기저를 고르는 일"임을 이해하는 바탕입니다.