실습 · 연습문제 1개
블록 평균 필터로 subgrid 응력 계산하기 subgrid-stress
고해상도 격자의 값 (길이 )를 연속한 칸씩 묶어 평균하면 거친 격자의 값 (길이 )가 된다. Burgers 방정식의 비선형 항 를 같은 방식으로 걸러 내면 이고, 그 차이
가 거친 격자에서 해상하지 못하는 규모의 효과, 즉 subgrid 응력이다.
함수 filter_and_stress(u, K)를 완성해 (ubar, tau)를 반환한다.
u: shape(Nf,)또는(B, Nf)인 배열(여러 스냅샷을 한 번에 줄 수 있다).Nf는K의 배수다.ubar,tau: shape(Nf // K,)또는(B, Nf // K).
테스트는 다음을 확인한다.
- 블록 안에서 값이 일정하면 이다.
- 블록 안에서 기울기 로 선형인 장에서는 이다(는 고해상도 격자 간격). 블록 안 분산의 절반이다.
- 어떤 입력에서도 이다(실현성, realizability). 블록 평균 필터에서 은 블록 안의 분산이기 때문이다.
- 2차원 입력(스냅샷 여러 개)도 처리한다.
힌트: u.reshape(*u.shape[:-1], -1, K).mean(-1)이 마지막 축을 K칸씩 묶어 평균한다. 반올림 오차로 아주 작은 음수가 나오지 않게 하려면 분산을 직접 계산하는 방식(블록 평균을 뺀 값의 제곱 평균)이 더 안전하다.