# F5-conf-04 — VFI vs closed form, optimal growth with log utility ## Question A planner maximises Σ β^t ln c_t subject to y_{t+1} = (y_t − c_t)^α (full depreciation, productivity 1). We derive the closed-form policy and value function, solve the same problem by value-function iteration (VFI) on the prescribed grid, and compare them at y = 0.5, 1, 2 and (for the value) at y = 1. Parameters from `data/model.csv`: α = 0.36, β = 0.95. ## Data and exclusions `data/model.csv` (10 rows, `n_input_rows`; SHA-256 0981239614…6195b) holds theoretical parameters only. No rows were excluded (`out/exclusions.csv`); all 400 grid points were analysed (`grid_points_used`, `n_analysed`). No deviations from the prescribed design were needed (`data_issues` = []). None of the evaluation points is a grid node, so the VFI policy and value are interpolated (linearly in ln y), as TASK.md allows. Audit details: `out/state/data_audit.md`. ## Method **Closed form (guess-and-verify).** Guess V(y) = A + B ln y. The RHS of the Bellman equation is ln c + β[A + Bα ln(y − c)]. The FOC 1/c = αβB/(y − c) gives c = y/(1 + αβB). Matching coefficients on ln y: B = 1 + αβB ⇒ B = 1/(1 − αβ), so c(y) = (1 − αβ) y and the savings rate is (y − c)/y = αβ. Matching constants: A = [ln(1 − αβ) + (αβ/(1 − αβ)) ln(αβ)] / (1 − β). The verification holds exactly; we also checked numerically that a continuous optimiser applied to the Bellman RHS with this V returns c = (1 − αβ)y and TV = V (`out/state/checks.md`). Assumptions: log utility, Cobb–Douglas technology y' = k^α with 0<α<1, full depreciation, productivity normalised to 1, interior solution (0 < c < y, guaranteed by the Inada property of ln and of k^α), 0<β<1, and the transversality condition (satisfied since V is A + B ln y with finite A, B and log output is stationary). **Contraction.** On the compact grid, with feasible choices and bounded utilities, the Bellman operator T satisfies Blackwell's sufficient conditions: monotonicity (V ≤ W ⇒ TV ≤ TW) and discounting (T(V + a) = TV + βa). Hence T is a contraction in the sup norm with modulus β = 0.95 (`contraction_modulus`). (On the unbounded continuous domain ln c is unbounded; there the result is obtained on the restricted/compact state space or with weighted norms — the discretised problem is bounded, which is what we iterate on.) **VFI.** Grid: 400 points equally spaced in ln y on [0.05, 5]. The choice variable is next-period output y' restricted to the grid; consumption is c = y − y'^{1/α}, and pairs with c ≤ 0 are infeasible (utility −∞). Start V0 = 0; iterate V_{n+1}(y_i) = max_j {ln c_ij + β V_n(y_j)} until sup|V_{n+1} − V_n| < 1e-8. The policy is the argmax at the final V. The closed form is never used inside the VFI. No randomness (`random_seed` = null). Code: `out/analysis.py`. ## Results The baseline (closed form) gives a savings rate αβ = 0.342 (`savings_rate_closed_form`). | y | closed form c | VFI c | |---|---|---| | 0.5 | 0.329 (`c_closed_y05`) | 0.328818 (`c_num_y05`) | | 1.0 | 0.658 (`c_closed_y1`) | 0.658994 (`c_num_y1`) | | 2.0 | 1.316 (`c_closed_y2`) | 1.309625 (`c_num_y2`) | - Maximum absolute policy discrepancy over the three points: 0.00637 at y = 2 (`max_abs_error_policy`), i.e. below 0.5% of consumption at each point. - V(1): closed form −19.52441 (`value_closed_y1`), VFI −19.52476 (`value_num_y1`); gap ≈ 3.4e-4 utils. - VFI converged in 361 iterations (`n_iterations`) with final sup-norm change 1.0e-8 < 1e-8 tolerance (`final_sup_change`); `feasibility` = "complete". - Diagnostic (in `results.json` → `diagnostics`): no grid node chooses a boundary y'; across all 400 nodes the max policy error is 0.025 (at large y, where c ≈ 3.3) and the max value error 4.8e-4. ## Uncertainty The problem is deterministic; there is no sampling uncertainty. Numerical error has two sources: (i) iteration error, bounded by β·tol/(1 − β) = 1.9e-7 utils in V (from `contraction_modulus` and the 1e-8 tolerance); (ii) discretisation/interpolation error: y' is restricted to a grid with ln-step 0.0115, so the required investment y'^{1/α} jumps by ≈ 3.2% per step, which bounds the consumption error to a fraction of a percent of y — consistent with the observed relative errors (−0.06%, +0.15%, −0.48%). The V(1) gap (3.4e-4) far exceeds bound (i), so it is discretisation error. Errors shrink as the grid is refined (smaller ln-step), not by tightening the tolerance. ## Limitations and open issues - Validation scope: a single parameter point (α = 0.36, β = 0.95), one grid (400 log-spaced points on [0.05, 5]), one tolerance, discrete choice over grid nodes with linear-in-ln y interpolation at off-grid points. Other interpolation schemes (e.g. continuous choice with interpolated V) would give different (typically smaller) discrepancies; we did not run grid-refinement studies because the task does not require them. - The policy error is not monotone in y; it reflects where the evaluation point falls relative to grid nodes. - The contraction argument applies to the bounded discretised problem; the continuous log-utility problem is unbounded and needs the standard restricted-domain argument.