실습 · 연습문제 2개
Buckingham π 그룹의 지수 구하기 pi-groups
물리량 개의 차원을 기본 차원 개(예: 질량, 길이, 시간)의 지수로 쓴 차원 행렬 D (shape (k, n))가 있다. 열 는 물리량 의 차원이다. 무차원 조합 의 지수 벡터 는 을 만족한다.
함수 pi_exponents(D, rep, target)을 완성한다.
rep: 반복 변수의 열 번호 목록. 반복 변수들의 차원 행렬D[:, rep]은 가역이라고 가정한다(정사각, rank가 ).target: π 그룹에 지수 1로 들어갈 변수의 열 번호.- 반환: 길이 의 지수 벡터
e.e[target] = 1, 반복 변수 자리에는 무차원이 되도록 푼 지수, 나머지는 0.
예: 진자의 에서 rep = [1, 2, 3], target = 0이면 이므로 [1, -0.5, 0.5, 0, 0]이다.
테스트는 다음을 확인한다.
- 반환한
e가 을 만족하는지 - 진자 예와 유체 항력 예(항력 계수, Reynolds 수)에서 알려진 지수가 나오는지
- 반복 변수도 목표 변수도 아닌 변수의 지수는 0인지
힌트: 반복 변수의 지수 는 D[:, rep] @ x = -D[:, target]의 해다. 본문 셀 3과 같다.
순차적 임계 최소제곱(STLSQ) stlsq
SINDy는 에서 희소한 계수 행렬 를 찾는다. 함수 stlsq(Theta, dX, thr, iters)를 완성한다.
| 인자 | shape | 뜻 |
|---|---|---|
Theta |
(T, p) |
후보 함수 사전 |
dX |
(T, n) |
상태의 시간 미분 |
thr |
실수 | 임계값 |
iters |
정수 | 반복 횟수 |
알고리즘은 다음과 같다.
- 최소제곱 해 를 구한다(
np.linalg.lstsq). iters번 반복한다. 절댓값이thr보다 작은 계수를 0으로 만들고, 각 열 마다 0이 아닌 항만으로 최소제곱을 다시 풀어 그 계수를 갱신한다.(p, n)배열을 반환한다.
테스트는 다음을 확인한다.
- 잡음 없는 데이터에서 참 계수를 정확히 복원하는지
- 반환한 0이 아닌 계수의 절댓값이 모두
thr이상인지 - 한 열의 모든 계수가 임계값보다 작으면 그 열이 모두 0이 되는지(오류 없이)
- 남은 항으로 다시 맞추는 단계가 있는지(한 번 자른 뒤 다시 맞추지 않으면 계수가 치우친다)
힌트: 본문 셀 1의 stlsq와 같은 일을 한다. 남은 항이 하나도 없는 열은 건너뛴다.