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
dt 와 dx 를 절반으로 줄여 같은 시뮬을 다시 돌려 보세요. 결과가
거의 같으면 수치 오차가 충분히 작다는 뜻이고, 많이 다르면 더
줄여야 합니다.
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
- AI가 만든 결과 검증 — AI 어시스턴트로 만들기
- 결과 확인 패널들 — 결과 패널 종류