1D diffusion
Simulizer는 막대 한쪽 끝의 온도가 시간에 따라 막대 전체로 어떻게 퍼져 나가는지 보여 줍니다. 가장 단순한 편미분방정식(PDE) 예제입니다.
Model
∂u/∂t = D · ∂²u/∂x² — 확산 방정식.
여기서 u(x, t) 는 위치 x, 시간 t 에서의 온도이고, D 는 확산 계수입니다.
Steps
- 새 파일을 만들고 다음을 두세요:
- 격자 점 수
nx = 100 - 시간 단계 수
nt = 500 - 공간 간격
dx = 1.0 / nx - 시간 간격
dt = 0.0001 - 확산 계수
D = 0.5
- 격자 점 수
- 길이
nx인 배열u를 만들고, 처음 10개만1.0, 나머지는0.0으로 초기화하세요. (왼쪽 끝은 뜨겁고 나머지는 차가운 상태입니다.) - 같은 길이의 임시 배열
u_new를 만드세요. t가0부터nt - 1까지 도는 바깥 반복문 안에:- 내부 반복문
i가1부터nx - 2까지:u_new[i] = u[i] + D * dt / (dx*dx) * (u[i+1] - 2*u[i] + u[i-1])
- 경계:
u_new[0] = 1.0(계속 뜨거움),u_new[nx-1] = 0.0(계속 차가움) u_new의 모든 값을u로 복사하세요 —u = u_new.
- 내부 반복문
- 바깥 반복문 뒤에
u를 그래프로 보내기 또는 행렬 표시 패널로 넘기세요.
Pitfalls — important
확산 방정식은 시간 간격과 공간 간격 사이에 안정성 조건이 있습니다:
D · dt / dx² ≤ 0.5
이 조건을 어기면 결과가 빠르게 발산합니다. dt 나 D 를 줄여 조건을
맞추세요. Simulizer는 이 조건을 자동으로 검사해 주지 않습니다.
Variations
- 시간 진행 보기 — 100 시간 단계마다 그 시점의
u사본을 모아 두었다가 여러 곡선으로 한 그래프에 겹쳐 그리세요. 시간이 갈수록 분포가 매끈해지는 모습이 나타납니다. - 양쪽 모두 뜨겁게 — 경계 조건을
u_new[0] = 1.0,u_new[nx-1] = 1.0으로 두면 전체가 균일해집니다. - 단열 경계 — 끝 점에서 변화가 0이 되도록
u_new[0] = u_new[1],u_new[nx-1] = u_new[nx-2]. 열이 갇혀 평균값으로 수렴합니다.
Accuracy
위 코드는 가장 단순한 명시적 유한차분 방법입니다. 안정성 조건만 지키면 정성적으로나 정량적으로나 알려진 해와 잘 맞습니다. 더 큰 시간 단계를 쓰고 싶다면 Crank-Nicolson 같은 암시적 방법을 직접 구현해야 합니다.
다른 모델의 격자 안정성 조건이 궁금하다면 수치 안정성과 검증 페이지를 참고하세요.