Simulizer

Verifying results

Simulizer는 결과를 표현하는 일을 쉽게 해 주는 도구입니다. 하지만 결과의 정확성수치 안정성은 사용자의 책임입니다. Simulizer가 이런 점을 자동으로 검사하지 않는 이유와, 사용자가 직접 검증하는 방법을 정리합니다.

What isn't auto-checked

  • 수치 안정성 조건 — 확산 방정식의 D · dt / dx² ≤ 0.5 같은 조건. CFL 조건. Courant 수. 모델마다 다르고, 만족하지 않으면 결과가 발산하지만 Simulizer는 이를 사전에 막지 않습니다.
  • 물리적 보존량 — 에너지·운동량·질량이 시뮬 도중에 보존되는지. 명시적 오일러 같은 단순 적분법은 보통 이런 양을 보존하지 못합니다.
  • 해의 존재·유일성 — 선형 방정식에 해가 있는지, 행렬이 특이한지. 결과는 나오더라도 의미가 없을 수 있습니다.
  • 모델 자체의 타당성 — 모델이 모사하려는 현실의 현상에 잘 들어맞는지. 이를테면 공기 저항을 뺀 포물선 모델로 야구공 궤적을 예측하면 실제와 어긋납니다.

Why no auto-check

기술적으로 가능한 검사도 있지만, 그것을 일반화하기는 어렵습니다. 같은 코드라도 한 모델에서는 멀쩡하고 다른 모델에서는 망가지기 때문입니다. 이런 상황에서 자동 검사를 넣으면 거짓 안심을 주거나 맞는 시뮬을 막는 오작동을 일으키기 쉬운데, 둘 다 아무 말도 하지 않는 것보다 나쁩니다.

How to verify yourself

1. Compare with known solutions

해석해가 있는 문제로 먼저 모델을 검증해 보세요.

  • 단진자 → 작은 진폭에서는 θ(t) = θ₀ cos(√(g/L) t).
  • 1D 확산 → 가우시안 초깃값은 시간이 갈수록 더 넓은 가우시안이 됩니다.
  • 임의보행 → n 단계 후 분산이 n 에 비례해야 합니다.

수치 결과가 해석해와 수치 오차 이내로 일치한다면, 모델 자체는 맞다고 간주해도 좋습니다.

2. Refine grid and time step

dtdx 를 절반으로 줄여 같은 시뮬을 다시 돌려 보세요. 결과가 거의 같으면 수치 오차가 충분히 작다는 뜻이고, 많이 다르면 더 줄여야 합니다.

3. Monitor conserved quantities

에너지·질량 같은 보존량을 매 시간 단계마다 계산해 로그로 남기세요. 시간이 흘러도 일정해야 할 양이 변한다면 적분법에 문제가 있는 것입니다.

4. Compare with public implementations

같은 미분방정식을 푸는 공개된 다른 구현(예: 교과서의 라플라스 시뮬, NumPy 예제)이 있다면, 같은 입력을 넣어 결과를 비교해 보세요. 차이가 수치 오차 정도에 그친다면 안전하다고 볼 수 있습니다.

Known stability conditions

자주 만나는 모델의 안정성 조건은 다음과 같습니다.

모델조건
1D 확산 (명시적 오일러)D · dt / dx² ≤ 0.5
2D 확산D · dt / dx² + D · dt / dy² ≤ 0.5
1D 파동 (Courant)c · dt / dx ≤ 1
명시적 오일러 일반`

더 자세한 조건이 필요하면 Computational Science 계열 교재를 참고하세요.

See also