25.2 방정식 발견과 기호 회귀

실습 · 연습문제 2개

Buckingham π 그룹의 지수 구하기 pi-groups

물리량 nn개의 차원을 기본 차원 kk개(예: 질량, 길이, 시간)의 지수로 쓴 차원 행렬 D (shape (k, n))가 있다. 열 ii는 물리량 qiq_i의 차원이다. 무차원 조합 Π=∏iqiei\Pi = \prod_i q_i^{e_i}의 지수 벡터 e\mathbf{e}는 De=0\mathbf{D}\mathbf{e} = \mathbf{0}을 만족한다.

함수 pi_exponents(D, rep, target)을 완성한다.

  • rep: 반복 변수의 열 번호 목록. 반복 변수들의 차원 행렬 D[:, rep]은 가역이라고 가정한다(정사각, rank가 kk).
  • target: π 그룹에 지수 1로 들어갈 변수의 열 번호.
  • 반환: 길이 nn의 지수 벡터 e. e[target] = 1, 반복 변수 자리에는 무차원이 되도록 푼 지수, 나머지는 0.

예: 진자의 (T,L,g,m,θ0)(T, L, g, m, \theta_0)에서 rep = [1, 2, 3], target = 0이면 Π=TL−1/2g1/2\Pi = T L^{-1/2} g^{1/2}이므로 [1, -0.5, 0.5, 0, 0]이다.

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

  • 반환한 e가 De=0\mathbf{D}\mathbf{e} = \mathbf{0}을 만족하는지
  • 진자 예와 유체 항력 예(항력 계수, Reynolds 수)에서 알려진 지수가 나오는지
  • 반복 변수도 목표 변수도 아닌 변수의 지수는 0인지

힌트: 반복 변수의 지수 x\mathbf{x}는 D[:, rep] @ x = -D[:, target]의 해다. 본문 셀 3과 같다.

순차적 임계 최소제곱(STLSQ) stlsq

SINDy는 X˙≈Θ Ξ\dot{\mathbf{X}} \approx \boldsymbol{\Theta}\,\boldsymbol{\Xi}에서 희소한 계수 행렬 Ξ\boldsymbol{\Xi}를 찾는다. 함수 stlsq(Theta, dX, thr, iters)를 완성한다.

인자 shape 뜻
Theta (T, p) 후보 함수 사전
dX (T, n) 상태의 시간 미분
thr 실수 임계값 λ\lambda
iters 정수 반복 횟수

알고리즘은 다음과 같다.

  1. 최소제곱 해 Ξ\boldsymbol{\Xi}를 구한다(np.linalg.lstsq).
  2. iters번 반복한다. 절댓값이 thr보다 작은 계수를 0으로 만들고, 각 열 jj마다 0이 아닌 항만으로 최소제곱을 다시 풀어 그 계수를 갱신한다.
  3. (p, n) 배열을 반환한다.

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

  • 잡음 없는 데이터에서 참 계수를 정확히 복원하는지
  • 반환한 0이 아닌 계수의 절댓값이 모두 thr 이상인지
  • 한 열의 모든 계수가 임계값보다 작으면 그 열이 모두 0이 되는지(오류 없이)
  • 남은 항으로 다시 맞추는 단계가 있는지(한 번 자른 뒤 다시 맞추지 않으면 계수가 치우친다)

힌트: 본문 셀 1의 stlsq와 같은 일을 한다. 남은 항이 하나도 없는 열은 건너뛴다.