Implementing ODE solvers from scratch — Euler, RK4
5.4.23· Coding › Scientific Computing (Python)
KAUNSA problem solve kar rahe hain?
WHY discretize? Zyaadatar real ka koi closed-form integral nahi hota. Lekin slope hamesha compute ho sakta hai. Toh hum aage chhoti-chhoti seedhi lakeeron mein chalte hain.
Euler's Method — first principles se derive karna
se tak kaise jaate hain? Derivative ki definition use karo:
Limit hatao (ek finite use karo) aur solve karo:
Equivalently Taylor expansion se: Chhhoda hua term hai per step → local truncation error . steps mein errors accumulate hokar global error ban jaata hai. aadha karo → error aadha ho jaata hai. Yeh slow hai.
def euler(f, t0, y0, h, n):
t, y = t0, y0
ts, ys = [t], [y]
for _ in range(n):
y = y + h * f(t, y) # one slope, whole step
t = t + h
ts.append(t); ys.append(y)
return ts, ysRK4 — chaar slopes ka average
Behtar kyun karein? Euler slope sirf interval ke left end par use karta hai, isliye jab curve modta hai toh consistently over/undershoot karta hai. RK4 slope ko start par, middle mein (do baar), aur end mein sample karta hai, phir ek weighted average leta hai — yeh integral ke liye Simpson's rule se analogous hai.
Weights kyun? Sum hai, isliye ek sach mein weighted mean slope hai. RK4 do alag midpoint slopes () use karta hai, jinhe weight diya jaata hai, kyunki midpoint ke upar average behaviour best represent karta hai. Yeh Simpson's rule se analogous hai (jo endpoint–midpoint–endpoint ko weight deta hai): dono interval ke middle par extra weight daalte hain. RK4 Simpson ke ek "" ko do midpoint evaluations mein split karta hai jo milke weight carry karte hain. Taylor series ko tak match karna exactly yahi coefficients force karta hai.
- Local truncation error , global error .
- aadha karo → error girta hai. Isliye RK4 practical computing ka workhorse hai.
def rk4(f, t0, y0, h, n):
t, y = t0, y0
ts, ys = [t], [y]
for _ in range(n):
k1 = f(t, y)
k2 = f(t + h/2, y + h/2 * k1)
k3 = f(t + h/2, y + h/2 * k2)
k4 = f(t + h, y + h * k3)
y = y + (h/6) * (k1 + 2*k2 + 2*k3 + k4)
t = t + h
ts.append(t); ys.append(y)
return ts, ys
Worked Example 1 — , (true: )
lo, ek step, nikalo.
Euler: . Kyun? Ek left-slope step. True value → error . Bahut zyaada!
RK4:
- — kyun? slope = = 1.
- — kyun? use karke half-step se nudge karo.
- — kyun? use karke midpoint refine karo.
- — kyun? use karke end slope nikalo.
- .
Error — same step size ke saath Euler se 70× behtar.
Worked Example 2 — error scaling check (, integrate to )
| Method | error | error | ratio |
|---|---|---|---|
| Euler | (matches ) | ||
| RK4 | (matches ) |
Yeh kyun matter karta hai: aadha karna Euler ko sirf do baar help karta hai lekin RK4 ko sola baar — yehi poori wajah hai ki RK4 practical computing mein dominant kyun hai.
Recall Feynman: ek 12-saal ke bachhe ko samjhao
Socho aap kohrе mein chal rahe ho jahaan ek chhota compass bilkul wahaan batata hai kaunsi taraf step karna hai jahan tum khade ho. Euler bas us ek reading par trust karta hai aur poora step chalta hai — lekin agar raasta modta hai, toh tum bhatak jaate ho. RK4 zyaada samajhdaar hai: tum middle mein jhankate ho, phir dobara jhankate ho, phir door waale end mein jhankate ho, phir step lene se pehle un saari compass readings ka average lete ho. Chaar jhankon ka average tumhe path par almost bilkul sahi rakhhta hai.
Flashcards
Euler aur RK4 kaun sa ODE form solve karte hain?
Forward Euler update likhо.
Euler apna slope kahaan se leta hai?
Euler ki global error order?
RK4 ke chaar stages likhо.
RK4 final update formula?
Weights 1,2,2,1 kyun?
Kya RK4 weights Simpson's se identical hain?
RK4 global error order?
Har RK4 stage kis pichle stage par build karta hai?
Equal accuracy par RK4 Euler se sasta kyun hai?
Connections
- Taylor Series Expansion — dono methods ise truncate karke derive hote hain.
- Simpson's Rule — RK4 weights isse analogous hain.
- Finite Difference Approximation of Derivatives — Euler forward difference hai.
- Numerical Stability and Stiff ODEs — kyun explicit methods blow up kar sakte hain.
- Adaptive Step Size (RK45 / Dormand–Prince) — RK4 ka practical extension.
- scipy.integrate.solve_ivp — jo humne banaya uska library version.