실습 · 연습문제 2개
이차형식의 타원 축 ellipse-axes
대칭 양의 정부호 행렬 에 대해 인 점들의 집합은 타원(고차원에서는 타원체)이다. 스펙트럴 정리 로 좌표를 바꾸면 이 되므로, 타원의 축은 고유벡터 방향이고 반축의 길이는 이다.
함수 ellipse_axes(S)를 완성해 (lengths, directions)를 반환한다.
| 반환 | shape | 내용 |
|---|---|---|
lengths |
(n,) |
반축의 길이, 긴 것부터 내림차순 |
directions |
(n, n) |
번째 열이 lengths[i]에 대응하는 단위 방향 벡터 |
가 대칭이 아니거나(허용오차 1e-10) 양의 정부호가 아니면 ValueError를 발생시킨다.
테스트는 다음을 확인한다.
- 대각행렬 에서 반축 와 방향 ,
- 반축 끝점 가 타원 위에 있다:
- 방향 벡터들이 정규직교다
- 고윳값에 0이나 음수가 있으면, 또는 비대칭이면
ValueError
힌트: np.linalg.eigh는 고윳값을 오름차순으로 준다. 긴 반축은 작은 고윳값에 대응한다는 점을 떠올리면 정렬을 따로 하지 않아도 된다.
거듭제곱법 power-iteration
정사각행렬 의 절댓값이 가장 큰 고윳값(지배 고윳값)이 하나이고 나머지보다 엄격히 클 때, 거듭제곱법은 다음 반복으로 그 고유벡터를 찾는다.
함수 power_iteration(A, num_iters=10000, tol=1e-10, seed=0)를 완성해 (lam, v)를 반환한다.
v: 길이가 1인 고유벡터 추정, shape(n,)lam: Rayleigh quotient로 구한 고윳값 추정(실수)- 시작 벡터는
np.random.default_rng(seed)로 만든 무작위 벡터를 쓴다. - 연속한 두 고윳값 추정의 차이가
tol보다 작아지면 멈춘다. 최대num_iters번 반복한다.
테스트는 다음을 확인한다.
- 대칭행렬에서
np.linalg.eigh의 지배 고윳값·고유벡터와 같다(고유벡터는 부호를 무시하고 비교). - 본문 실습의 Leslie 행렬(비대칭)에서 지배 고윳값 1.0801을 찾는다.
- 지배 고윳값이 음수인 행렬(예: 고윳값 과 )에서도 을 찾는다.
힌트: 지배 고윳값이 음수이면 의 부호가 매 step 바뀐다. 그래서 벡터끼리의 차이 로 수렴을 판정하면 영원히 멈추지 않는다. 고윳값 추정의 변화로 판정하거나, 부호를 무시하고 비교한다.