융합과학마스터 도움 SIR 전염병 시뮬레이터 프로그램 Fusion Science Master Helper: Epidemic Simulator

🧬 융합과학 마스터 도움 | SIR 전염병 시뮬레이터
🧬

융합과학 마스터 도움
SIR 전염병 시뮬레이터

수학 × 생물학 × 컴퓨터과학의 융합! 미분방정식으로 감염병 확산을 시뮬레이션해요 ✨

📐 수학/미분방정식 🦠 생물학/전염병학 💻 Python 코딩 📊 데이터 시각화
1
🔬 SIR 모델이란?
Susceptible · Infected · Recovered
🩵
S — 감수자 (Susceptible)
아직 감염되지 않았지만 감염될 수 있는 사람들. 바이러스에 노출되면 감염자(I)로 이동해요.
❤️‍🔥
I — 감염자 (Infected)
현재 감염되어 다른 사람에게 바이러스를 전파할 수 있는 상태. 시간이 지나면 회복자(R)로 이동해요.
💚
R — 회복자 (Recovered)
감염 후 회복하여 면역을 획득한 사람들. 더 이상 감염되지 않아요. (사망자도 포함)
📐 SIR 미분방정식 (핵심 로직!)
dS/dt = · S · I / N
dI/dt = · S · I / N · I
dR/dt = · I
β(베타) = 감염률  |  γ(감마) = 회복률  |  N = 전체 인구 = S + I + R
기초감염재생산수 R₀ = β / γ = 2.50 R₀ > 1이면 유행, R₀ < 1이면 소멸! ⚠️
2
⚙️ 파라미터 설정
슬라이더로 조절하고 시뮬레이션을 실행하세요!
⚡ 빠른 시나리오 선택
😷코로나19
β=0.3, γ=0.07
🤧계절 독감
β=0.5, γ=0.3
🔴홍역
β=0.9, γ=0.07
⚠️에볼라
β=0.2, γ=0.1
🫂 초기 인구(N) 10,000
🦠 초기 감염자(I₀) 10
📈 감염률(β) 하루 평균 감염 접촉 확률 0.30
📉 회복률(γ) 하루 회복 확률 (1/γ = 감염 기간) 0.12
📅 시뮬레이션 기간 160일
💉 백신 접종률 0%
3
📊 시뮬레이션 결과 그래프
▶ 실행 버튼을 눌러 그래프를 생성하세요
🩵 최종 감수자
-
❤️ 최고 감염자
-
💚 최종 회복자
-
📅 피크 도달일
-
4
🐍 Python 코드 구현
고교생이 직접 코딩할 수 있는 완전한 소스코드
# ✨ SIR 전염병 시뮬레이션 - 융합과학 마스터 도움 # 필요 라이브러리: pip install numpy matplotlib scipy import numpy as np import matplotlib.pyplot as plt from matplotlib.widgets import Slider, Button from scipy.integrate import odeint # ── 1단계: SIR 미분방정식 함수 정의 ── def sir_model(y, t, N, beta, gamma): S, I, R = y # 현재 상태 언패킹 dSdt = -beta * S * I / N # 감수자 감소 dIdt = beta * S * I / N - gamma * I # 감염자 변화 dRdt = gamma * I # 회복자 증가 return dSdt, dIdt, dRdt # ── 2단계: 초기 파라미터 설정 ── N = 10000 # 전체 인구 I0 = 10 # 초기 감염자 S0 = N - I0 # 초기 감수자 R0_init = 0 # 초기 회복자 beta = 0.30 # 감염률 gamma = 0.12 # 회복률 t = np.linspace(0, 160, 160) # 시간 배열 # ── 3단계: ODE 수치 적분 (Runge-Kutta) ── y0 = S0, I0, R0_init solution = odeint(sir_model, y0, t, args=(N, beta, gamma)) S, I, R = solution.T # 결과 분리 # ── 4단계: 결과 분석 ── R0_num = beta / gamma peak_day = t[np.argmax(I)] max_infected = np.max(I) print(f"기초감염재생산수 R0: {R0_num:.2f}") print(f"감염 피크: {peak_day:.0f}일 ({max_infected/N*100:.1f}%)") # ── 5단계: 그래프 시각화 ── fig, ax = plt.subplots(figsize=(10, 6)) plt.subplots_adjust(bottom=0.35) l1, = ax.plot(t, S, '#4090e0', lw=2.5, label='S 감수자') l2, = ax.plot(t, I, '#e04060', lw=2.5, label='I 감염자') l3, = ax.plot(t, R, '#40b070', lw=2.5, label='R 회복자') ax.set_xlabel('시간 (일)'); ax.set_ylabel('인구수') ax.set_title(f'SIR 전염병 시뮬레이션 (R₀={R0_num:.2f})') ax.legend(); ax.grid(alpha=0.3) # ── 6단계: 인터랙티브 슬라이더 ── ax_beta = plt.axes([0.2, 0.2, 0.6, 0.03]) ax_gamma = plt.axes([0.2, 0.13, 0.6, 0.03]) s_beta = Slider(ax_beta, 'β 감염률', 0.01, 1.0, valinit=beta) s_gamma = Slider(ax_gamma, 'γ 회복률', 0.01, 0.8, valinit=gamma) def update(val): b = s_beta.val; g = s_gamma.val sol = odeint(sir_model, y0, t, args=(N, b, g)) s, i, r = sol.T l1.set_ydata(s); l2.set_ydata(i); l3.set_ydata(r) ax.set_title(f'SIR 시뮬레이션 (R₀={b/g:.2f})') fig.canvas.draw_idle() s_beta.on_changed(update) s_gamma.on_changed(update) plt.show()
💡 구현 순서 (1주 완성 플랜)
1일차: Python 환경 설정 + NumPy 배열 연습
2일차: SIR 함수 작성 + Euler 방법 반복 루프
3일차: odeint로 업그레이드 + Matplotlib 그래프
4일차: 슬라이더 위젯 추가 (matplotlib.widgets)
5일차: 시나리오 비교 기능 + 발표 자료 완성
5
🚀 탐구 확장 아이디어
더 깊이 파고들고 싶다면!
💉
SEIR 모델로 확장
노출자(E) 그룹 추가. 잠복기 있는 코로나19 등에 적용!
🗺️
공간 시뮬레이션
지역별 네트워크 그래프로 확산 경로 시각화. NetworkX 활용!
📊
실제 데이터 피팅
공공데이터 포털 코로나19 데이터와 모델 비교. scipy.optimize!
🧮
몬테카를로 시뮬레이션
확률론적 SIR 모델. 랜덤 요소 추가로 불확실성 표현!

이 블로그의 인기 게시물

안보면 손해 우주발사체 로켓 실험 시뮬레이션 프로그램 Recyclable Reusable Rocket Return Simulation Program" (R3S Program)