85강에서 대각화의 두 가지 실패를 보았습니다.
첫째, 아예 안 되는 경우가 있습니다. 결손 행렬이 그렇습니다.
둘째, 되어도 쓸모없는 경우가 있습니다. 의 조건수가 크면 을 곱하는 계산에서 오차가 증폭됩니다.
그런데 한 종류의 행렬에서는 두 문제가 모두 사라집니다.
대칭행렬은 언제나 대각화되고, 게다가 가 직교행렬이라 조건수가 정확히 입니다.
이것이 스펙트럼 정리이며, 이 과목에서 가장 중요한 정리입니다. 87강의 이차형식, 88강의 특이값 분해, 89강의 주성분분석이 모두 이 정리 위에 세워집니다.
그리고 대칭행렬이 우연히 나오는 것이 아닙니다. 73강 심화 2의 , 80강의 정사영, 82강의 헤세 행렬, 확률의 공분산이 모두 대칭입니다. 실무에서 만나는 행렬의 상당수가 대칭입니다.
문제. 무작위 대칭행렬과 일반 행렬의 고유값을 비교합니다.
(1) 각각의 허수부를 확인하세요.
(2) 대칭이면 실수임을 증명하세요.
(3) 어디서 대칭성이 쓰였는지 짚으세요.
생각의 실마리. 복소수를 허용하고 시작합니다. 의 양변에 을 곱하면 63강 심화 6의 복소 내적이 나옵니다.
풀이. (1) 검산에서 세 크기 모두 대칭행렬의 허수부가 정확히 입니다. 일반 행렬은 허수부가 , , 로 나옵니다.
(2) 증명합니다. 가 실대칭이고 , 이라 합니다. 켤레 전치를 으로 씁니다.
같은 식을 다른 방향으로 계산합니다. 가 실대칭이므로 이고
즉 가 자기 켤레와 같으므로 실수입니다.
한편 으로 실수이고 양수입니다. 따라서
(3) 가 결정적이었습니다. 대칭이 아니면 가 되어 원래 값과 다릅니다.
이 문제에서 배우는 것: 실고유값.
정리. 실대칭행렬의 고유값은 모두 실수입니다.
**84강 문제 5에서 회전행렬의 고유값이 **였습니다. 회전행렬은 대칭이 아닙니다.
대칭이면 회전 성분이 없다는 뜻이며, 84강 심화 3에서 복소 고유값이 회전을 뜻한다고 한 것과 맞물립니다.
증명에 쓴 양 가 중요합니다. 실벡터에 대해
이며 87강의 이차형식입니다. 이 강의의 심화 1에서 레일리 몫으로 다시 나옵니다.
복소수로 확장하면 대칭 대신 에르미트 조건이 됩니다.
같은 증명이 그대로 통하며, 양자역학의 관측량이 에르미트인 이유가 측정값이 실수여야 하기 때문입니다.
바로 확인 1.
확인 1-1. 대칭행렬의 고유값이 실수임을 증명하는 핵심 식을 쓰세요.
답. 이며 분자와 분모가 모두 실수입니다.
확인 1-2. 어디서 대칭성이 쓰입니까?
답. 가 자기 켤레와 같음을 보일 때입니다.
확인 1-3. 복소수 범위의 대응 조건을 쓰세요.
답. 에르미트 입니다.
문제. 를 봅니다.
(1) 고유값과 고유벡터를 구하세요.
(2) 고유벡터끼리의 내적을 확인하세요.
(3) 서로 다른 고유값에 대해 증명하세요.
생각의 실마리. (3)에서 를 두 방향으로 계산합니다. 를 왼쪽에 붙이느냐 오른쪽에 붙이느냐인데, 대칭이면 같습니다.
풀이. (1) 검산에서 고유값이
이고 eigh가 정규직교 고유벡터를 줍니다.
(2) 이고 세 쌍의 내적이 모두 입니다.
(3) , 이고 라 합니다.
셋째 등호에서 대칭성을 썼습니다. 정리하면
이므로 입니다.
이 문제에서 배우는 것: 직교성.
정리. 대칭행렬의 서로 다른 고유값에 대응하는 고유벡터는 직교합니다.
66강 문제 4의 관계가 증명의 핵심이었습니다.
그때 "를 왼쪽에서 오른쪽으로 옮기면 전치가 된다"고 했고, 대칭이면 옮겨도 그대로입니다.
이 성질을 자기수반이라 하며, 76강 심화 6에서 좌표 없는 진술로 적어 둔 것입니다.
같은 고유값 안에서는 어떻습니까. 정리가 직접 말해 주지 않지만, 고유공간 안에서 80강의 그람슈미트를 적용하면 정규직교기저를 만들 수 있습니다. 그러면 전체가 정규직교가 됩니다.
대칭이 아니면 성립하지 않습니다. 84강 문제 5의 삼각행렬
은 고유값이 모두 다른데 고유벡터가 직교하지 않습니다. 85강 심화 3에서 본 대로 왼쪽 고유벡터와 오른쪽 고유벡터가 다르기 때문입니다.
바로 확인 2.
확인 2-1. 직교성 증명의 핵심 등식을 쓰세요.
답. 입니다.
확인 2-2. 어디서 대칭성이 쓰입니까?
답. 로 넘어갈 때입니다.
확인 2-3. 고유값이 중복이면 어떻게 합니까?
답. 그 고유공간 안에서 그람슈미트로 정규직교기저를 만듭니다.
문제. 문제 2의 에 대해
(1) 을 계산하세요.
(2) 사영의 합으로 쓰세요.
(3) 사영들의 성질을 확인하세요.
생각의 실마리. 85강 심화 3에서 이었습니다. **대칭이면 **가 되어 훨씬 깔끔해집니다.
풀이. (1) 검산에서 입니다.
(2) 열별로 펼치면
검산에서 세 항을 더한 것이 와 같습니다.
(3) 에 대해
검산에서 모두 True입니다.
이 문제에서 배우는 것: 스펙트럼 정리.
스펙트럼 정리. 실대칭행렬 에 대해 **정규직교 고유벡터로 이루어진 직교행렬 **가 존재해
입니다.
85강의 이 으로 바뀐 것이 핵심입니다. 역행렬을 계산할 필요가 없습니다.
각 가 80강의 정사영 행렬입니다. 방향으로의 정사영이며, 멱등이고 대칭입니다.
64강 문제 1의 정사영 공식이며 분모가 입니다.
가 뜻하는 것은 공간이 고유방향들로 완전히 갈린다는 것입니다.
각 방향의 성분에 그 고유값을 곱합니다. 85강 심화 1의 직합 분해가 직교 직합이 되었습니다.
중복 고유값을 묶으면 더 간결합니다. 서로 다른 고유값을 라 하고 각 고유공간으로의 정사영을 라 하면
의 계수가 그 고유값의 중복도이며, 83강 심화 2에서 정사영의 대각합이 차원이었습니다.
84강 문제 4의 관계가 여기서 다시 확인됩니다.
바로 확인 3.
확인 3-1. 스펙트럼 정리를 쓰세요.
답. 이며 가 직교행렬입니다.
확인 3-2. 사영의 합으로 쓴 형태를 쓰세요.
답. 입니다.
확인 3-3. 가 뜻하는 것을 쓰세요.
답. 공간이 고유방향들로 완전히 갈린다는 뜻입니다.
문제. 스펙트럼 분해의 안정성을 확인합니다.
(1) 의 조건수를 구하세요.
(2) 대칭이 아닌 경우와 비교하세요.
(3) 섭동에 대한 고유값의 변화를 재세요.
생각의 실마리. 85강 문제 5에서 가 로 폭발했습니다. **직교이면 조건수가 **이라 그 문제가 없습니다.
풀이. (1) 검산에서 입니다.
(2) 85강의 에서 입니다.
(3) 크기 인 대칭 섭동을 주고 고유값의 변화를 봅니다.
| 최대 고유값 변화 | 상한 | |
|---|---|---|
| 10^ | 5.195\times10^ | 10^ |
| 10^ | 9.165\times10^ | 10^ |
변화가 섭동 크기를 넘지 않습니다.
이 문제에서 배우는 것: 대칭행렬의 안정성.
바일 부등식. 가 대칭이면
입니다(고유값을 정렬했을 때).
증폭이 없습니다. 입력 오차가 이면 출력 오차도 입니다.
84강 심화 4에서 본 대비를 정리합니다.
| 행렬 | 고유값 민감도 |
|---|---|
| 대칭 | (증폭 없음) |
| 일반 (대각화 가능) | |
| 결손 | (급격) |
첫째 줄이 최선이며, 85강 심화 3에서 그 이유를 봤습니다. 왼쪽과 오른쪽 고유벡터가 같아 이기 때문입니다.
계산 방법도 다릅니다.
| 함수 | 쓰는 곳 |
|---|---|
eig |
일반 행렬 |
eigh |
대칭·에르미트 |
eigh가 대칭성을 이용해 더 빠르고 정확합니다. 상삼각만 읽고, 직교 변환만 쓰며, 고유값을 오름차순으로 정렬해 줍니다.
eig를 쓰면 대칭성을 모르므로 아주 작은 허수부가 붙어 나올 수 있고, 고유벡터가 정확히 직교하지 않습니다.
고유벡터는 여전히 민감합니다. 고유값이 가까우면 그 고유벡터들이 잘 정해지지 않습니다.
85강 심화 5에서 말한 대로, 개별 방향이 아니라 그들이 만드는 부분공간을 봐야 합니다. 89강의 주성분분석에서 이 구별이 실무적으로 중요합니다.
바로 확인 4.
확인 4-1. 의 조건수를 쓰세요.
답. 정확히 입니다.
확인 4-2. 바일 부등식을 쓰세요.
답. 입니다.
확인 4-3. 대칭행렬에 어떤 함수를 씁니까?
답. eigh를 씁니다.
문제. 에 대해 다음을 계산하세요.
(1)
(2)
(3) 대각합과 행렬식
생각의 실마리. 85강 문제 4의 행렬함수인데, 이 이라 훨씬 간단합니다.
풀이. (1) 고유값의 제곱근이 이고
검산에서 제곱하면 이고 대칭입니다.
(2) 이며 inv와 일치하고 역시 대칭입니다.
(3) 합이 이고 곱이 로 , 와 같습니다.
이 문제에서 배우는 것: 대칭 행렬함수.
정리. 이면
이고 도 대칭입니다.
대칭성이 보존됩니다. 입니다.
제곱근의 유일성도 개선됩니다. 85강에서는 부호 선택이 가지였는데, 양의 제곱근을 요구하면 유일합니다.
87강에서 양정치를 정식으로 다룹니다.
응용을 봅니다.
| 함수 | 쓰는 곳 |
|---|---|
| \Sigma^ | 상관 있는 정규 난수 생성 |
| \Sigma^ | 백색화 |
| 우도 계산 | |
| e^ | 확산 과정 |
첫 두 줄이 75강 심화 5와 82강 심화 3에서 나온 것입니다. 70강의 콜레스키로도 되지만, 스펙트럼 분해로 얻은 것은 대칭이라 성질이 다릅니다.
| 방법 | 결과 | 비용 |
|---|---|---|
| 콜레스키 | 삼각 , | |
| 스펙트럼 | 대칭 , | \sim n^ |
콜레스키가 훨씬 싸므로 표본 생성에는 그것을 씁니다. 대칭 제곱근은 이론적 논의나 백색화의 해석에 필요합니다.
도 쉽습니다.
78강 심화 3의 넘침 문제가 여기서도 해결됩니다.
바로 확인 5.
확인 5-1. 대칭행렬의 함수가 왜 대칭입니까?
답. 의 전치가 자기 자신이기 때문입니다.
확인 5-2. 양의 제곱근이 유일할 조건을 쓰세요.
답. 고유값이 모두 음이 아니어야 합니다.
확인 5-3. 표본 생성에 콜레스키를 쓰는 이유를 쓰세요.
답. 훨씬 싸기 때문입니다.
| 개념 | 내용 |
|---|---|
| 스펙트럼 정리 | , 직교 |
| 사영 형태 | A=\sum\lambda_{i}\mathbf{q}_{i}\mathbf{q}_{i}^ |
| 완비성 | , P_{i}P_{j}=\delta_{ij}P_ |
| 고유값 | 모두 실수 |
| 고유벡터 | 직교 (중복은 그람슈미트) |
| 함수 | , 대칭 보존 |
| 증명의 열쇠 | |
|---|---|
| 실고유값 | 가 실수 |
| 직교성 | |
| 자기수반 |
| 안정성 | 값 |
|---|---|
| 고유값 섭동 | (바일) |
| 함수 | eigh |
| 자주 하는 실수 | 바로잡기 |
|---|---|
대칭인데 eig를 씁니다 |
eigh를 씁니다 |
| 중복 고유값에서 직교를 가정합니다 | 그람슈미트가 필요합니다 |
| 고유벡터가 안정하다고 봅니다 | 고유값만 안정합니다 |
| 표본 생성에 스펙트럼을 씁니다 | 콜레스키가 쌉니다 |
문제 6. 스펙트럼 정리를 쓰세요.
답. 실대칭행렬은 으로 직교 대각화됩니다.
문제 7. 고유값이 실수임을 보이는 핵심 식을 쓰세요.
답. 이며 분자와 분모가 실수입니다.
문제 8. 직교성 증명의 핵심 등식을 쓰세요.
답. 입니다.
문제 9. 자기수반 성질을 쓰세요.
답. 입니다.
문제 10. 사영 형태의 분해를 쓰세요.
답. 입니다.
문제 11. 가 무엇입니까?
답. 단위행렬입니다.
문제 12. 를 쓰세요.
답. 입니다.
문제 13. 바일 부등식을 쓰세요.
답. 입니다.
문제 14. 대칭행렬에 어떤 함수를 씁니까?
답. eigh입니다.
문제 15. 가 대칭인 이유를 쓰세요.
답. 의 전치가 자기 자신이기 때문입니다.
문제 16. 회전행렬이 대칭이 아닌 것과 고유값의 관계를 쓰세요.
답. 대칭이 아니라 고유값이 복소수일 수 있고 실제로 입니다.
문제 17. 중복 고유값의 고유벡터를 어떻게 직교로 만듭니까?
답. 그 고유공간 안에서 그람슈미트를 적용합니다.
문제 18. 를 고유값으로 쓰세요.
답. 입니다.
심화 1. 레일리 몫의 범위를 밝히고 최대최소 원리를 소개하세요.
풀이. 84강 심화 5에서 레일리 몫을 정의했습니다.
대칭행렬에서 이 값의 범위가 고유값으로 정해집니다.
스펙트럼 분해를 넣습니다. 로 전개하면
파스발 항등식을 썼습니다. 따라서
고유값들의 가중평균이며, 가중치가 음이 아니고 합이 입니다.
등호는 대응하는 고유벡터에서 성립합니다.
검산에서 확인합니다. 단위구에서 만 개를 뽑아 레일리 몫을 계산하면
| 항목 | 값 |
|---|---|
| 표본 최솟값 | |
| \lambda_ | |
| 표본 최댓값 | |
| \lambda_ |
표본이 고유값에 거의 닿지만 넘지 않습니다. 무작위 방향이 고유방향과 정확히 일치할 확률이 이므로 등호에 도달하지 못합니다.
변분 특성을 얻습니다.
고유값이 최적화 문제의 답이라는 관점이며, 89강의 주성분분석이 정확히 이 형태입니다.
중간 고유값도 얻습니다.
쿠랑-피셔 최대최소 원리.
부분공간을 잘 골라 그 안에서 최악을 봤을 때의 최선입니다. 이 표현이 유용한 이유는 고유벡터를 몰라도 고유값을 비교할 수 있기 때문입니다.
문제 4의 바일 부등식이 여기서 나옵니다. 의 레일리 몫이 의 것과 이내로 다르므로, 최대최소를 취해도 그 차이가 유지됩니다.
끼움 정리도 따라옵니다. 에서 한 행과 열을 지운 의 고유값이 의 고유값들 사이에 끼입니다.
변수를 하나 빼면 고유값이 사이로 밀려납니다. 통계에서 변수를 추가할 때 분산이 어떻게 변하는지 말해 줍니다.
심화 2. 스펙트럼 정리를 증명하세요.
풀이. 문제 1과 2에서 부분을 보였습니다. 전체를 귀납법으로 완성합니다.
이면 자명합니다.
까지 성립한다고 하고 대칭행렬 를 봅니다.
1단계: 고유값과 단위 고유벡터를 하나 잡습니다. 문제 1에서 고유값이 실수이므로 실고유벡터가 존재합니다. , 로 둡니다.
2단계: 직교여공간이 불변임을 보입니다. 이라 하고 를 봅니다.
자기수반성을 썼습니다. 따라서 이고, 가 를 자기 안으로 보냅니다.
3단계: 귀납 가정을 적용합니다. 의 정규직교기저를 잡으면 의 표현행렬이 대칭행렬입니다. 귀납 가정에서 정규직교 고유벡터로 대각화됩니다.
4단계: 합칩니다. 과 의 정규직교 고유벡터들을 모으면 의 정규직교기저이고 모두 고유벡터입니다.
2단계가 핵심입니다. 대칭이 아니면 고유벡터의 직교여공간이 불변이 아니라 이 논법이 무너집니다.
복소수 범위로 확장하면 더 넓은 정리가 나옵니다.
정규행렬. 이면 유니터리 대각화됩니다.
에르미트, 반에르미트, 유니터리가 모두 정규행렬입니다. 회전행렬도 정규이므로 복소수 범위에서 직교 대각화되며, 고유값이 입니다.
| 조건 | 고유값 |
|---|---|
| 에르미트 | 실수 |
| 반에르미트 | 순허수 |
| 유니터리 | 크기 |
| 정규 | 복소수 (직교 대각화는 됨) |
이 과목에서는 실대칭만 다루지만, 넷째 줄이 참된 일반형입니다.
심화 3. 대칭이 아닌 행렬을 대칭으로 바꾸는 방법들을 논하세요.
풀이. 스펙트럼 정리가 좋으니 대칭이 아닌 행렬도 대칭 문제로 바꾸고 싶습니다.
첫째, 와 입니다.
66강 문제 4에서 둘 다 대칭이라 했고, 73강 심화 2에서 계수가 와 같다고 했습니다. 스펙트럼 정리가 적용됩니다.
88강의 특이값 분해가 이 관찰에서 나옵니다. 고유값이 이므로 음이 아니고, 그 제곱근이 특이값입니다.
둘째, 대칭 부분과 반대칭 부분으로 가릅니다.
71강의 직합 분해이며, 행렬 공간이 두 부분공간의 직합입니다.
73강 문제 1의 대칭행렬 차원이 여기서 확인됩니다.
레일리 몫은 대칭 부분만 봅니다.
**반대칭 부분은 **이기 때문입니다. 87강의 이차형식에서 대칭만 다루는 이유입니다.
셋째, 대칭화된 형태로 문제를 다시 세웁니다.
일반화 고유값 문제 에서 가 대칭 양정치이면, 로 두고
로 바꾸면 대칭 문제가 됩니다. 진동 해석에서 질량행렬과 강성행렬이 이 형태이며, 70강의 콜레스키가 쓰입니다.
넷째, 정규화합니다.
그래프 라플라시안 는 대칭인데, 정규화한 은 대칭이 아닙니다. 대신
로 두면 대칭이 유지되면서 정규화됩니다. 스펙트럼 군집화에서 이 형태를 씁니다.
심화 4. 대칭행렬의 고유값 계산 알고리즘을 소개하세요.
풀이. 문제 4에서 eigh가 다르다고 했습니다. 어떻게 다른지 봅니다.
야코비 방법. 가장 오래되고 단순합니다. 매 단계에서 가장 큰 비대각 성분을 골라 회전으로 으로 만듭니다.
가 기븐스 회전이므로 직교 닮음이고, 대칭성이 유지됩니다. 비대각 성분의 제곱합이 단조 감소해 수렴합니다.
장점은 정확성입니다. 작은 고유값도 상대오차가 작게 나옵니다. 병렬화도 쉽습니다.
삼중대각화 후 QR. 표준 방법입니다.
| 단계 | 내용 | 비용 |
|---|---|---|
| 1 | 하우스홀더로 삼중대각화 | |
| 2 | QR 반복 또는 분할정복 | ~ |
1단계가 대칭성을 이용합니다. 일반 행렬은 헤센베르크(위쪽 하나만 남김)까지인데, 대칭이면 삼중대각(대각과 그 양옆만)까지 갑니다. 저장이 입니다.
2단계에서 분할정복이 현대의 기본입니다. 삼중대각을 반으로 잘라 각각 풀고, 계수 갱신으로 합칩니다. 69강 심화 4의 셔먼-모리슨 구조입니다.
부분 고유값만 필요하면 더 싼 방법이 있습니다.
| 필요한 것 | 방법 |
|---|---|
| 최대 몇 개 | 란초스, 거듭제곱법 |
| 특정 구간 | 이분법 + 관성 |
| 전부 | 삼중대각 + 분할정복 |
첫째 줄이 대규모 문제의 표준입니다. 89강의 주성분분석에서 상위 몇 개만 필요하고, 행렬이 희소하거나 곱셈만 가능한 경우에 씁니다.
둘째 줄의 관성은 실베스터 관성 법칙에서 옵니다. 의 LDL 분해에서 음수 피벗의 개수가 보다 작은 고유값의 개수입니다. 87강에서 다룹니다.
심화 5. 동시 대각화와 그 응용을 다루세요.
풀이. 85강 심화 2에서 교환되는 행렬이 동시 대각화된다고 했습니다. 대칭이면 직교 동시 대각화가 됩니다.
정리. 가 대칭이고 이면, 공통의 정규직교 고유벡터 기저가 존재합니다.
검산에서 확인합니다. 와 가 교환되고, 의 고유벡터 기저에서
둘 다 대각입니다.
응용을 봅니다.
공분산과 정밀도. 와 은 언제나 교환되고 고유벡터를 공유합니다. 고유값만 역수입니다.
순환행렬. 85강 심화 2에서 언급했습니다. 모든 순환행렬이 푸리에 기저를 공유하므로 서로 교환됩니다.
60강에서 합성곱의 교환법칙을 봤는데, 그 대수적 배경이 이것입니다.
양자역학. 교환되는 관측량은 동시에 확정값을 가질 수 있습니다. 에너지와 각운동량처럼 함께 측정 가능한 양들이 공통 고유상태를 갖습니다.
주의할 점이 있습니다. 중복 고유값이 있으면 기저 선택에 자유가 남습니다. 의 고유값이 중복이면 그 고유공간 안에서 를 다시 대각화해야 합니다. 심화 2의 증명과 같은 구조입니다.
대칭이 아니면 직교 동시 대각화가 안 됩니다. 교환되더라도 일반 만 얻습니다.
심화 6. 대칭행렬이 실무에서 어디서 나오는지 정리하세요.
풀이. 대칭행렬이 유난히 자주 등장하는 이유를 봅니다.
그람 행렬. 벡터들의 내적을 모으면 이고, 내적이 대칭이므로 도 대칭입니다. 가 그 예입니다.
공분산. 이므로 대칭입니다. 89강의 주성분분석이 이것의 스펙트럼 분해입니다.
헤세 행렬. 이계 편미분이 순서에 무관하므로(이면) 대칭입니다.
95강의 클레로 정리이며, 82강의 가 그 예였습니다.
정사영. 80강에서 였습니다. 고유값이 과 뿐인 대칭행렬입니다.
그래프. 무향 그래프의 인접행렬과 라플라시안이 대칭입니다. 방향이 없다는 것이 곧 대칭입니다.
커널. 커널 함수 에서 만든 행렬이 대칭이고, 양반정치이기도 합니다. 서포트 벡터 머신과 가우스 과정의 기초입니다.
물리계. 상호작용이 대칭이면(작용-반작용) 행렬이 대칭입니다. 스프링 강성행렬이 그렇습니다.
정리합니다.
| 출처 | 왜 대칭인가 |
|---|---|
| 내적의 대칭성 | |
| 공분산 | 상관의 대칭성 |
| 헤세 | 편미분의 교환 |
| 정사영 | 직교 조건 |
| 무향 그래프 | 방향이 없음 |
| 커널 | 유사도의 대칭성 |
| 물리 | 작용-반작용 |
**공통 구조는 "관계가 양방향"**입니다. 와 의 관계가 와 의 관계와 같으면 대칭이 나옵니다.
그래서 스펙트럼 정리가 실무에서 그렇게 자주 쓰입니다. 거의 모든 "유사도"와 "이차 근사"가 대칭행렬을 만듭니다.
이 강의에서는 numpy만 씁니다. 대칭행렬의 고유값이 실수임과 고유벡터가 직교함을 확인하고, 스펙트럼 분해와 사영의 성질을 검산하며, 섭동 안정성과 레일리 몫의 범위를 봅니다.
import numpy as np
# --- 문제 1: 대칭이면 고유값이 실수 --------------------------------------
rng = np.random.default_rng(41)
for n in [3,4,5]:
B = rng.standard_normal((n,n)); S_ = (B+B.T)/2
ev = np.linalg.eigvals(S_)
print(n, "%.3e" % float(np.max(np.abs(ev.imag))), bool(np.allclose(ev.imag,0)))
G = rng.standard_normal((n,n))
print(n, "비대칭 허부 최대 %.4f" % float(np.max(np.abs(np.linalg.eigvals(G).imag))))
# 3 0.000e+00 True
# 3 비대칭 허부 최대 0.3095
# 4 0.000e+00 True
# 4 비대칭 허부 최대 1.2943
# 5 0.000e+00 True
# 5 비대칭 허부 최대 0.6493
# --- 문제 2: 고유벡터가 직교합니다 --------------------------------------
S = np.array([[4.,1.,0.],[1.,3.,1.],[0.,1.,2.]])
w, Q = np.linalg.eigh(S) # 대칭에는 eigh 를 씁니다
print(np.round(w,8).tolist()) # [1.26794919, 3.0, 4.73205081]
print((np.round(Q.T@Q,10)+0.0).tolist())
# [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]
print("%.12f %.12f %.12f" % (Q[:,0]@Q[:,1], Q[:,0]@Q[:,2], Q[:,1]@Q[:,2]))
# 0.000000000000 0.000000000000 0.000000000000
# --- 문제 3: 스펙트럼 분해와 사영 ---------------------------------------
print(bool(np.allclose(Q@np.diag(w)@Q.T, S))) # True
acc = np.zeros((3,3))
for i in range(3): acc = acc + w[i]*np.outer(Q[:,i], Q[:,i])
print(bool(np.allclose(acc, S))) # True
Ps = [np.outer(Q[:,i], Q[:,i]) for i in range(3)]
print(bool(np.allclose(sum(Ps), np.eye(3)))) # True (완비성)
print(bool(np.allclose(Ps[0]@Ps[1], np.zeros((3,3)))),
bool(np.allclose(Ps[0]@Ps[0], Ps[0]))) # True True
# --- 문제 4: 조건수와 섭동 안정성 ---------------------------------------
print("%.10f" % float(np.linalg.cond(Q))) # 1.0000000000
Ns = np.array([[2.,1.],[0.,2.0001]]) # 대칭이 아닌 경우
_, Vn = np.linalg.eig(Ns)
print("%.4e" % float(np.linalg.cond(Vn.real))) # 2.0000e+04
for e in [1e-6, 1e-10]:
E = rng.standard_normal((3,3)); E = (E+E.T)/2
E = e*E/np.linalg.norm(E,2) # 크기를 e 로 맞춥니다
w2 = np.sort(np.linalg.eigvalsh(S+E))
print("%.0e" % e, "%.3e %.3e" % (np.max(np.abs(w2-np.sort(w))), e))
# 1e-06 5.195e-07 1.000e-06 <- 변화가 섭동 크기를 넘지 않습니다
# 1e-10 9.165e-11 1.000e-10
# --- 문제 5: 함수와 제곱근 -----------------------------------------------
print(np.round(np.sqrt(w),8).tolist())
# [1.1260325, 1.73205081, 2.17532775]
R = Q@np.diag(np.sqrt(w))@Q.T
print(np.round(R,8).tolist(), bool(np.allclose(R@R, S)), bool(np.allclose(R,R.T)))
# [[1.98070913, 0.27578189, -0.02712356], [0.27578189, 1.67780369, 0.33002901],
# [-0.02712356, 0.33002901, 1.37489824]] True True
Si = Q@np.diag(1/w)@Q.T
print(bool(np.allclose(Si, np.linalg.inv(S))), bool(np.allclose(Si, Si.T)))
# True True
print("%.8f %.8f" % (np.sum(w), np.trace(S)),
"%.8f %.8f" % (np.prod(w), np.linalg.det(S)))
# 9.00000000 9.00000000 18.00000000 18.00000000
# --- 심화 1: 레일리 몫은 고유값 사이에 있습니다 -------------------------
X = rng.standard_normal((200000,3))
X = X/np.linalg.norm(X, axis=1, keepdims=True) # 단위구에서 표본
vals = np.einsum('ij,jk,ik->i', X, S, X)
print("%.8f %.8f" % (vals.min(), vals.max()),
"%.8f %.8f" % (w.min(), w.max()))
# 1.26797747 4.73200160 1.26794919 4.73205081
# --- 심화 5: 교환되는 대칭행렬은 동시 대각화됩니다 ----------------------
A1 = np.array([[2.,1.],[1.,2.]]); A2 = np.array([[5.,3.],[3.,5.]])
print(bool(np.allclose(A1@A2, A2@A1))) # True
w1, Q1 = np.linalg.eigh(A1)
print((np.round(Q1.T@A1@Q1, 8)+0.0).tolist()) # [[1.0, 0.0], [0.0, 3.0]]
print((np.round(Q1.T@A2@Q1, 8)+0.0).tolist()) # [[2.0, 0.0], [0.0, 8.0]]
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 대칭행렬의 허수부가 **정확히 **입니다. 같은 크기의 일반 행렬은 허수부가 에서 까지 나옵니다. 대칭성이 없으면 복소 고유값이 흔합니다.
둘째, eigh가 준 가 를 만족하고 세 쌍의 내적이 정확히 입니다.
셋째, 스펙트럼 분해가 두 형태(행렬곱과 외적의 합)로 모두 확인되고, 사영들이 **완비성 와 직교성 **를 만족합니다.
넷째가 이 강의의 실무적 요점입니다. 인데 대칭이 아닌 예에서는 입니다. 그리고 섭동 실험에서 고유값 변화가 섭동 크기를 넘지 않습니다. 바일 부등식이 관측으로 확인됩니다.
다섯째, 레일리 몫이 안에 갇힙니다. 만 개 표본의 최솟값과 최댓값이 고유값에 거의 닿지만 넘지 않습니다. 무작위 방향이 고유방향과 정확히 일치할 확률이 이라 등호에는 도달하지 못합니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 스펙트럼 정리는 예로 증명되지 않습니다. 심화 2의 귀납 논증이 그 자리를 맡습니다. 또 레일리 몫의 표본 최댓값이 에 가깝다는 것은 범위를 확인한 것이지 상한을 증명한 것이 아닙니다. 심화 1의 가중평균 논증이 증명이며, 표본은 그 결론과 모순되지 않음을 보일 뿐입니다.
정답.
eigh입니다.| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| A=Q\Lambda Q^ | 스펙트럼 분해 | 직교 대각화입니다 |
| \mathbf{q}_{i}\mathbf{q}_{i}^ | 스펙트럼 사영 | 고유방향으로의 정사영입니다 |
| 자기수반 | self-adjoint | |
| 에르미트 | Hermitian | 입니다 |
| 정규행렬 | normal | 입니다 |
| 바일 부등식 | Weyl | 고유값 섭동의 상한입니다 |
| 레일리 몫 | Rayleigh quotient | 고유값 사이에 있습니다 |
| 쿠랑-피셔 | Courant-Fischer | 최대최소 원리입니다 |
다음 87강에서는 이차형식을 다룹니다. 이 강의의 레일리 몫이 그 정규화된 형태였고, 그 부호가 고유값의 부호로 결정됩니다. 82강에서 헤세 행렬이 양반정치라 볼록하다고 했는데, 그 판정을 정확히 세우는 것이 87강의 일입니다.