American Option Pricing with PSOR on the FD Grid

Hard  finite-difference-methods · Module 3 · ~35 min
Cell 1 — Shared utilities: BS analytic, Thomas algorithm, PSOR solver
Foundation cell: Black-Scholes put/call for benchmarking, the Thomas algorithm from Module 2, and the PSOR solver for American puts. The PSOR solver accepts a relaxation parameter omega and a convergence tolerance tol, and returns the price, the final grid, the node array, and the total iteration count across all time steps.
Run cell to see output.
Not run
Cell 2 — Early exercise premium: American vs European put over a spot ladder
Price both the American and European put across S ∈ {70, 80, 90, 100, 110}. Compute the early exercise premium at each spot. The premium should be largest for deep ITM puts (where exercising to earn interest on K is most attractive) and zero for deep OTM puts.
Expected: Premium is ~0 at S=110 (OTM, worthless to exercise), positive and growing as S decreases. At S=70 the put is deep ITM and the premium is significant.
Run cell to see output.
Not run
Cell 3 — Early exercise boundary: S*(τ) from τ=0 to τ=T
Extract and plot the early exercise boundary $S^*(\tau)$ from the PSOR solver. The boundary should: start near $K = 100$ at $\tau = 0$, decrease monotonically as $\tau$ increases (longer time means more time value → higher threshold for exercise), and approach a limiting value $S^*(\infty) < K$ at long maturities.
Expected: S*(0) ≈ K = 100, then decreasing. Near τ = 0, the boundary approaches K with square-root speed (steep slope). At T=1, S*(T) is typically around 75–85 for these parameters.
Run cell to see output.
Not run
Cell 4 — PSOR convergence: iteration count vs relaxation parameter ω
Sweep $\omega \in \{1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9\}$ and record the total PSOR iteration count across all time steps. The optimal $\omega$ minimises the iteration count. $\omega = 1$ (Gauss-Seidel) should require the most iterations; $\omega \in [1.4, 1.7]$ should be near-optimal for typical grids.
Expected: Iteration count is convex in ω, minimised somewhere in [1.4, 1.7]. ω=1 (Gauss-Seidel) requires roughly 1.5–3× more iterations than the near-optimal ω.
Run cell to see output.
Not run
Cell 5 — American call on non-dividend stock: PSOR returns European price
Implement a PSOR pricer for an American call (payoff $h = (S-K)^+$). Verify Merton's theorem: the PSOR projection never binds (the call LCP solution equals the unconstrained European solution), so the American call price equals the European call price exactly.
Run cell to see output.
Not run
Cell 6 — Validation summary
Aggregate all checks from this notebook into a final pass/fail report. Run all preceding cells first.
Run cell to see output.
Not run