4.8.20 · Maths › Numerical Methods
Intuition The big picture (WHY iterate at all?)
A x = b ko directly solve karna (Gaussian elimination) lagbhag 3 2 n 3 operations leta hai — large sparse systems ke liye ye bahut costly hai (jaise n = 1 0 6 kisi PDE grid se).
Iterative methods ek guess x ( 0 ) se shuru karte hain aur usse baar baar refine karte hain: har step sasta hai (bas ek matrix–vector product), aur acchi matrices ke liye guess sahi answer ki taraf badhta rehta hai. Hum ek hi baar mein exactness ko chhodte hain aur uske badle saste approximate steps lete hain jo converge karte hain .
Intuition WHAT we're really doing
Har classical iteration ek matrix splitting hai. Likho A = M − N jahan M ko invert karna aasaan ho . Tab
A x = b ⟺ ( M − N ) x = b ⟺ M x = N x + b .
Is fixed-point equation ko ek iteration mein badlo — "new" left par aur "old" right par:
M x ( k + 1 ) = N x ( k ) + b .
Definition Iteration matrix
Naye iterate ke liye solve karo: x ( k + 1 ) = =: T M − 1 N x ( k ) + M − 1 b .
T === M − 1 N == iteration matrix kehlata hai. Convergence sirf isi par depend karti hai.
Error recurrence ki derivation (scratch se). Maano x ∗ sahi solution hai, toh M x ∗ = N x ∗ + b . Ise M x ( k + 1 ) = N x ( k ) + b se subtract karo:
M ( x ( k + 1 ) − x ∗ ) = N ( x ( k ) − x ∗ ) .
Error define karo e ( k ) = x ( k ) − x ∗ . Tab
e ( k + 1 ) = M − 1 N e ( k ) = T e ( k ) ⇒ e ( k ) = T k e ( 0 ) .
Toh error har step par T se multiply hoti hai. Ye kyun important hai: convergence (e ( k ) → 0 ) kisi bhi starting guess ke liye tab hogi jab T k → 0 .
Choose karo M = D , N = L + U . Tab M x ( k + 1 ) = N x ( k ) + b component-wise deta hai:
x i ( k + 1 ) = a ii 1 ( b i − ∑ j = i a ij x j ( k ) ) .
Intuition HOW Jacobi thinks
"Equation i ko x i ke liye solve karo, yeh maanke ki baaki saari variables abhi bhi apni purani values par hain. " Har component poore purane vector ka use karta hai — isliye saare x i ( k + 1 ) parallel mein compute kiye ja sakte hain. Iteration matrix T J === D − 1 ( L + U ) == .
Choose karo M = D − L (lower triangular, forward-solve karna aasaan), N = U :
x i ( k + 1 ) = a ii 1 ( b i − ∑ j < i a ij x j ( k + 1 ) − ∑ j > i a ij x j ( k ) ) .
Intuition HOW Gauss-Seidel improves on Jacobi
Sirf ek change hai: naye compute kiye components ko turant use karo . Jab tak tum x i tak pahuncho, tab tak x 1 , … , x i − 1 is hi sweep mein update ho chuke hote hain — toh unhe use karo! Ye usually iterations ko aadha kar deta hai lekin parallelism khatam ho jaati hai (ye sequential hai). Iteration matrix T GS === ( D − L ) − 1 U == .
Definition Spectral radius
ρ ( T ) = max i ∣ λ i ∣ , T ki sabse badi absolute eigenvalue .
WHY ρ < 1 ? T = P Λ P − 1 diagonalize karo (eigenvalues λ i ). Tab T k = P Λ k P − 1 aur Λ k = diag ( λ i k ) . Jab k → ∞ , λ i k → 0 saare i ke liye tab hoga jab har ∣ λ i ∣ < 1 , yaani ρ ( T ) < 1 . Kyunki e ( k ) = T k e ( 0 ) , error bilkul isi condition mein khatam hoti hai.
sufficient aasaan check: diagonal dominance
Eigenvalues nikalna mushkil hai. Ek practical sufficient (necessary nahi) condition: agar A strictly diagonally dominant (SDD) ho,
∣ a ii ∣ > ∑ j = i ∣ a ij ∣ for every row i ,
tab Jacobi aur Gauss-Seidel dono converge karte hain kisi bhi start se. WHY ye sahi lagta hai: har x i mainly apni hi equation se "control" hota hai, isliye usse update karne se doosron mein bahut zyada disturbance nahi aata.
Worked example Worked example 1 — haath se
2 × 2 system solve karo
{ 4 x + y = 6 x + 3 y = 7 , exact: x = 11 11 = 1 , y = 2.
Yahan a 11 = 4 > 1 , a 22 = 3 > 1 : SDD ✓, toh dono converge karte hain. Start karo x ( 0 ) = ( 0 , 0 ) se.
Jacobi x = 4 6 − y , y = 3 7 − x (hamesha purani values):
k = 1 : x = 4 6 − 0 = 1.5 , y = 3 7 − 0 = 2.333 . Kyun? dono purane ( 0 , 0 ) use karte hain.
k = 2 : x = 4 6 − 2.333 = 0.917 , y = 3 7 − 1.5 = 1.833 . Kyun? k = 1 ki values use karo.
k = 3 : x = 4 6 − 1.833 = 1.042 , y = 3 7 − 0.917 = 2.028 . ( 1 , 2 ) ke paas aa rahe hain.
Gauss-Seidel (naya x andar y mein use karo):
k = 1 : x = 4 6 − 0 = 1.5 ; phir y = 3 7 − 1.5 = 1.833 . Ye step kyun? y abhi-compute kiya hua x = 1.5 use karta hai, 0 nahi.
k = 2 : x = 4 6 − 1.833 = 1.042 ; y = 3 7 − 1.042 = 1.986 .
k = 3 : x = 4 6 − 1.986 = 1.004 ; y = 3 7 − 1.004 = 1.999 . Faster — ( 1 , 2 ) tak pahunchne mein kam steps.
Worked example Worked example 2 — eigenvalue se convergence test
A = ( 2 − 1 − 1 2 ) ke liye: D = 2 I , L + U = ( 0 1 1 0 ) .
T J = D − 1 ( L + U ) = 2 1 ( 0 1 1 0 ) . ( 0 1 1 0 ) ke eigenvalues ± 1 hain, toh λ ( T J ) = ± 2 1 .
ρ ( T J ) = 2 1 < 1 ⇒ converges; error lagbhag har sweep mein aadhi ho jaati hai. Ye kyun important hai: iterate kiye bina hi humne speed predict kar li.
Worked example Worked example 3 — Forecast-then-Verify (kya ye diverge karega?)
A = ( 1 3 2 1 ) . Row 1: ∣1∣ < ∣2∣ — diagonally dominant nahi . Forecast: likely diverge karega.
T J = D − 1 ( L + U ) = ( 0 − 3 − 2 0 ) (kyunki a 11 = a 22 = 1 ). Char. eqn λ 2 − 6 = 0 ⇒ λ = ± 6 ≈ ± 2.449 . ρ = 2.449 > 1 ⇒ diverges . ✓ forecast sahi nikla. Fix: rows swap karo ( 3 1 1 2 ) (ab SDD hai) — converge karega.
Common mistake "Diagonal dominance fail ho gayi ⇒ zaroor diverge karega."
Kyun sahi lagta hai: SDD wahi rule hai jo hume convergence ke liye sikhaya jaata hai. Flaw: SDD sufficient hai, necessary nahi . Sach ye hai ki ρ ( T ) < 1 chahiye. Ek non-SDD matrix ka bhi ρ ( T ) < 1 ho sakta hai aur wo converge kar sakti hai. Fix: agar SDD fail ho, conclusion mat nikalo — actually ρ ( T ) check karo.
Common mistake "Gauss-Seidel hamesha Jacobi se better hota hai."
Kyun sahi lagta hai: GS fresh info use karta hai, aur SDD / SPD matrices ke liye ye indeed faster converge karta hai (bahut saare model problems mein ρ ( T GS ) = ρ ( T J ) 2 ). Flaw: kuch aisi matrices exist karti hain jahan Jacobi converge karta hai lekin Gauss-Seidel diverge karta hai, aur ulta bhi. Fix: "usually faster," "hamesha converge karta hai" nahi.
Common mistake Gauss-Seidel ko Jacobi jaisa update karna (purana vector store karna).
Kyun sahi lagta hai: formulas dekhne mein almost identical lagte hain. Flaw: agar tum lower-index terms ke liye purana vector use karte rehte ho, tumne bas Jacobi code kar diya. Fix: GS mein, x i ko in place overwrite karo taaki usi sweep ke baad ke components usse dekh sakein.
a ii = 0 bhool jaana.
Dono methods a ii se divide karte hain. Agar koi diagonal entry 0 hai, pehle rows permute karo (row swap) taaki diagonal par nonzeros aayein.
Tab tak iterate karo jab tak ∥ x ( k + 1 ) − x ( k ) ∥ < ε (ya residual ∥ b − A x ( k ) ∥ < ε ). Har sweep ka cost O ( nnz ) hai (nonzeros ki sankhya) — sparse A ke liye ye O ( n ) ke karib hai, jo O ( n 3 ) elimination se kaafi sasta hai. Yehi 80/20 win hai: saste repeated steps + accha ρ = huge sparse systems ka fast solution.
What is the iteration matrix T for a splitting A = M − N ? T = M − 1 N ; iteration hai x ( k + 1 ) = T x ( k ) + M − 1 b .
Error recurrence of a stationary iteration? e ( k + 1 ) = T e ( k ) , toh e ( k ) = T k e ( 0 ) .
Exact necessary-and-sufficient condition for convergence from any start? Spectral radius ρ ( T ) < 1 .
Splitting M , N for Jacobi? M = D , N = L + U , jisse T J = D − 1 ( L + U ) milta hai.
Splitting M , N for Gauss-Seidel? M = D − L , N = U , jisse T GS = ( D − L ) − 1 U milta hai.
Component formula for Jacobi? x i ( k + 1 ) = a ii 1 ( b i − ∑ j = i a ij x j ( k ) ) .
Component formula for Gauss-Seidel? x i ( k + 1 ) = a ii 1 ( b i − ∑ j < i a ij x j ( k + 1 ) − ∑ j > i a ij x j ( k ) ) .
Key practical difference Jacobi vs Gauss-Seidel? GS usi sweep mein naye update kiye components use karta hai (in-place); Jacobi sirf purana vector use karta hai (parallelisable).
A simple sufficient condition guaranteeing both converge? Strict diagonal dominance: ∣ a ii ∣ > ∑ j = i ∣ a ij ∣ saare i ke liye.
Is diagonal dominance necessary for convergence? Nahi — ye sirf sufficient hai; asli criterion ρ ( T ) < 1 hai.
Asymptotic error reduction factor per step? Approximately ρ ( T ) .
Why iterative over direct methods for large sparse A ? Har sweep ka cost O ( nnz ) ≈ O ( n ) hai, jabki elimination O ( n 3 ) ka hai, aur memory sparse rehti hai.
Recall Feynman: explain it to a 12-year-old
Socho tum ek class mein sabki height guess kar rahe ho, phir ek aisi rule se har guess fix karte ho jo sab ki heights ko ek doosre se jodti hai. Jacobi: sablog apni guess ek saath update karte hain pichhli round ke numbers se. Gauss-Seidel: tum ek ek karke jaate ho, aur har banda apne se pehle walo ke abhi-correct numbers use karta hai — toh corrections zyada jaldi phailti hain. Agar rule guesses ko dheere dheere sach ki taraf "kheenchti" hai (numbers blow up nahi karte — yahi ρ < 1 hai), toh kuch rounds baad sabki guess basically sahi ho jaati hai. Agar rule over-react karti hai (ρ > 1 ), toh guesses explode ho jaate hain aur tum kabhi finish nahi kar paate.
"Jacobi waits, Seidel updates." Aur convergence ke liye: "Spectral radius Sub-one Settles" (ρ < 1 ). Aasaan pehla check: D iagonally D ominant ⇒ D efinitely converges.
Gaussian Elimination — ye wahi direct O ( n 3 ) alternative hai jo ye methods sparse systems ke liye replace karte hain.
Eigenvalues and Eigenvectors — convergence poori tarah ρ ( T ) par depend karti hai.
Spectral Radius — yahan ka master quantity.
Fixed-Point Iteration — ye x = g ( x ) iteration ka matrix version hain.
SOR — Successive Over-Relaxation — Gauss-Seidel ko relaxation factor ω se accelerate karta hai.
Sparse Matrices — isliye per-sweep cost sasti hoti hai.
Finite Difference Methods for PDEs — huge sparse systems ka main source.
direct too costly for large sparse
converges iff T^k to zero
uses all old values, parallel
uses fresh components immediately
Matrix splitting A = M - N
Iteration matrix T = inv M times N