지금까지 "양정치"라는 말을 여러 번 쓰고 미뤘습니다.
70강 문제 5에서 콜레스키 분해의 조건이 대칭 양정치였습니다. 82강 문제 3에서 헤세 행렬 가 양반정치라 볼록하다고 했습니다. 82강 심화 2에서 가 언제나 가역인 근거로 썼습니다.
이 식이 무엇을 재는지, 어떻게 판정하는지가 이 강의의 주제입니다.
86강에서 준비가 끝났습니다. 스펙트럼 정리로 대칭행렬을 으로 쓸 수 있고, 심화 1에서 레일리 몫의 범위가 고유값 사이임을 보았습니다.
따라서 부호는 고유값의 부호가 결정합니다. 이 강의는 그 사실을 정리하고, 고유값을 구하지 않고도 판정하는 방법을 세우며, 44강의 이계도함수 판정을 다변수로 확장합니다.
문제. 을 봅니다.
(1) 꼴로 쓰는 를 찾으세요.
(2) 가 유일합니까?
(3) 대칭인 것을 고르는 이유를 쓰세요.
생각의 실마리. 입니다. 항이 와 에 나뉘어 들어갑니다.
풀이. (1) 한 가지 답은
입니다. 입니다.
(2) 유일하지 않습니다. 이기만 하면 됩니다.
(3) 대칭 부분만 값에 기여하기 때문입니다. 86강 심화 3에서 가른 대로
이고 반대칭 부분은 이차형식에 아무 기여도 하지 않습니다.
스칼라라 전치해도 같다는 점을 썼습니다.
검산에서 확인합니다. 이고 인데, 다섯 개의 무작위 벡터에서 와 가 같고 가 정확히 입니다.
이 문제에서 배우는 것: 이차형식.
이차형식. 대칭행렬 에 대해
를 이차형식이라 합니다. 대칭인 가 유일합니다.
대각 성분이 제곱항의 계수이고, 비대각은 교차항의 절반입니다.
교차항 계수를 반으로 나누는 것을 잊기 쉽습니다.
이차형식은 동차 이차식입니다.
그래서 부호를 물을 때 크기는 상관없고 방향만 문제입니다. 86강 심화 1의 레일리 몫이 그 정규화입니다.
바로 확인 1.
확인 1-1. 의 대칭행렬을 쓰세요.
답. 입니다.
확인 1-2. 반대칭 부분이 기여하지 않는 이유를 쓰세요.
답. 가 자기 자신의 음수라 이기 때문입니다.
확인 1-3. 를 로 쓰세요.
답. 입니다.
문제. 네 행렬의 이차형식 부호를 판정하세요.
(1) 고유값을 구하세요.
(2) 각각의 부호를 판정하세요.
(3) 근거를 쓰세요.
생각의 실마리. 86강 심화 1에서 레일리 몫이 에 있었습니다. 양 끝이 고유값이므로 부호가 고유값으로 결정됩니다.
풀이. 검산에서 계산합니다.
| 행렬 | 고유값 | 양수 개수 | 음수 개수 | 부호 |
|---|---|---|---|---|
| \begin{pmatrix}2&1\\ 1&2\end | 양정치 | |||
| \begin{pmatrix}1&1\\ 1&1\end | 양반정치 | |||
| \begin{pmatrix}-3&1\\ 1&-2\end | 음정치 | |||
| \begin{pmatrix}1&0\\ 0&-1\end | 부정부호 |
(3) 스펙트럼 분해를 넣습니다. 로 두면
제곱들의 가중합이고 가중치가 고유값입니다.
이 문제에서 배우는 것: 부호의 분류.
정의. 대칭행렬 에 대해
이름 조건 고유값 양정치 () 모두 양수 양반정치 모두 음이 아님 음정치 모두 음수 음반정치 모두 양이 아님 부정부호 양수도 음수도 나옴 양과 음이 섞임
표현에서 즉시 나옵니다. 고유값이 모두 양수이면 합도 양수이고, 하나라도 음수이면 그 고유벡터 방향에서 음수가 나옵니다.
양반정치와 양정치의 차이가 중요합니다.
| 양반정치 | 양정치 | |
|---|---|---|
| \lambda_ | ||
| 가역 | 아닐 수 있습니다 | 가역 |
| 인 \mathbf{x}\ne\mathbf | 있을 수 있습니다 | 없습니다 |
| 콜레스키 | 실패할 수 있습니다 | 성공합니다 |
둘째 줄이 실용적입니다. 양정치이면 이 고유값이 아니므로 84강 문제 1에서 가역입니다.
82강 심화 2에서 가 가역이라 한 근거가 이것입니다.
음정치는 가 양정치인 것이므로 따로 다루지 않아도 됩니다.
바로 확인 2.
확인 2-1. 양정치의 고유값 조건을 쓰세요.
답. 모든 고유값이 양수입니다.
확인 2-2. 양정치이면 가역인 이유를 쓰세요.
답. 이 고유값이 아니기 때문입니다.
확인 2-3. 를 고유값과 좌표로 쓰세요.
답. 입니다.
문제. 문제 2의 네 행렬에 대해
(1) 선행 주소행렬식을 계산하세요.
(2) 콜레스키 분해를 시도하세요.
(3) 세 판정법을 비교하세요.
생각의 실마리. 고유값 계산은 비쌉니다. 더 싼 판정법이 있는지 봅니다. 70강 문제 5에서 콜레스키가 양정치일 때만 성공한다고 했습니다.
풀이. 검산에서 계산합니다.
| 행렬 | 선행 주소행렬식 | 콜레스키 | 고유값 판정 |
|---|---|---|---|
| 양정치 | 성공 | 양정치 | |
| 양반정치 | 실패 | 양정치 아님 | |
| 음정치 | 실패 | 양정치 아님 | |
| 부정부호 | 실패 | 양정치 아님 |
첫 줄만 모든 주소행렬식이 양수이고 콜레스키가 성공합니다.
이 문제에서 배우는 것: 세 판정법.
실베스터 판정법. 대칭 가 양정치인 것과 모든 선행 주소행렬식이 양수인 것이 같습니다.
여기서 는 왼쪽 위 부분행렬입니다.
에서는 익숙한 조건이 됩니다.
2강의 판별식과 이어집니다. 을 제곱 완성하면
이고, 두 계수가 모두 양수여야 언제나 양수입니다.
세 판정법을 비교합니다.
| 방법 | 비용 | 장점 | 주의 |
|---|---|---|---|
| 고유값 | (상수 큼) | 완전한 정보 | 비쌉니다 |
| 선행 주소행렬식 | 손계산에 좋습니다 | 양반정치에 쓸 수 없습니다 | |
| 콜레스키 | 가장 쌉니다 | 실패가 곧 판정 |
셋째 줄이 실무의 표준입니다. 70강 문제 5에서 "실패가 정보"라 한 것이 이 판정입니다.
둘째 줄의 주의가 중요합니다. 양반정치는 선행 주소행렬식으로 판정할 수 없습니다.
는 선행 주소행렬식이 과 으로 음수가 없는데 양반정치가 아닙니다. 양반정치를 판정하려면 모든 주소행렬식(선행뿐 아니라 임의의 행과 열을 고른 것)이 음이 아니어야 합니다.
바로 확인 3.
확인 3-1. 실베스터 판정법을 쓰세요.
답. 모든 선행 주소행렬식이 양수이면 양정치입니다.
확인 3-2. 의 조건을 쓰세요.
답. 이고 입니다.
확인 3-3. 양반정치에 선행 주소행렬식을 쓸 수 없는 이유를 쓰세요.
답. 처럼 반례가 있기 때문입니다.
문제. 을 봅니다.
(1) 스펙트럼 분해를 구하세요.
(2) 고유벡터 좌표에서 를 쓰세요.
(3) 인 곡선을 설명하세요.
생각의 실마리. 문제 2에서 였습니다. 교차항이 사라지므로 표준형이 됩니다.
풀이. (1) 검산에서 고유값이 과 이고
이며 입니다.
(2) 로 두면
(3) 이면
타원이며 반축이 과 입니다. 검산에서 각 고유방향으로 만큼 간 점의 값이 정확히 입니다.
이 문제에서 배우는 것: 주축 정리.
주축 정리. 대칭행렬의 이차형식은 고유벡터 좌표에서
로 교차항 없이 쓰입니다. 고유벡터 방향을 주축이라 합니다.
등고선의 모양이 고유값의 부호로 정해집니다.
| 부호 | 의 모양 () |
|---|---|
| 양정치 | 타원 |
| 양반정치 (하나가 ) | 평행한 두 직선 |
| 부정부호 | 쌍곡선 |
| 음정치 | 없습니다 (이므로) |
**반축의 길이가 **입니다. 고유값이 클수록 그 방향으로 짧습니다.
75강 문제 5에서 좌표를 바꾸는 목적이라 한 것이 여기서 실현됩니다. 원래 좌표에서는 교차항 때문에 타원이 기울어져 있는데, 주축 좌표에서는 축에 정렬됩니다.
79강의 부피와도 이어집니다. 타원의 넓이가
이므로 행렬식이 작을수록 넓습니다. 89강의 주성분분석에서 이 타원이 데이터의 산포를 나타냅니다.
조건수와의 관계도 봅니다.
조건수가 크면 타원이 길쭉합니다. 208강의 경사하강법이 길쭉한 골짜기에서 느린 이유가 이것입니다.
바로 확인 4.
확인 4-1. 주축이 무엇입니까?
답. 고유벡터 방향입니다.
확인 4-2. 반축의 길이를 쓰세요.
답. 입니다.
확인 4-3. 부정부호이면 이 어떤 곡선입니까?
답. 쌍곡선입니다.
문제. 헤세 행렬이 다음일 때 임계점을 분류하세요.
생각의 실마리. 44강에서 일변수 함수의 이계도함수 판정을 했습니다. 다변수에서는 방향마다 볼록성이 다를 수 있으므로 헤세 행렬의 부호를 봅니다.
풀이. 검산에서 계산합니다.
| 헤세 | 고유값 | 양 | 음 | 영 | 분류 |
|---|---|---|---|---|---|
| 극소 | |||||
| 극대 | |||||
| 안장점 | |||||
| 판정 불가 |
이 문제에서 배우는 것: 이계도함수 판정.
판정. 인 임계점에서 헤세 행렬 에 대해
결론 양정치 극소 음정치 극대 부정부호 안장점 반정치 (고유값에 ) 판정 불가
근거는 테일러 전개입니다. 56강의 이차 근사를 다변수로 쓰면
증감이 이차형식의 부호로 결정됩니다.
안장점이 일변수에 없던 것입니다. 어떤 방향에서는 극소이고 다른 방향에서는 극대입니다.
에서 원점은 축을 따라 극소이고 축을 따라 극대입니다. 말안장 모양이라 그 이름입니다.
넷째 줄의 판정 불가도 일변수와 같습니다. 이면 판정할 수 없듯이, 고유값에 이 있으면 이차항만으로는 결정되지 않습니다.
는 헤세가 같은데 하나는 극소이고 하나는 안장점입니다.
82강 문제 3의 결론이 여기서 정당화됩니다. 최소제곱의 헤세가 이고 양반정치이므로, 임계점이 극소입니다. 의 열이 독립이면 양정치라 유일한 극소입니다.
볼록성과도 이어집니다. 44강에서 이계도함수가 언제나 양수이면 볼록이라 했는데, 다변수에서는
입니다. 볼록함수의 임계점은 전역 최소이므로, 국소와 전역을 구별할 필요가 없습니다. 205강의 볼록최적화가 그 이점을 씁니다.
바로 확인 5.
확인 5-1. 헤세가 부정부호이면 무엇입니까?
답. 안장점입니다.
확인 5-2. 판정이 불가능한 경우를 쓰세요.
답. 고유값에 이 있는 반정치일 때입니다.
확인 5-3. 다변수 볼록성의 조건을 쓰세요.
답. 헤세 행렬이 모든 점에서 양반정치입니다.
| 개념 | 내용 |
|---|---|
| 이차형식 | , 대칭 |
| 계수 대응 | 대각은 제곱항, 비대각은 교차항의 절반 |
| 주축 표현 | q=\sum\lambda_{i}c_{i}^ |
| 레일리 몫 | \lambda_{\min}\le\rho\le\lambda_ |
| 부호 | 고유값 | 등고선 () |
|---|---|---|
| 양정치 | 모두 | 타원 |
| 양반정치 | 모두 | 타원 또는 직선쌍 |
| 부정부호 | 섞임 | 쌍곡선 |
| 음정치 | 모두 | 없음 |
| 판정법 | 비용 | 주의 |
|---|---|---|
| 고유값 | 완전한 정보 | |
| 선행 주소행렬식 | 양정치에만 | |
| 콜레스키 | 실무 표준 |
| 임계점 | 헤세 |
|---|---|
| 극소 | 양정치 |
| 극대 | 음정치 |
| 안장점 | 부정부호 |
| 판정 불가 | 반정치 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 교차항 계수를 그대로 씁니다 | 절반씩 나눕니다 |
| 양반정치에 실베스터를 씁니다 | 모든 주소행렬식이 필요합니다 |
| 반축을 라 합니다 | 입니다 |
| 반정치에서 극소라 합니다 | 판정 불가입니다 |
문제 6. 의 대칭행렬을 쓰세요.
답. 입니다.
문제 7. 반대칭 부분이 이차형식에 기여하지 않는 이유를 쓰세요.
답. 가 자기 자신의 음수라 입니다.
문제 8. 양정치의 고유값 조건을 쓰세요.
답. 모든 고유값이 양수입니다.
문제 9. 양정치이면 가역인 이유를 쓰세요.
답. 이 고유값이 아니기 때문입니다.
문제 10. 실베스터 판정법을 쓰세요.
답. 모든 선행 주소행렬식이 양수입니다.
문제 11. 양정치 조건을 쓰세요.
답. 이고 입니다.
문제 12. 실무에서 양정치를 어떻게 판정합니까?
답. 콜레스키 분해를 시도합니다.
문제 13. 주축이 무엇이고 반축의 길이가 얼마입니까?
답. 고유벡터 방향이며 길이는 입니다.
문제 14. 부정부호의 등고선을 쓰세요.
답. 쌍곡선입니다.
문제 15. 헤세가 부정부호이면 무엇입니까?
답. 안장점입니다.
문제 16. 판정 불가인 경우를 쓰세요.
답. 고유값에 이 있을 때입니다.
문제 17. 의 부호를 쓰고 근거를 쓰세요.
답. 양반정치입니다. 입니다.
문제 18. 다변수 볼록성의 조건을 쓰세요.
답. 헤세가 모든 점에서 양반정치입니다.
심화 1. 실베스터 관성 법칙을 소개하고 확인하세요.
풀이. 이차형식을 좌표 변환하면 계수가 바뀝니다. 무엇이 보존됩니까.
로 바꾸면
이 관계를 합동이라 합니다. 77강의 닮음 와 다릅니다.
닮음은 고유값을 보존하는데 합동은 그렇지 않습니다. 검산에서 확인합니다. 의 고유값이 인데, 무작위 로 합동변환하면
| 합동 후 고유값 | 부호 개수 |
|---|---|
고유값은 다 다른데 부호의 개수가 같습니다.
실베스터 관성 법칙. 합동변환에서 양수 고유값의 개수와 음수 고유값의 개수가 보존됩니다.
를 관성이라 하며, 입니다.
왜 보존되는가. 양수 고유값의 개수는 가 양수인 최대 부분공간의 차원입니다.
가 가역이면 부분공간의 차원이 보존되므로 도 보존됩니다.
표준형도 나옵니다. 적절한 를 잡으면
**합동류의 완전한 불변량이 **입니다. 77강 문제 5의 동치가 계수 하나였던 것과 비교됩니다.
| 관계 | 불변량 |
|---|---|
| 닮음 | 고유값 전부 |
| 합동 | 부호의 개수만 |
| 동치 | 계수만 |
응용이 있습니다. 86강 심화 4에서 언급한 대로, 의 LDL 분해에서 음수 피벗의 개수가 보다 작은 고유값의 개수입니다. 관성 법칙이 그것을 보장하며, 이분법으로 특정 구간의 고유값을 셀 수 있습니다.
심화 2. 가 양반정치임을 보이고 그 의미를 밝히세요.
풀이. 여러 곳에서 쓴 사실을 정리합니다.
63강의 양정치성이 근거입니다. 언제나 음이 아니므로 양반정치입니다.
양정치일 조건도 나옵니다.
이므로 일 때, 즉 열이 독립일 때 양정치입니다.
73강 심화 2와 82강 문제 2의 조건이 부호의 언어로 다시 나타났습니다.
검산에서 확인합니다.
| 만든 계수 | 의 고유값 | |||
|---|---|---|---|---|
계수가 부족하면 고유값에 정확히 이 나타납니다.
역도 성립합니다. 모든 양반정치 행렬이 어떤 에 대해 로 쓰입니다. 86강의 스펙트럼 분해에서
이고 가 실수이려면 고유값이 음이 아니어야 합니다.
그람 행렬의 성격이며, 86강 심화 6에서 나열한 대칭행렬의 출처가 대부분 이 형태입니다.
| 출처 | |
|---|---|
| 그람 행렬 | 벡터들을 열로 |
| 공분산 | 중심화된 데이터 |
| 커널 행렬 | 특징 사상 |
셋째 줄이 커널 방법의 기초입니다. 양반정치인 커널이면 어떤 특징 공간의 내적으로 표현되며, 그것이 머서 정리입니다.
능형회귀도 여기서 설명됩니다. 검산에서 열이 종속인 에 대해
| 의 고유값 | 콜레스키 | |
|---|---|---|
| 실패 | ||
| 10^ | 성공 | |
| 성공 |
를 더하면 모든 고유값이 만큼 올라가 양정치가 됩니다. 84강 심화 2의 이동 성질입니다.
심화 3. 일반화 고유값 문제와 동시 대각화를 다루세요.
풀이. 두 이차형식을 동시에 다루는 문제를 봅니다.
가 대칭이고 가 양정치라 합니다. 86강 심화 3에서 언급한 형태입니다.
(콜레스키)로 두고 로 바꾸면
왼쪽이 대칭이므로 스펙트럼 정리가 적용됩니다. 실고유값과 직교 고유벡터를 얻습니다.
두 이차형식이 동시에 표준형이 됩니다.
가 양정치라는 조건이 필수입니다. 아니면 이 존재하지 않고, 실제로 동시 대각화가 불가능한 예가 있습니다.
응용을 봅니다.
진동 해석. 에서 를 넣으면
이 일반화 고유값이고 가 진동 모드입니다. 이 질량행렬로 양정치이므로 조건이 맞습니다.
판별분석. 집단 간 산포 와 집단 내 산포 에 대해
를 푸는 것이 선형판별분석입니다. 일반화 레일리 몫이며 답이 일반화 고유값 문제입니다.
스펙트럼 군집화. 정규화 라플라시안 가 이 형태입니다.
**공통 구조는 "두 이차형식의 비를 최적화"**입니다. 86강 심화 1의 레일리 몫에서 분모가 대신 다른 이차형식이 된 것입니다.
심화 4. 이차형식의 최적화를 제약 조건과 함께 다루세요.
풀이. 86강 심화 1에서 무제약 레일리 몫을 봤습니다. 제약이 붙으면 어떻게 되는지 봅니다.
단위구 위의 최적화.
86강 심화 1의 결과이며, 답이 의 고유벡터입니다.
89강의 주성분분석이 정확히 이 문제입니다. 분산을 최대로 하는 방향을 찾는데, 분산이 이고 입니다.
부분공간 제약. 이미 찾은 방향들과 직교하도록 요구하면
둘째 고유값이 나옵니다. 이렇게 차례로 가면 모든 고유값과 고유벡터를 얻습니다. 주성분을 순서대로 뽑는 절차입니다.
선형 제약이 있는 최소화.
라그랑주 승수를 도입하면
KKT 시스템이며 대칭이지만 부정부호입니다. 69강 심화 3의 슈어 보수로 풀며, 가 양정치이면 안장점 구조가 잘 정의됩니다.
무제약 최소화. 가 양정치이면
의 해가 입니다. 방정식 풀이가 최적화 문제가 됩니다.
켤레기울기법이 이 관점에서 나옵니다. 67강 심화 5에서 대규모 희소계에 반복법을 쓴다고 했는데, 그 대표가 이것입니다. 행렬-벡터 곱만 쓰므로 희소성이 유지됩니다.
| 방법 | 필요한 것 |
|---|---|
| 콜레스키 | 행렬 전체, |
| 켤레기울기 | 행렬-벡터 곱만 |
수렴 속도가 조건수로 정해집니다.
문제 4에서 조건수가 타원의 길쭉함이었는데, 길쭉할수록 느립니다. 208강에서 다시 봅니다.
심화 5. 확률과 통계에서 이차형식이 어떻게 나타나는지 정리하세요.
풀이. 이차형식이 확률에서 유난히 자주 나옵니다.
분산. 선형결합의 분산이 이차형식입니다.
분산이 음이 아니므로 가 양반정치입니다. 심화 2의 결과와 일관됩니다.
마할라노비스 거리.
공분산으로 정규화한 거리입니다. 문제 4의 등고선이 여기서 신뢰 타원이 되며, 주축이 주성분 방향입니다.
정규분포의 밀도.
지수 안이 이차형식이라 등고선이 타원입니다. 가 양정치여야 밀도가 적분 가능합니다.
카이제곱. 이고 가 계수 인 정사영이면
83강의 정사영이 자유도를 준다는 통계적 내용입니다. 회귀의 검정이 두 이차형식의 비이며, 심화 3의 일반화 레일리 몫과 형태가 같습니다.
정보 행렬. 최대가능도 추정에서 로그가능도의 헤세가 피셔 정보이며, 그 역이 추정량의 공분산 하한입니다.
가 양반정치 순서이며, 두 행렬의 차가 양반정치라는 뜻입니다. 크라메르-라오 하한입니다.
정리합니다.
| 대상 | 이차형식 |
|---|---|
| 분산 | \mathbf{w}^{\top}\Sigma\mathbf |
| 거리 | |
| 밀도의 지수 | 같은 형태 |
| 검정통계량 | \mathbf{z}^{\top}P\mathbf |
| 정보 | 로그가능도의 헤세 |
**공통 구조는 "제곱해서 더한다"**입니다. 분산이든 거리든 오차든 제곱합으로 재므로 이차형식이 됩니다.
심화 6. 최적화에서 양정치성이 왜 중요한지 정리하세요.
풀이. 문제 5에서 헤세의 부호가 임계점을 분류했습니다. 최적화 전반에서의 역할을 봅니다.
첫째, 볼록성을 보장합니다. 헤세가 모든 점에서 양반정치이면 볼록이고, 국소 최소가 곧 전역 최소입니다.
비볼록이면 여러 국소 최소가 있어 초기값에 따라 다른 답이 나옵니다.
둘째, 뉴턴법의 방향을 정합니다. 47강의 뉴턴법을 다변수로 쓰면
인데, 가 양정치여야 가 하강 방향입니다.
도 양정치이기 때문입니다. 부정부호이면 오히려 올라갈 수 있습니다.
대응책이 있습니다.
| 방법 | 내용 |
|---|---|
| 수정 뉴턴 | 로 양정치화 |
| 신뢰영역 | 이동 크기를 제한 |
| 준뉴턴 (BFGS) | 양정치를 유지하며 근사 |
첫째 줄이 82강 심화 2의 능형과 같은 조작입니다. 심화 2에서 본 대로 를 더하면 고유값이 올라가 양정치가 됩니다.
셋째 줄이 실무의 표준입니다. BFGS는 갱신 공식이 양정치를 보존하도록 설계되어 있어, 언제나 하강 방향을 줍니다. 69강 심화 4의 셔먼-모리슨으로 갱신합니다.
셋째, 수렴 속도를 정합니다. 경사하강법의 수렴이
로 조건수에 좌우됩니다. 문제 4에서 조건수가 등고선 타원의 길쭉함이었으므로, 길쭉한 골짜기에서 지그재그로 느리게 내려갑니다.
전처리가 그 대응입니다. 을 곱해 조건수를 낮추며, 이 에 가까울수록 좋습니다.
넷째, 안장점이 고차원에서 흔합니다. 무작위 대칭행렬의 고유값이 양수와 음수로 섞이므로, 고차원에서 임계점의 대부분이 안장점입니다.
신경망 학습에서 이것이 관측됩니다. 국소 최소보다 안장점이 문제이며, 확률적 경사하강법의 잡음이 안장점을 벗어나는 데 도움이 됩니다. 219강 이후 다시 봅니다.
이 강의에서는 numpy만 씁니다. 이차형식이 대칭 부분만 보는 것을 확인하고, 세 판정법을 비교하며, 주축과 임계점 분류를 계산합니다.
import numpy as np
# --- 문제 1: 이차형식은 대칭 부분만 봅니다 ------------------------------
A = np.array([[2.,4.],[0.,3.]])
Sy = (A+A.T)/2; K = (A-A.T)/2
print(Sy.tolist(), K.tolist())
# [[2.0, 2.0], [2.0, 3.0]] [[0.0, 2.0], [-2.0, 0.0]]
rng = np.random.default_rng(51)
X = rng.standard_normal((5,2))
q1 = np.einsum('ij,jk,ik->i', X, A, X)
q2 = np.einsum('ij,jk,ik->i', X, Sy, X)
q3 = np.einsum('ij,jk,ik->i', X, K, X)
print(np.round(q1,8).tolist())
# [3.25363183, 5.12101027, 5.27794971, 5.0751025, 6.1074946]
print(np.round(q2,8).tolist()) # 같습니다
print((np.round(q3,12)+0.0).tolist())
# [0.0, 0.0, 0.0, 0.0, 0.0] <- 반대칭 부분은 기여하지 않습니다
# --- 문제 2: 부호는 고유값이 결정합니다 ---------------------------------
mats = {
"양정치": np.array([[2.,1.],[1.,2.]]),
"양반정치": np.array([[1.,1.],[1.,1.]]),
"음정치": np.array([[-3.,1.],[1.,-2.]]),
"부정부호": np.array([[1.,0.],[0.,-1.]]),
}
for name, M in mats.items():
w = np.linalg.eigvalsh(M)
print(name, np.round(w,8).tolist(),
int(np.sum(w > 1e-12)), int(np.sum(w < -1e-12)))
# 양정치 [1.0, 3.0] 2 0
# 양반정치 [0.0, 2.0] 1 0
# 음정치 [-3.61803399, -1.38196601] 0 2
# 부정부호 [-1.0, 1.0] 1 1
# --- 문제 3: 세 판정법 ---------------------------------------------------
def leading_minors(M):
return [float(np.linalg.det(M[:k,:k])) for k in range(1, M.shape[0]+1)]
def chol_ok(M):
try:
np.linalg.cholesky(M); return True
except np.linalg.LinAlgError:
return False
for name, M in mats.items():
print(name, np.round(leading_minors(M),8).tolist(), chol_ok(M),
bool(np.all(np.linalg.eigvalsh(M) > 1e-12)))
# 양정치 [2.0, 3.0] True True
# 양반정치 [1.0, 0.0] False False
# 음정치 [-3.0, 5.0] False False
# 부정부호 [1.0, -1.0] False False
# --- 문제 4: 주축과 반축 -------------------------------------------------
S = np.array([[5.,2.],[2.,2.]])
w, Q = np.linalg.eigh(S)
print(np.round(w,8).tolist()) # [1.0, 6.0]
print(np.round(Q,8).tolist())
# [[0.4472136, -0.89442719], [-0.89442719, -0.4472136]]
print((np.round(Q.T@S@Q,8)+0.0).tolist()) # [[1.0, 0.0], [0.0, 6.0]]
for i in range(2):
v = Q[:,i]/np.sqrt(w[i]) # 반축 끝점
print(i, "%.8f" % float(v@S@v), "%.8f" % float(1/np.sqrt(w[i])))
# 0 1.00000000 1.00000000
# 1 1.00000000 0.40824829
# --- 문제 5: 임계점 분류 -------------------------------------------------
Hs = {
"극소": np.array([[2.,0.],[0.,4.]]),
"극대": np.array([[-2.,0.],[0.,-4.]]),
"안장": np.array([[2.,0.],[0.,-4.]]),
"판정불가": np.array([[2.,0.],[0.,0.]]),
}
for name, H in Hs.items():
w = np.linalg.eigvalsh(H)
pos = int(np.sum(w > 1e-12)); neg = int(np.sum(w < -1e-12))
print(name, np.round(w,8).tolist(), pos, neg, 2-pos-neg)
# 극소 [2.0, 4.0] 2 0 0
# 극대 [-4.0, -2.0] 0 2 0
# 안장 [-4.0, 2.0] 1 1 0
# 판정불가 [0.0, 2.0] 1 0 1
# --- 심화 1: 실베스터 관성 법칙 -----------------------------------------
M = np.array([[1.,2.,0.],[2.,1.,1.],[0.,1.,3.]])
w0 = np.linalg.eigvalsh(M)
print(np.round(w0,8).tolist(),
(int(np.sum(w0>1e-12)), int(np.sum(w0<-1e-12))))
# [-1.12488542, 2.36332824, 3.76155718] (2, 1)
for _ in range(3):
C = rng.standard_normal((3,3))
while abs(np.linalg.det(C)) < 0.3: C = rng.standard_normal((3,3))
wn = np.linalg.eigvalsh(C.T@M@C) # 합동변환
print(np.round(np.sort(wn),6).tolist(),
(int(np.sum(wn>1e-9)), int(np.sum(wn<-1e-9))))
# [-0.898037, 0.429353, 14.303857] (2, 1)
# [-3.884024, 1.485507, 14.78572] (2, 1)
# [-0.532574, 4.853078, 8.145114] (2, 1)
# 고유값은 다 다른데 부호의 개수가 보존됩니다
# --- 심화 2: A^T A 는 양반정치, 열이 독립이면 양정치 --------------------
for (m,n,k) in [(5,3,3), (5,3,2)]:
B = rng.standard_normal((m,k)) @ rng.standard_normal((k,n))
w = np.linalg.eigvalsh(B.T@B)
print(m, n, k, np.round(w,8).tolist(), int(np.linalg.matrix_rank(B)))
# 5 3 3 [0.12891033, 0.65758503, 96.34063633] 3
# 5 3 2 [0.0, 5.88269607, 130.23032136] 2 <- 계수 부족이면 0 이 나옵니다
# --- 심화 2: 능형이 양정치로 만듭니다 -----------------------------------
Bd = np.array([[1.,2.],[2.,4.],[3.,6.]]) # 열이 종속
G = Bd.T@Bd
for lam in [0.0, 1e-3, 1.0]:
w = np.linalg.eigvalsh(G + lam*np.eye(2))
print("%.0e" % lam, (np.round(w,8)+0.0).tolist(), chol_ok(G+lam*np.eye(2)))
# 0e+00 [0.0, 70.0] False
# 1e-03 [0.001, 70.001] True
# 1e+00 [1.0, 71.0] True
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 와 가 다섯 벡터에서 모두 같고, **반대칭 부분의 이차형식이 정확히 **입니다. 그래서 대칭인 것만 다루면 됩니다.
둘째, 네 경우의 부호가 고유값의 부호 개수로 완전히 갈립니다.
셋째, 세 판정법이 일관됩니다. 양정치일 때만 모든 선행 주소행렬식이 양수이고 콜레스키가 성공합니다. 음정치의 주소행렬식이 로 부호가 섞이는 것을 눈여겨보십시오. 둘 다 양수가 아니므로 양정치가 아닙니다.
넷째, 주축 좌표에서 이고 **반축 끝점에서 **입니다. 길이가 과 입니다.
다섯째가 심화의 핵심 둘입니다. 합동변환에서 고유값은 전부 달라지는데 부호 개수 이 세 번 다 보존됩니다. 그리고 열이 종속인 에 를 더하면 고유값이 만큼 올라가 콜레스키가 성공합니다. 하나로 판정이 뒤집힙니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 관성 법칙은 세 예로 증명되지 않습니다. 심화 1의 부분공간 논증이 그 자리를 맡습니다. 또 부호 판정에 쓴 문턱 이 결과를 좌우하며, 고유값이 정확히 인지 아주 작은지를 구별하는 것은 원칙적으로 어렵습니다. 85강 심화 5와 같은 문제입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| q(\mathbf{x})=\mathbf{x}^{\top}A\mathbf | 이차형식 | 는 대칭입니다 |
| 양정치 | 모든 고유값이 양수입니다 | |
| 양반정치 | 모든 고유값이 음이 아닙니다 | |
| 부정부호 | indefinite | 부호가 섞입니다 |
| 주축 | principal axes | 고유벡터 방향입니다 |
| 선행 주소행렬식 | leading principal minor | 왼쪽 위 부분행렬식입니다 |
| 관성 | inertia | 입니다 |
| 합동 | congruent | 입니다 |
| 안장점 | saddle point | 방향마다 증감이 다릅니다 |
다음 88강에서는 특이값 분해를 다룹니다. 심화 2에서 가 양반정치라 고유값이 음이 아니었는데, 그 제곱근이 특이값입니다. 대각화가 정사각행렬에만 되고 그것도 언제나는 아니었는데, 특이값 분해는 모든 행렬에 대해 언제나 성립합니다. 이 과목의 마지막 분해이자 가장 강력한 도구입니다.