7.1 벡터공간과 선형사상

실습 · 연습문제 2개

기저 변환 change-of-basis

선형사상 T:V→VT: V \to V를 옛 basis에서 표현한 행렬이 A\mathbf{A}이다. 새 basis 벡터들을 옛 basis의 좌표로 적어 열로 쌓은 가역행렬을 S\mathbf{S}라 하면, 한 벡터의 좌표는 [v]old=S [v]new[\mathbf{v}]_{\text{old}} = \mathbf{S}\,[\mathbf{v}]_{\text{new}}로 이어진다.

함수 change_basis(A, S)를 완성해, 같은 사상 TT를 새 basis에서 표현한 행렬을 반환한다.

인자 shape 의미
A (n, n) 옛 basis에서의 행렬
S (n, n) 열 = 새 basis 벡터의 옛 좌표

테스트는 다음을 확인한다.

  • 새 좌표 c\mathbf{c}로 준 벡터에 대해, 새 행렬로 계산한 결과를 옛 좌표로 옮긴 값이 옛 행렬로 계산한 값과 같다: S(Anewc)=A(Sc)\mathbf{S}(\mathbf{A}_{\text{new}}\mathbf{c}) = \mathbf{A}(\mathbf{S}\mathbf{c}).
  • 본문의 예(x d/dxx\,d/dx를 Legendre basis로 옮기기)가 맞다.
  • trace와 행렬식이 바뀌지 않는다.

힌트: 새 좌표 → 옛 좌표 → A\mathbf{A} 적용 → 새 좌표 순서로 생각한다. S−1\mathbf{S}^{-1}을 직접 만들기보다 np.linalg.solve로 연립방정식을 푸는 편이 정확하다.

미분 연산자의 행렬 derivative-matrix

차수 nn 이하인 다항식 전체 Pn\mathcal{P}_n에서 미분 D(p)=p′D(p) = p'는 선형사상이다. 단항식 basis (1,x,x2,…,xn)(1, x, x^2, \dots, x^n)에서 다항식 p(x)=c0+c1x+⋯+cnxnp(x) = c_0 + c_1 x + \cdots + c_n x^n의 좌표는 계수 벡터 (c0,c1,…,cn)(c_0, c_1, \dots, c_n)이다(상수항부터).

함수 derivative_matrix(n)을 완성해, 이 basis에서 D:Pn→PnD: \mathcal{P}_n \to \mathcal{P}_n를 나타내는 (n + 1, n + 1) 행렬을 반환한다. 행렬 D\mathbf{D}는 모든 계수 벡터 c에 대해 D @ c가 p′p'의 계수 벡터(길이 n + 1, 마지막 성분은 0)가 되어야 한다.

테스트는 다음을 확인한다.

  • shape이 (n + 1, n + 1)이다.
  • 무작위 다항식에 대해 numpy.polynomial.polynomial.polyder의 결과와 같다.
  • 상수 다항식은 0으로 간다(핵).
  • Dn+1=0\mathbf{D}^{n+1} = \mathbf{0}이다(n+1n + 1번 미분하면 0).

힌트: 행렬의 jj번째 열(0부터 센다)은 D(xj)=j xj−1D(x^j) = j\,x^{j-1}의 좌표다.