#!/usr/bin/env python3 """Figure ch06 — usufruit viager sur la maison du cas 1 (DONNÉES SYNTHÉTIQUES, table de mortalité synthétique) : (a) courbes de survie tp_x de la table synthétique pour trois âges ; (b) part de la nue-propriété NP/V selon l'âge de l'usufruitier pour trois taux d'actualisation, comparée à l'approximation par un terme fixe égal à l'espérance de vie. Sortie : assets/figures/ch06/ch06-fig-usufruit.pdf""" import sys, pathlib ROOT = pathlib.Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) import numpy as np, matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR import ch06_demembrements as cas def main(): setup() V = cas.V_ARRONDI fig, (a, b) = plt.subplots(1, 2, figsize=(LARGEUR, 3.1), gridspec_kw={"width_ratios": [1, 1.15]}) for i, x in enumerate((55, 65, 75)): t = np.arange(0, cas.OMEGA - x + 1) a.plot(x + t, [cas.survie(x, k) for k in t], color=palette.cat[i], label=f"usufruitier de {x} ans") a.set_xlabel("Âge atteint (années)"); a.set_ylabel("Probabilité de survie $_t p_x$"); a.set_ylim(0, 1.02); a.set_xlim(55, 110) a.legend(loc="lower left"); a.set_title("(a) Table de mortalité synthétique", loc="left") ages = np.arange(50, 91) for i, r in enumerate((0.04, 0.05, 0.06)): b.plot(ages, [cas.usufruit_viager(V, int(x), r)["part_NP"] for x in ages], color=palette.cat[i], label=f"viager, $r$ = {r*100:.0f} %") approx = [cas.approximation_terme_espere(V, int(x), 0.05)["part_NP"] for x in ages] b.plot(ages, approx, color=palette.ink2, ls="--", lw=1.2, label="terme fixe = durée espérée, $r$ = 5 %") b.set_xlabel("Âge de l'usufruitier à la date d'évaluation"); b.set_ylabel("Nue-propriété / pleine propriété") b.set_ylim(0.2, 1.0); b.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, p: f"{y*100:.0f} %")) b.legend(loc="upper left", fontsize=7.5); b.set_title("(b) Part de la nue-propriété ($g$ = 1,5 %)", loc="left") fig.tight_layout(w_pad=2.0) out = savefig(fig, "ch06/ch06-fig-usufruit.pdf"); print("OK", out) if __name__ == "__main__": main()