실습 · 연습문제 2개
칼만 필터의 갱신 단계 kalman-update
예측 단계가 끝난 사전분포 와 새 측정 , 가 주어졌다. 갱신 단계는 다음과 같다.
함수 kf_update(m, P, y, H, R)를 완성해 (m_new, P_new)를 반환한다.
| 인자 | shape |
|---|---|
m |
(n,) |
P |
(n, n) |
y |
(k,) |
H |
(k, n) |
R |
(k, k) |
테스트는 다음을 확인한다.
- 11.4장의 가우시안 조건부분포 공식으로 계산한 결과와 같다.
- 측정 잡음이 매우 크면 갱신이 거의 일어나지 않는다.
- 갱신된 공분산은 대칭이고, 측정한 방향의 분산은 줄어든다.
힌트: 을 직접 구하지 말고 np.linalg.solve(S, ...)를 쓴다. 이고 가 대칭이므로 다.
STLSQ로 동역학 방정식 찾기 stlsq
시간미분 와 후보 함수 라이브러리 가 주어졌을 때
를 만족하는 희소한 계수 행렬 를 순차 임계 최소제곱(STLSQ)으로 구한다.
- 최소제곱 해 로 시작한다.
- 절댓값이
thresh보다 작은 계수를 0으로 만든다. - 출력 열 마다, 0이 아닌 계수에 해당하는 라이브러리 열만으로 최소제곱을 다시 풀어 그 계수들을 갱신한다.
- 2–3을
iters번 반복한다.
함수 stlsq(Theta, dX, thresh, iters=10)를 완성해 Xi(shape (p, d))를 반환한다. 한 번 0이 된 계수는 다시 살아나지 않는다(3단계에서 남은 열만 쓰므로).
테스트는 감쇠 진동자 , 의 궤적과 2차까지의 단항식 라이브러리로, 참 계수 네 개만 남는지 확인한다.
힌트: np.linalg.lstsq(A, b, rcond=None)[0]. 열 선택에는 불리언 마스크를 쓴다.