79강에서 행렬식이 부피 배율임을 밝혔습니다. 그런데 마지막에 이런 한계를 지적했습니다.
부피는 같은데 하는 일이 전혀 다릅니다. 하나는 아무것도 안 하고 다른 하나는 한 방향으로 열 배 늘이고 다른 방향으로 열 배 줄입니다.
이 강의가 그 관점을 세웁니다. 물음은 이렇습니다.
를 지나도 방향이 바뀌지 않는 벡터가 있는가.
있다면 그 방향에서 는 그저 상수배입니다. 차원 문제가 그 방향에서는 일차원 문제가 되고, 그런 방향으로 기저를 잡으면 행렬 전체가 대각이 됩니다.
75강 문제 4에서 이미 그런 일을 보았습니다. 가 기저에서 이 되었고, 가 과 만으로 계산됐습니다. 그때 "우연이 아니다"라고 했는데, 이 강의에서 그 이유를 밝힙니다.
문제. 를 봅니다.
(1) , , 이 어디로 갑니까?
(2) 어느 것이 방향을 유지합니까?
(3) 그런 벡터를 찾는 조건을 식으로 쓰세요.
생각의 실마리. "방향이 같다"는 것은 상수배라는 뜻입니다. 가 의 몇 배인지 보면 됩니다.
풀이. (1) 계산합니다.
| \mathbf | A\mathbf | 방향 유지 |
|---|---|---|
| 예 | ||
| 예 | ||
| 아니오 |
(2) 앞의 둘입니다. 각각 배와 배입니다.
(3) 조건은
입니다.
이 문제에서 배우는 것: 고유값과 고유벡터.
정의. 이고 이면 를 고유값, 를 그에 대한 고유벡터라 합니다.
조건이 필수입니다. 영벡터는 어떤 에 대해서도 식을 만족하므로, 허용하면 모든 수가 고유값이 됩니다.
은 허용됩니다. 인 비자명한 가 있으면 이 고유값이며, 그것은 과 같습니다.
69강의 가역 조건이 여기서 다시 나타납니다.
정의가 좌표에 의존하지 않는다는 점이 중요합니다. "이 방향은 배 된다"는 진술에 기저가 들어 있지 않습니다. 그래서 77강에서 고유값이 닮음 불변량이었습니다.
**76강 심화 6의 표에서 "좌표 없는 진술"**로 적어 둔 것이 이것입니다.
고유벡터는 상수배로 정해지지 않습니다. 가 고유벡터이면 도 그렇습니다.
방향이 정해지고 크기는 자유입니다. 그래서 대개 단위벡터로 정규화합니다.
바로 확인 1.
확인 1-1. 고유값과 고유벡터의 정의를 쓰세요.
답. 이고 입니다.
확인 1-2. 조건이 필요한 이유를 쓰세요.
답. 영벡터를 허용하면 모든 수가 고유값이 되기 때문입니다.
확인 1-3. 이 고유값인 것과 같은 조건을 쓰세요.
답. 가 특이한 것, 즉 입니다.
문제. 문제 1의 에 대해
(1) 를 동차계로 바꾸세요.
(2) 비자명해가 있을 조건을 쓰세요.
(3) 고유값을 구하세요.
생각의 실마리. 우변을 좌변으로 넘기면 68강의 동차계가 됩니다. 그러면 비자명해의 조건을 이미 알고 있습니다.
풀이. (1) 옮기면
를 로 써야 합니다. 는 크기가 맞지 않습니다.
(2) 68강 문제 5에서 동차계가 비자명해를 가질 조건은 이었고, 69강에서 그것이 특이와 같았습니다. 78강 문제 4에서 특이는 입니다.
(3) 계산합니다.
77강 심화 1에서 본 형태입니다.
검산에서 , 이고 근이 과 입니다. eigvals와 일치합니다.
이 문제에서 배우는 것: 특성방정식.
특성다항식과 특성방정식.
의 근이 고유값입니다.
부호 규약이 둘입니다. 로 쓰면 최고차 계수가 이라 깔끔하고, 로 쓰면 배 차이가 납니다. 근은 같습니다.
에서는 외울 만합니다.
이상은 78강의 방법으로 행렬식을 전개합니다.
중요한 사실 셋을 정리합니다.
첫째, 고유값이 최대 개입니다. 차 다항식의 근이기 때문입니다.
둘째, 복소수까지 세면 정확히 개입니다(중복 포함). 대수학의 기본정리이며, 30강에서 다뤘습니다.
셋째, 실행렬이어도 고유값이 복소수일 수 있습니다. 문제 5에서 회전행렬을 봅니다.
71강 심화 6에서 "체를 넓혀야 하는 이유"라고 한 것이 이 상황입니다.
계산에는 쓰지 않습니다. 81강 심화 2에서 본 대로 실무에서는 QR 알고리즘을 씁니다. 다항식의 근을 구하는 것이 수치적으로 불안정하기 때문입니다.
바로 확인 2.
확인 2-1. 특성방정식을 쓰세요.
답. 입니다.
확인 2-2. 의 특성방정식을 대각합과 행렬식으로 쓰세요.
답. 입니다.
확인 2-3. 실무에서 고유값을 어떻게 계산합니까?
답. QR 알고리즘을 씁니다.
문제. 문제 2에서 을 얻었습니다.
(1) 각 에 대해 의 계수를 구하세요.
(2) 영공간을 구하세요.
(3) 결과를 확인하세요.
생각의 실마리. 고유벡터는 의 비자명해이므로, 68강의 영공간 구하기입니다.
풀이. (1) 검산에서 두 경우 모두 계수가 이고 영공간의 차원이 입니다.
(2) 각각 과 방향입니다.
(3) 검산에서 가 정확히 영벡터입니다.
이 문제에서 배우는 것: 고유공간.
고유공간. 고유값 에 대해
를 고유공간이라 합니다. 부분공간이며 영벡터를 포함하지만, 고유벡터는 그중 영이 아닌 것들입니다.
71강 문제 5에서 영공간이 부분공간이라 했으므로 자동으로 따라옵니다. 그래서 고유벡터들의 일차결합도 같은 고유값의 고유벡터입니다.
두 가지 중복도를 구별합니다.
| 이름 | 정의 |
|---|---|
| 대수적 중복도 | 특성다항식에서 의 중근 차수 |
| 기하적 중복도 | \dim E_ |
언제나 기하적 대수적입니다. 등호가 깨지면 85강에서 대각화가 실패합니다.
왼쪽 부등식은 가 고유값이면 가 특이하므로 영공간이 자명하지 않다는 뜻입니다.
구하는 절차를 정리합니다.
| 단계 | 하는 일 |
|---|---|
| 1 | 을 풀어 고유값을 얻습니다 |
| 2 | 각 에 대해 을 풉니다 |
| 3 | 영공간의 기저가 고유벡터입니다 |
2단계에서 68강의 소거를 씁니다. 자유변수의 개수가 곧 기하적 중복도입니다.
바로 확인 3.
확인 3-1. 고유공간의 정의를 쓰세요.
답. 입니다.
확인 3-2. 두 중복도의 관계를 쓰세요.
답. 기하적 중복도가 대수적 중복도 이하입니다.
확인 3-3. 고유벡터를 구하는 절차를 쓰세요.
답. 고유값을 구한 뒤 의 영공간을 계산합니다.
문제. 무작위 행렬에서 다음을 비교하세요.
(1) 고유값의 합과
(2) 고유값의 곱과
(3) 이유를 설명하세요.
생각의 실마리. 특성다항식의 계수와 근의 관계를 봅니다. 2강에서 배운 근과 계수의 관계입니다.
풀이. (1)과 (2)를 검산에서 확인합니다.
| \sum\lambda_ | \prod\lambda_ | |||
|---|---|---|---|---|
모두 일치합니다.
(3) 특성다항식을 인수분해하면
입니다. 전개하면 의 계수가 이고 상수항이 입니다.
한편 를 직접 전개하면 의 계수가 이고, 을 넣으면 입니다.
이 문제에서 배우는 것: 두 불변량의 정체.
77강에서 대각합과 행렬식이 닮음 불변량이라 했습니다. 왜 그런지가 이제 분명합니다. 둘 다 고유값에서 만들어지고, 고유값이 좌표와 무관하기 때문입니다.
79강 심화 3의 관계도 설명됩니다.
의 고유값이 이면 의 고유값이 이므로
곱의 로그가 합이라는 관계가 그대로 나타납니다.
실용적 쓰임도 있습니다.
| 상황 | 쓰는 법 |
|---|---|
| 고유값 | 합이 , 곱이 |
| 검산 | 구한 고유값의 합과 곱을 확인 |
| 하나를 알 때 | 나머지를 즉시 구합니다 |
에서 고유값 하나가 이고 이면 다른 하나가 입니다. 계산이 절반으로 줍니다.
바로 확인 4.
확인 4-1. 고유값의 합이 무엇입니까?
답. 대각합입니다.
확인 4-2. 고유값의 곱이 무엇입니까?
답. 행렬식입니다.
확인 4-3. 그 근거를 한 문장으로 쓰세요.
답. 특성다항식을 인수분해했을 때의 계수 비교입니다.
문제. 다음의 고유값을 구하세요.
생각의 실마리. 각각에 구조가 있습니다. 78강의 삼각행렬 행렬식과 83강의 정사영 성질을 씁니다.
풀이. 검산에서 계산합니다.
삼각행렬 . 도 삼각이므로 대각의 곱입니다.
대각 성분이 곧 고유값입니다.
정사영 . 83강 심화 2에서 보았습니다. 고유값이 입니다.
회전 . 특성방정식이 이므로
실수 고유값이 없습니다. 당연합니다. 평면을 돌리면 어떤 방향도 제자리로 오지 않습니다.
멱영 . 고유값이 입니다. 그런데 이므로 입니다.
77강 문제 4에서 이 행렬이 대각화되지 않는다고 한 이유입니다.
대칭 . 고유값이 과 로 실수이고, 고유벡터의 내적이 으로 직교합니다.
이 문제에서 배우는 것: 구조가 고유값을 결정합니다.
| 행렬 | 고유값 |
|---|---|
| 대각, 삼각 | 대각 성분 |
| 정사영 | 과 |
| 회전 () | e^ |
| 멱영 | 만 |
| 대칭 | 실수, 고유벡터가 직교 |
| 직교 |
다섯째 줄이 86강의 스펙트럼 정리입니다. 대칭행렬은 언제나 실수 고유값과 직교 고유벡터를 가지며, 이 과목에서 가장 중요한 정리입니다.
셋째 줄의 복소 고유값을 조금 봅니다. 회전각이 인 행렬의 고유값은
58강의 오일러 공식이 여기서 나타납니다. 크기가 이므로 길이를 보존하고, 편각이 회전각입니다.
실행렬의 복소 고유값은 언제나 켤레쌍으로 나옵니다. 특성다항식의 계수가 실수이기 때문입니다.
넷째 줄이 예고하는 문제도 중요합니다. 고유값만으로는 부족합니다. 과 가 고유값이 같은데 다른 행렬이고, 그 차이가 기하적 중복도입니다.
바로 확인 5.
확인 5-1. 삼각행렬의 고유값을 쓰세요.
답. 대각 성분입니다.
확인 5-2. 회전행렬의 고유값을 쓰세요.
답. 로 복소수입니다.
확인 5-3. 대칭행렬의 고유값과 고유벡터의 성질을 쓰세요.
답. 고유값이 실수이고 고유벡터가 직교합니다.
| 개념 | 식 |
|---|---|
| 정의 | , \mathbf{v}\ne\mathbf |
| 특성방정식 | |
| 고유공간 | |
| 합 | |
| 곱 |
| 구조 | 고유값 |
|---|---|
| 삼각·대각 | 대각 성분 |
| 정사영 | |
| 회전 | e^ |
| 멱영 | 만 |
| 대칭 | 실수, 직교 고유벡터 |
| 특이 | 을 포함 |
| 변환 | 고유값의 변화 |
|---|---|
| A^ | \lambda^ |
| A^ | |
| 그대로 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 로 씁니다 | 여야 합니다 |
| 영벡터를 고유벡터라 합니다 | 입니다 |
| 실행렬이면 실고유값이라 봅니다 | 복소수일 수 있습니다 |
| 특성방정식으로 계산합니다 | QR 알고리즘을 씁니다 |
문제 6. 고유값과 고유벡터의 정의를 쓰세요.
답. 이고 입니다.
문제 7. 특성방정식을 쓰세요.
답. 입니다.
문제 8. 의 고유값을 쓰세요.
답. 삼각행렬이므로 과 입니다.
문제 9. 의 고유값을 구하세요.
답. , 이므로 에서 입니다.
문제 10. 고유공간의 정의를 쓰세요.
답. 입니다.
문제 11. 두 중복도의 관계를 쓰세요.
답. 기하적 중복도가 대수적 중복도 이하입니다.
문제 12. 고유값의 합과 곱이 무엇입니까?
답. 각각 대각합과 행렬식입니다.
문제 13. 에서 고유값 하나가 이고 이면 다른 하나는?
답. 입니다.
문제 14. 이 고유값인 조건을 쓰세요.
답. 가 특이한 것입니다.
문제 15. 회전행렬의 고유값을 쓰세요.
답. 입니다.
문제 16. 의 고유값을 쓰세요.
답. 입니다.
문제 17. 의 고유값을 쓰세요.
답. 입니다.
문제 18. 대칭행렬의 고유값과 고유벡터의 성질을 쓰세요.
답. 고유값이 실수이고 서로 다른 고유값의 고유벡터가 직교합니다.
심화 1. 서로 다른 고유값의 고유벡터가 일차독립임을 증명하세요.
풀이. 85강의 대각화 조건에 필요한 사실입니다.
정리. 가 서로 다르면 대응하는 고유벡터 가 일차독립입니다.
귀납법으로 증명합니다. 이면 이므로 독립입니다.
까지 성립한다고 하고 관계식을 봅니다.
양변에 를 적용하면
원래 식에 를 곱해 빼면
항이 사라졌습니다. 귀납 가정에서 앞의 개가 독립이므로
**이므로 **입니다. 그러면 원래 식이 이 되고 입니다.
검산에서 확인합니다. 형태에 가까운 행렬의 고유값이 로 서로 다르고, 고유벡터 행렬의 계수가 입니다. 독립입니다.
따라오는 결과가 중요합니다.
따름정리. 행렬의 고유값이 모두 다르면 고유벡터로 의 기저를 만들 수 있고, 따라서 대각화됩니다.
충분조건이지 필요조건은 아닙니다. 는 고유값이 모두 같은데 대각화되어 있습니다. 85강에서 정확한 조건을 다룹니다.
증명의 구조를 다시 봅니다. 를 적용해 각 항에 를 붙이고, 하나를 골라 소거했습니다. 이 기법이 여러 곳에서 쓰이며, 반데르몬드 행렬식의 구조와도 관련됩니다.
심화 2. 고유값이 변환에 따라 어떻게 변하는지 정리하세요.
풀이. 에서 출발해 여러 변환을 봅니다.
거듭제곱. 반복하면
검산에서 의 고유값 에 대해 이 이고 이 입니다.
역행렬. 가 가역이면 이고
검산에서 입니다.
이동. 입니다. 검산에서 의 고유값이 입니다.
다항식. 일반적으로
고유벡터는 그대로이고 고유값만 를 통과합니다.
정리합니다.
| 변환 | 고유값 | 고유벡터 |
|---|---|---|
| A^ | \lambda^ | 그대로 |
| A^ | 그대로 | |
| 그대로 | ||
| 그대로 | ||
| A^ | 같습니다 | 다릅니다 |
| 같습니다 | S^{-1}\mathbf |
다섯째 줄을 조심해야 합니다. 이므로 고유값은 같지만, 고유벡터는 일반적으로 다릅니다. 의 고유벡터를 왼쪽 고유벡터라 하며, 을 만족합니다.
응용을 봅니다.
이동은 수치 알고리즘의 핵심입니다. 81강 심화 2에서 QR 알고리즘에 이동을 넣는다고 했는데, 의 고유값이 이므로 를 고유값에 가깝게 잡으면 수렴이 빨라집니다.
역거듭제곱법도 여기서 나옵니다. 의 고유값이 이므로, 에 가장 가까운 고유값이 가장 큰 값이 됩니다. 심화 5의 거듭제곱법과 결합하면 원하는 고유값을 골라 구할 수 있습니다.
심화 3. 고유값이 복소수인 경우를 다루세요.
풀이. 문제 5에서 회전행렬의 고유값이 였습니다. 실수 세계에서 무슨 뜻인지 봅니다.
만큼 회전하는 행렬의 고유값은 이고, 고유벡터는
입니다. 실벡터가 아닙니다.
실수 세계에서 읽는 법이 있습니다. 복소 고유벡터를 실부와 허부로 가르면
이고 가 만드는 이차원 평면이 불변입니다. 그 평면에서 가 회전과 확대로 작용합니다.
과 가 크기와 편각이며, 30강의 극형식이 여기서 뜻을 얻습니다.
이것이 실 조르당 형입니다. 대각 대신 블록이 놓입니다.
동역학에서 이 구조가 중요합니다. 의 거동이 고유값의 크기로 결정됩니다.
| $\lvert \lambda\rvert $ | 거동 |
|---|---|
| 원점으로 수렴 | |
| 크기 유지 (회전이면 진동) | |
| 발산 |
복소 고유값이면 나선을 그립니다. 크기가 보다 작으면 안쪽으로 감기고 크면 바깥으로 감깁니다.
미분방정식에서도 같습니다. 의 해가 꼴이므로
실부가 증감을 결정하고 허부가 진동수를 결정합니다. 58강의 오일러 공식이 그 해석을 줍니다.
100강대의 미분방정식과 제어이론에서 이 판정을 씁니다.
심화 4. 고유값을 수치적으로 계산할 때의 문제를 논하세요.
풀이. 문제 2에서 특성방정식으로 계산하지 않는다고 했습니다. 이유를 정확히 봅니다.
첫째, 다항식의 근이 계수에 민감합니다.
윌킨슨의 예를 봅니다.
의 계수를 만큼 바꾸면, 근 중 일부가 복소수로 갈라지고 실수부가 크게 움직입니다.
둘째, 특성다항식의 계수를 구하는 것도 불안정합니다. 행렬식 계산에 반올림이 쌓입니다.
셋째, 고유값 자체가 민감할 수 있습니다. 이것은 알고리즘의 문제가 아니라 문제의 성질입니다.
의 고유값이 입니다. 이면 고유값이 로, **입력 섭동 이 출력 섭동 **을 냅니다. 제곱근만큼 증폭됩니다.
대칭행렬은 안전합니다. 86강에서 다루지만 미리 말하면
로 증폭이 없습니다. 대칭이 아닌 행렬은 고유벡터가 거의 평행할 때 위험합니다.
| 행렬 | 고유값 민감도 |
|---|---|
| 대칭 | 안전 () |
| 정규 | 안전 |
| 일반 | 고유벡터 조건수에 비례 |
| 결손 (대각화 불가) | 매우 민감 |
넷째 줄이 가장 나쁩니다. 조르당 블록 크기가 이면 섭동이 규모로 증폭됩니다.
실무의 방법을 정리합니다.
| 단계 | 내용 |
|---|---|
| 1 | 헤센베르크 형으로 축소 (직교 변환) |
| 2 | 이동을 넣은 QR 반복 |
| 3 | 수렴한 고유값을 떼어냅니다 |
모두 직교 변환이므로 오차가 증폭되지 않습니다. 81강에서 QR이 안정한 이유와 같습니다.
심화 5. 거듭제곱법을 유도하고 수렴을 확인하세요.
풀이. 가장 큰 고유값 하나만 필요할 때 쓰는 간단한 방법입니다.
착상. 아무 벡터 을 고유벡터로 전개합니다(대각화 가능하다고 가정).
를 번 적용하면
이면 괄호 안의 뒷항들이 기하급수적으로 사라집니다.
**수렴 속도가 **입니다. 두 고유값이 가까우면 느립니다.
검산에서 확인합니다. 이고 입니다.
| 반복 | \mathbf | 레일리 몫 |
|---|---|---|
로 수렴하고 고유값이 입니다.
레일리 몫을 썼습니다.
가 고유벡터면 정확히 이고, 근처에서는 오차가 제곱으로 작아집니다(대칭행렬의 경우). 표에서 일 때 벡터 오차가 인데 고유값 오차가 입니다.
응용이 많습니다.
| 응용 | 내용 |
|---|---|
| 페이지랭크 | 웹 그래프의 주고유벡터 |
| 주성분 | 공분산의 최대 고유벡터 (89강) |
| 스펙트럼 반지름 | 반복법의 수렴 판정 |
| 그래프 분할 | 라플라시안의 고유벡터 |
첫째 줄이 유명합니다. 웹 페이지의 중요도를 링크 구조의 주고유벡터로 정의하며, 행렬이 거대하고 희소하므로 거듭제곱법이 유일한 현실적 방법입니다.
한계도 있습니다. 가장 큰 것 하나만 주고, 두 고유값의 크기가 같으면 수렴하지 않으며(복소 켤레쌍), 수렴이 느릴 수 있습니다. 심화 2의 이동과 결합한 역거듭제곱법이 그 대응입니다.
심화 6. 고유값이 나타나는 자리를 정리하세요.
풀이. 이 개념이 얼마나 널리 쓰이는지 봅니다.
동역학의 안정성. 나 의 장기 거동이 고유값으로 결정됩니다. 심화 3에서 다뤘습니다.
진동. 스프링과 질량계에서 의 고유값이 고유진동수의 제곱입니다. 고유벡터가 진동 모드이며, 다리와 건물의 설계에서 공진을 피하려고 계산합니다.
양자역학. 해밀토니안의 고유값이 에너지 준위이고 고유벡터가 정상 상태입니다. 86강의 스펙트럼 정리가 그 수학적 배경입니다.
마르코프 연쇄. 전이행렬의 고유값 에 대응하는 고유벡터가 정상분포입니다. 둘째로 큰 고유값의 크기가 수렴 속도를 정합니다.
주성분분석. 공분산 행렬의 고유값이 각 방향의 분산이고 고유벡터가 그 방향입니다. 89강의 주제입니다.
그래프. 라플라시안의 고유값이 연결성을 말합니다. 의 중복도가 연결 성분의 개수이고, 둘째로 작은 값이 대수적 연결도로 분할의 난이도를 잽니다.
신경망. 야코비 행렬의 고유값이 역전파에서 그래디언트가 커지는지 사라지는지를 결정합니다. 246강에서 다룹니다.
추천과 검색. 페이지랭크와 스펙트럼 군집화가 고유벡터 계산입니다.
정리합니다.
| 분야 | 고유값이 뜻하는 것 |
|---|---|
| 동역학 | 안정성 |
| 진동 | 고유진동수 |
| 양자역학 | 에너지 준위 |
| 확률 | 수렴 속도 |
| 통계 | 분산 |
| 그래프 | 연결성 |
| 학습 | 그래디언트 증폭 |
**공통 구조는 "반복하면 무엇이 남는가"**입니다. 를 여러 번 적용할 때 큰 고유값 방향이 살아남고 작은 것은 사라집니다. 심화 5의 거듭제곱법이 그 원리를 그대로 쓴 것입니다.
이 강의에서는 numpy만 씁니다. 고유값을 특성방정식으로 구해 라이브러리와 맞추고, 합과 곱을 대각합·행렬식과 비교하며, 거듭제곱법의 수렴을 봅니다.
import numpy as np
# --- 문제 1: 방향이 바뀌지 않는 벡터 ------------------------------------
A = np.array([[2.,1.],[1.,2.]])
for v in [np.array([1.,1.]), np.array([1.,-1.]), np.array([1.,0.])]:
Av = A@v
print(v.tolist(), Av.tolist(),
bool(np.allclose(np.cross(np.append(v,0), np.append(Av,0)), 0)))
# [1.0, 1.0] [3.0, 3.0] True
# [1.0, -1.0] [1.0, -1.0] True
# [1.0, 0.0] [2.0, 1.0] False
# --- 문제 2: 특성방정식으로 고유값 --------------------------------------
print("%.8f %.8f" % (np.trace(A), np.linalg.det(A))) # 4.00000000 3.00000000
lam = np.roots([1., -np.trace(A), np.linalg.det(A)]) # L^2 - (tr)L + det = 0
print(np.round(np.sort(lam)[::-1],10).tolist()) # [3.0, 1.0]
print(np.round(np.sort(np.linalg.eigvals(A))[::-1],10).tolist()) # [3.0, 1.0]
for l in [3., 1.]:
r = int(np.linalg.matrix_rank(A - l*np.eye(2)))
print(l, r, 2-r) # 계수와 고유공간 차원
# 3.0 1 1
# 1.0 1 1
# --- 문제 3: 고유벡터는 (A - LI) 의 영공간 ------------------------------
def nullvec(M):
U, s, Vt = np.linalg.svd(M)
v = Vt[-1]
return v if v[np.argmax(np.abs(v))] > 0 else -v
for l in [3., 1.]:
v = nullvec(A - l*np.eye(2))
print(l, np.round(v/np.abs(v).max(),8).tolist(),
(np.round(A@v - l*v, 10)+0.0).tolist())
# 3.0 [1.0, 1.0] [0.0, 0.0]
# 1.0 [-1.0, 1.0] [0.0, 0.0]
# --- 문제 4: 합은 대각합, 곱은 행렬식 -----------------------------------
rng = np.random.default_rng(31)
for n in [2,3,4]:
M = rng.standard_normal((n,n)); ev = np.linalg.eigvals(M)
print(n, "%.8f %.8f" % (np.trace(M), np.real(np.sum(ev))),
"%.8f %.8f" % (np.linalg.det(M), np.real(np.prod(ev))))
# 2 -1.36746109 -1.36746109 0.22406583 0.22406583
# 3 1.32971453 1.32971453 -1.41220765 -1.41220765
# 4 -0.29369879 -0.29369879 -0.46984201 -0.46984201
# --- 문제 5: 구조가 고유값을 결정합니다 ---------------------------------
T = np.array([[2.,5.,1.],[0.,3.,4.],[0.,0.,-1.]]) # 삼각
print(np.round(np.sort(np.linalg.eigvals(T).real)[::-1],8).tolist(), np.diag(T).tolist())
# [3.0, 2.0, -1.0] [2.0, 3.0, -1.0]
P = np.array([[1.,0.],[0.,0.]]) # 정사영
print(np.round(np.sort(np.linalg.eigvals(P).real)[::-1],8).tolist()) # [1.0, 0.0]
R = np.array([[0.,-1.],[1.,0.]]) # 회전
print(np.round(np.linalg.eigvals(R),8).tolist()) # [1j, -1j]
N = np.array([[0.,1.],[0.,0.]]) # 멱영
print(np.round(np.linalg.eigvals(N),8).tolist(),
int(np.linalg.matrix_rank(N - 0*np.eye(2)))) # [0.0, 0.0] 1
S = np.array([[4.,1.],[1.,3.]]) # 대칭
ws, vs = np.linalg.eigh(S)
print(np.round(ws,8).tolist(), "%.12f" % float(vs[:,0] @ vs[:,1]))
# [2.38196601, 4.61803399] 0.000000000000 (실수이고 고유벡터가 직교)
# --- 심화 1: 서로 다른 고유값이면 고유벡터가 독립 -----------------------
D = np.array([[5.,2.,0.],[0.,3.,0.],[0.,0.,1.]])
wd, vd = np.linalg.eig(D)
print(np.round(np.sort(wd.real)[::-1],8).tolist(), int(np.linalg.matrix_rank(vd)))
# [5.0, 3.0, 1.0] 3
# --- 심화 2: 변환에 따른 고유값 ------------------------------------------
for k in [1,2,3]:
print(k, np.round(np.sort(np.linalg.eigvals(
np.linalg.matrix_power(A,k)).real)[::-1],8).tolist())
# 1 [3.0, 1.0]
# 2 [9.0, 1.0]
# 3 [27.0, 1.0]
print(np.round(np.sort(np.linalg.eigvals(np.linalg.inv(A)).real)[::-1],8).tolist())
# [1.0, 0.33333333]
print(np.round(np.sort(np.linalg.eigvals(A + 3*np.eye(2)).real)[::-1],8).tolist())
# [6.0, 4.0]
# --- 심화 5: 거듭제곱법 --------------------------------------------------
v = np.array([1.,0.])
for it in range(1, 25):
v = A@v; v = v/np.linalg.norm(v)
if it in [1,3,10,24]:
print(it, np.round(v,8).tolist(), "%.10f" % float(v@A@v))
# 1 [0.89442719, 0.4472136] 2.8000000000
# 3 [0.73279349, 0.6804511] 2.9972602740
# 10 [0.70711876, 0.70709481] 2.9999999994
# 24 [0.70710678, 0.70710678] 3.0000000000
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 세 벡터 중 둘만 방향을 유지합니다. 외적이 인지로 평행을 판정했으며, 65강의 도구가 쓰였습니다.
둘째, 특성방정식의 근과 eigvals가 정확히 일치합니다. 그리고 의 계수가 이라 고유공간의 차원이 입니다.
셋째, 고유벡터를 특이값 분해로 얻었고 가 정확히 영벡터입니다.
넷째, 무작위 세 크기에서 합과 대각합, 곱과 행렬식이 소수 여덟 자리까지 일치합니다.
다섯째, 구조별 고유값이 예상대로입니다. 삼각행렬은 대각 성분이고, 회전은 로 실수 고유값이 없으며, 멱영은 인데 고유공간이 일차원이라 대수적 중복도 보다 작습니다. 대칭행렬만 실수이면서 고유벡터가 직교합니다.
거듭제곱법도 인상적입니다. **번 반복에 고유값이 **이고 벡터가 입니다. 수렴 속도가 이므로 번이면 수준입니다.
코드로 할 수 없는 일도 분명히 해 둡니다. eigvals는 특성방정식을 풀지 않습니다. 81강 심화 2의 QR 알고리즘을 쓰므로, 여기서 두 값이 일치하는 것은 서로 다른 방법이 같은 답에 도달했다는 확인입니다. 그리고 라 특성방정식이 안정했을 뿐이며, 심화 4에서 본 대로 차수가 크면 그 방법은 쓸 수 없습니다. 회전행렬의 고유값이 복소수로 나온 것도 눈여겨보십시오. 실행렬이라고 실고유값이 나오지 않습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 고유값 | 그 방향의 배율입니다 | |
| \mathbf | 고유벡터 | 방향이 안 바뀌는 벡터입니다 |
| 특성다항식 | 입니다 | |
| E_ | 고유공간 | 입니다 |
| 대수적 중복도 | algebraic | 특성다항식의 중근 차수입니다 |
| 기하적 중복도 | geometric | 고유공간의 차원입니다 |
| 레일리 몫 | Rayleigh quotient | 입니다 |
| 스펙트럼 반지름 | spectral radius | 고유값 크기의 최댓값입니다 |
다음 85강에서는 고유벡터로 기저를 잡습니다. 이 강의에서 방향을 찾았으니, 그 방향들이 기저를 이루면 행렬이 대각이 됩니다. 75강 문제 4에서 미리 본 계산이며, 언제 가능한지가 그 강의의 중심 질문입니다. 문제 5의 멱영행렬처럼 실패하는 경우가 있기 때문입니다.