실습 · 연습문제 2개
기저 변환 change-of-basis
선형사상 를 옛 basis에서 표현한 행렬이 이다. 새 basis 벡터들을 옛 basis의 좌표로 적어 열로 쌓은 가역행렬을 라 하면, 한 벡터의 좌표는 로 이어진다.
함수 change_basis(A, S)를 완성해, 같은 사상 를 새 basis에서 표현한 행렬을 반환한다.
| 인자 | shape | 의미 |
|---|---|---|
A |
(n, n) |
옛 basis에서의 행렬 |
S |
(n, n) |
열 = 새 basis 벡터의 옛 좌표 |
테스트는 다음을 확인한다.
- 새 좌표 로 준 벡터에 대해, 새 행렬로 계산한 결과를 옛 좌표로 옮긴 값이 옛 행렬로 계산한 값과 같다: .
- 본문의 예(를 Legendre basis로 옮기기)가 맞다.
- trace와 행렬식이 바뀌지 않는다.
힌트: 새 좌표 → 옛 좌표 → 적용 → 새 좌표 순서로 생각한다. 을 직접 만들기보다 np.linalg.solve로 연립방정식을 푸는 편이 정확하다.
미분 연산자의 행렬 derivative-matrix
차수 이하인 다항식 전체 에서 미분 는 선형사상이다. 단항식 basis 에서 다항식 의 좌표는 계수 벡터 이다(상수항부터).
함수 derivative_matrix(n)을 완성해, 이 basis에서 를 나타내는 (n + 1, n + 1) 행렬을 반환한다. 행렬 는 모든 계수 벡터 c에 대해 D @ c가 의 계수 벡터(길이 n + 1, 마지막 성분은 0)가 되어야 한다.
테스트는 다음을 확인한다.
- shape이
(n + 1, n + 1)이다. - 무작위 다항식에 대해
numpy.polynomial.polynomial.polyder의 결과와 같다. - 상수 다항식은 0으로 간다(핵).
- 이다(번 미분하면 0).
힌트: 행렬의 번째 열(0부터 센다)은 의 좌표다.