{"id":12151,"date":"2026-05-07T10:35:14","date_gmt":"2026-05-07T08:35:14","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=12151"},"modified":"2026-05-07T10:46:58","modified_gmt":"2026-05-07T08:46:58","slug":"fonctions-dutilite","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=12151","title":{"rendered":"Fonctions d&#8217;utilit\u00e9"},"content":{"rendered":"  <link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=CMU+Serif&#038;family=CMU+Sans+Serif&#038;display=swap\" \/>\r\n  <title>Utilit\u00e9 \u2013 Liste d\u00e9roulante JSXGraph<\/title>\r\n  <style>\r\n    \/*body {\r\n      background-color: #f8f8f8;\r\n      color: #074978;\r\n      font-family:  \"CMU Serif\", \"Times New Roman\", serif;\r\n      margin: 20px;\r\n    }*\/\r\n    .jxgbox {\r\n      border: 2px solid #ccc;\r\n      box-shadow: 0 4px 8px rgba(0,0,0,0.1);\r\n\t  border-radius : 8px\r\n    }\r\n    .control-panel {\r\n      padding: 8px;\r\n      background: rgba(255,255,255,0.9);\r\n      border-radius: 4px;\r\n      font-size: 14px;\r\n\t   font-family: \"CMU Serif\", \"Times New Roman\", serif;\r\n    }\r\n\t#bloc_formules {\r\n  \t\ttext-align: left;\r\n\t}\r\n.grp {\r\n  color: #1F6357;\r\n  font-weight: bold;\r\n}\r\n\r\n.coef-inexistant {\r\n  color: #C11B17;\r\n  font-weight: bold;\r\n}\r\n\r\n\/* Tout le select : fond blanc par d\u00e9faut *\/\r\n#uf_select {\r\n  background-color: #ffffff;\r\n}\r\n\r\n\/* Police de la bo\u00eete et des options (Computer Modern \/ CMU Serif) *\/\r\n#uf_select,\r\n#uf_select option,\r\n#uf_select optgroup {\r\n  font-family: \"CMU Serif\", \"Computer Modern\", serif;\r\n}\r\n\r\n\/* Titres de groupe (non s\u00e9lectionnables) : fond gris, texte rouge fonc\u00e9 *\/\r\n#uf_select optgroup {\r\n  background-color: #e0e0e0;\r\n  color: #DC143C;\r\n  font-weight: bold;\r\n  font-family: \"CMU Serif\", \"Computer Modern\", serif;\r\n}\r\n\r\n\/* Options s\u00e9lectionnables : fond blanc *\/\r\n#uf_select option {\r\n  background-color: #ffffff;\r\n  color: #074978;\r\n  font-weight: normal; \/* ou bold si tu veux, mais distinct des optgroup *\/\r\n}\r\n\r\n\/* Tous les textes\/labels JSXGraph, y compris sliders, en Computer Modern *\/\r\ndiv.cmuText {\r\n  font-family: \"CMU Serif\", \"Computer Modern\", serif;\r\n}\r\n\r\n<\/style>\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/jsxgraph\/distrib\/jsxgraphcore.js\"><\/script>\r\n<link rel=\"stylesheet' href='https:\/\/cdn.jsdelivr.net\/npm\/jsxgraph\/distrib\/jsxgraph.css\" \/>\r\n\r\n  <script>\r\n    window.MathJax = {\r\n      tex: {\r\n        inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\r\n        displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ],\r\n        packages: ['base', 'ams']\r\n      }\r\n    };\r\n  <\/script>\r\n  <script type=\"text\/x-mathjax-config\">\r\n  MathJax.Hub.Config({\r\n    TeX: {\r\n      extensions: [\"color.js\"]\r\n    }\r\n  });\r\n<\/script>\r\n\r\n  <script type=\"text\/javascript\" id=\"MathJax-script\"\r\n          src=\"https:\/\/cdn.jsdelivr.net\/npm\/mathjax@3\/es5\/tex-mml-chtml.js\">\r\n  <\/script>\r\n\r\n<center>\r\n  <div id=\"box1\" class=\"jxgbox\" style=\"width:900px; height:300px;\"><\/div>\r\n  <div id=\"box2\" class=\"jxgbox\" style=\"width:900px; height:480px; margin-top:10px;\"><\/div>\r\n<\/center>\r\n<div style=\"position:absolute;top:220px;left:1280px;\" >\r\n\t  <img decoding=\"async\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2026\/05\/qrcode_345672528_d9a8c52993f297d54fd3655acfc126f9.png\" width=\"100px\" \/>\r\n<\/div>\r\n\r\n<script type=\"text\/javascript\">https:\/\/spgoo.org\/?page_id=12151\r\nconsole.log(\"=== D\u00c9BUT CHARGEMENT ===\");\r\n\r\nJXG.Options.text.cssDefaultStyle = '';\r\nJXG.Options.text.highlightCssDefaultStyle = '';\r\nJXG.Options.text.cssClass = 'cmuText';\r\nJXG.Options.text.useMathJax = true;\r\n\r\nvar board = JXG.JSXGraph.initBoard(\"box1\", {\r\n  pan: { enabled: false },\r\n  boundingbox: [-1.2, 4.5, 11, -1.2],\r\n  axis: false,\r\n  grid: false,\r\n  showNavigation: false,\r\n  showCopyright: false\r\n});\r\n\r\nsetTimeout(() => {\r\n    const in0 = document.getElementById(\"in0\");\r\n    const in1 = document.getElementById(\"in1\");\r\n\r\n    in0.addEventListener(\"input\", () => {\r\n        in1.value = Number(in0.value) + 1;\r\n    });\r\n}, 50);\r\n\r\nconsole.log(\"Boards cr\u00e9\u00e9s\");\r\n\r\nsetTimeout(() => {\r\n  const el = input1.rendNodeInput;\r\n\r\n  if (!el) return;\r\n\r\n  \/\/ \ud83d\udd25 1. bloquer la largeur d\u00e9finitivement\r\n  Object.defineProperty(el.style, \"width\", {\r\n    set: function() { return \"30px\"; }\r\n  });\r\n\r\n  el.style.width = \"30px\";\r\n  el.style.minWidth = \"30px\";\r\n  el.style.maxWidth = \"30px\";\r\n\r\n  \/\/ \ud83d\udd25 2. emp\u00eacher JSXGraph de recalculer\r\n  input1.update = function () {};   \/\/ \u2190 kill update interne\r\n\r\n}, 100);\r\n\r\nsetTimeout(function init() {\r\n  console.log(\"Tentative init...\");\r\n  if (!board) return setTimeout(init, 500);\r\n  \r\n  let sel = document.getElementById(\"uf_select\");\r\n  if (!sel) { \/* ... *\/ }\r\n\r\n  sel.addEventListener(\"change\", function() {\r\n    const parts = this.value.split('_');\r\n    currentGroup = parseInt(parts[0], 10);\r\n    currentFunctionIndex = parseInt(parts[1], 10);\r\n    const f = getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex);\r\n    if (f) {\r\n      updateFormulesFromFunction(f);\r\n      updateSlidersFromFunction(f);\r\n      updateContraintesFromFunction(f);\r\n      updateCurveFromFunction(f);\r\n    }\r\n  });\r\n \r\n  \/\/ Init premi\u00e8re fonction\r\n  let f0 = U_f0[0] || U_f1[0] || U_f2[0];\r\n  if (f0) {\r\n    sel.value = \"0,0\";\r\n    currentGroup = 0;\r\n    currentFunctionIndex = 0;\r\n    updateFormulesFromFunction(f0);\r\n    updateSlidersFromFunction(f0);\r\n    updateContraintesFromFunction(f0);\r\n    updateCurveFromFunction(f0);\r\n    console.log(\"Initialisation r\u00e9ussie !\");\r\n  }\r\n}, 1500);\r\n\r\nvar board1 = JXG.JSXGraph.initBoard(\"box2\", {\r\n  boundingbox: [-1, 1.5, 7, -0.5],\r\n  axis: true,\r\n  grid: true,\r\n  showNavigation: true,\r\n  showCopyright: false\r\n});\r\n\r\nboard.renderer.container.style.backgroundColor = '#f8f8f8';\r\nboard1.renderer.container.style.backgroundColor = '#f8f8f8';\r\n\r\ndocument.getElementById(\"box2\").style.display = \"block\";\r\n\r\nconsole.log(\"Boards cr\u00e9\u00e9s\");\r\n\r\n\/\/ --- FONCTIONS GLOBALEMENT DISPONIBLES ---\r\nfunction applyCheckboxState() {\r\n    var mapping = {\r\n    'A_f_div': checkbox1,\r\n    'R_f_div': checkbox2,\r\n    'P_f_div': checkbox3,\r\n    'T_f_div': checkbox4\r\n};\r\n    for (var id in mapping) {\r\n        var el = document.getElementById(id);\r\n        if (el) {\r\n            el.style.display = mapping[id].Value() ? 'block' : 'none';\r\n        }\r\n    }\r\n}\r\n\r\n\/\/ ... et ensuite tout le reste de ton code ...\r\n\r\n\r\n\r\n\/\/ Checkbox pour afficher board2\r\nvar checkbox = board.create('checkbox', [-1, -0.95, '$\\\\,\\\\,\\\\text{U(x)}$'], {\r\n  fixed: true,color:'#074978',layer:0\r\n});\r\nvar checkbox1 = board.create('checkbox', [0, -0.95, '$\\\\,\\\\,A(x)$'], {\r\n  fixed: true,color:\"#A42A04\"\r\n});\r\nvar checkbox2 = board.create('checkbox', [1, -0.95, '$\\\\,\\\\,R(x)$'], {\r\n  fixed: true,color:\"#00a877 \"\r\n});\r\nvar checkbox3 = board.create('checkbox', [8, -0.95, '$\\\\,\\\\,P(x)$'], {\r\n  fixed: true,color:\"#ffc40c\"\r\n});\r\nvar checkbox4 = board.create('checkbox', [9, -0.95, '$\\\\,\\\\,T(x)$'], {\r\n  fixed: true,color:\"#ff8f00\"\r\n});\r\n\r\n\r\n\/\/ Gestionnaires pour les checkboxes des coefficients\r\nJXG.addEvent(checkbox1.rendNodeCheckbox, 'change', function() {\r\n    updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\r\n}, checkbox1);\r\n\r\nJXG.addEvent(checkbox2.rendNodeCheckbox, 'change', function() {\r\n    updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\r\n}, checkbox2);\r\n\r\nJXG.addEvent(checkbox3.rendNodeCheckbox, 'change', function() {\r\n    updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\r\n}, checkbox3);\r\n\r\nJXG.addEvent(checkbox4.rendNodeCheckbox, 'change', function() {\r\n    updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\r\n}, checkbox4);\r\n\r\n\r\n\/\/ --- Donn\u00e9es des fonctions ---\r\nconst U_f0 = [\r\n{\r\n  Nom: \"$\\\\text{Risque Neutre}$\",\r\n  formule: \"$U(x) = x$\",\r\n\r\n  dom_def_inf: 0,\r\n  dom_def_sup: 5,\r\n\r\n  \/\/ Pas de param\u00e8tres\r\n  param: [],\r\n  param_l: [],\r\n  dom_param: [],\r\n\r\n  \/\/ Aucune contrainte\r\n  cont: [],\r\n\r\n  \"U_f(x)\": \"return x;\",\r\n\r\n  \/\/ Coefficients : neutralit\u00e9 au risque\r\n  AA_L: \"$A(x) = 0$\",\r\n  AR_L: \"$R(x) = 0$\",\r\n  P_L: \"$\\\\text{ coefficient inexistant}$\",\r\n  T_L: \"$\\\\text{ coefficient inexistant}$\",\r\n  A_f: \"return 0;\",\r\n  R_f: \"return 0;\",\r\n  P_f: \"return undefined;\",\r\n  T_f: \"return undefined;\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Logarithmique}$\",\r\n  formule: \"$U(x) = \\\\ln(x)$\",\r\n  dom_def_inf: 0.1,\r\n  dom_def_sup: 5,\r\n  \/\/ Pas de param\u00e8tres\r\n  param: [],\r\n  param_l: [],\r\n  dom_param: [],\r\n  \/\/ Aucune contrainte (pas de param\u00e8tres)\r\n  cont: [],\r\n  \"U_f(x)\": \"return Math.log(x);\",\r\n  \/\/ Coefficients\r\n  AA_L: \"$\\\\dfrac{1}{x}$\",\r\n  AR_L: \"$1$\",\r\n  P_L: \"$\\\\dfrac{2}{x}$\",\r\n  T_L: \"$\\\\dfrac{3}{x}$\",\r\n  A_f: \"return 1\/x;\",\r\n  R_f: \"return 1;\",\r\n  P_f: \"return 2\/x;\",\r\n  T_f: \"return 3\/x;\"\r\n}\r\n];\r\nconst U_f1 = [\r\n  {\r\n    Nom: \"CARA\",\r\n    formule: \"$U(x) = 1 - e^{-a x}$\",\r\n    dom_def_inf: 0,\r\n    dom_def_sup: 6,\r\n    param: [\"a\"],\r\n\tparam_l: [\"a\"],\r\n    dom_param: [[0.1, 3.0]], \/\/ bornes pour a\r\n    cont: [\"a > 0\"],\r\n    \"U_f(x)\": \"return 1 - Math.exp(-a * x);\",\r\n    AA_L: \"$a$\",\r\n    AR_L: \"$a x$\",\r\n    P_L: \"$a$\",\r\n    T_L: \"$\\\\frac{1}{a}$\",\r\n\tA_f: \"return a;\",\r\n    R_f: \"return a * x;\",\r\n    P_f: \"return a;\",\r\n   T_f: \"return 1 \/ a;\",\r\n\r\n  },\r\n  {\r\n    Nom: \"$\\\\text{CRRA}$\", \r\n    formule: \"$U(x) = \\\\frac{x^{1-\\\\gamma}}{1-\\\\gamma}$\",\r\n    dom_def_inf: 0.1,\r\n    dom_def_sup: 5,\r\n    param: [\"gamma\"],\r\n    param_l:[\"\\\\gamma\"],\r\n    dom_param: [[0.1, 5.0]],\r\n    cont: [\"gamma > 0\"],\r\n    cont_L: [\"\\\\gamma > 0\"],\r\n    \"U_f(x)\": \"return (Math.pow(x, 1-gamma)) \/ (1-gamma);\",\r\n    AA_L: \"$\\\\frac{\\\\gamma}{x}$\",\r\n    AR_L: \"$\\\\gamma$\",\r\n    P_L: \"$\\\\frac{1 + \\\\gamma}{x}$\",\r\n    T_L: \"$\\\\frac{x}{1 + \\\\gamma}$\",\r\n    A_f: \"return gamma \/ x;\",\r\n    R_f: \"return gamma;\",\r\n    P_f: \"return (1 + gamma) \/ x;\",\r\n    T_f: \"return x \/ (1 + gamma);\"\r\n},\r\n  {\r\n  Nom: \"$\\\\text{Quadratique}$\",\r\n  \/\/ U(x) = x - (b\/2)x^2\r\n  formule: \"$U(x) = x - \\\\dfrac{b}{2}x^2$\",\r\n  \/\/ Domaine : pour que U'(x) = 1 - bx > 0, il faut x < 1\/b.\r\n  \/\/ On prend par exemple x \u2208 [0, 1\/b[ avec une borne sup num\u00e9rique.\r\n  dom_def_inf: 0,\r\n  dom_def_sup: 5,          \/\/ \u00e0 ajuster en fonction des bornes de b et de ton usage\r\n  \/\/ Param\u00e8tre : b > 0\r\n  param: [\"b\"],\r\n  param_l: [\"b\"],\r\n  \/\/ Domaine du param\u00e8tre : b \u2208 (0, +\u221e). Num\u00e9riquement on borne, ex : [0.01, 2]\r\n  dom_param: [[0.01, 2.0]],\r\n  \/\/ Contraintes JS pour l'\u00e9val (prudence : U'(x) > 0 sur le domaine choisi \u2192 1 - b*x > 0)\r\n  \/\/ Ici on ne peut pas tout encoder, on garde la contrainte simple b > 0.\r\n  cont: [\"b > 0\"],\r\n  \/\/ Version LaTeX pour affichage\r\n  cont_L: [\"b > 0\"],\r\n  \/\/ Fonction d'utilit\u00e9 en JS\r\n  \"U_f(x)\": \"return x - 0.5 * b * x * x;\",\r\n  \/\/ Coefficient d'aversion absolue au risque : A(x) = b\/(1 - bx)\r\n  AA_L: \"$\\\\dfrac{b}{1 - b x}$\",\r\n  \/\/ (si tu veux le code JS, tu peux ajouter \"AA(x)\" analogue \u00e0 U_f(x))\r\n  \/\/ Coefficient d'aversion relative au risque : R(x) = bx\/(1 - bx)\r\n  AR_L: \"$\\\\dfrac{b x}{1 - b x}$\",\r\n  \/\/ Prudence : P(x) = 0\r\n  P_L: \"$0$\",\r\n  \/\/ Temp\u00e9rance : n'existe pas (U'''=0), on le signale\r\n T_L: \"$\\\\text{Coefficient inexistant}$\",\r\n A_f: \"return b \/ (1 - b * x);\",\r\n R_f: \"return (b * x) \/ (1 - b * x);\",\r\n P_f: \"return 0;\",\r\n T_f: \"return undefined;\"\r\n}\r\n];\r\n\r\nU_f2 =[\r\n\t{\r\n    Nom: \"$\\\\text{Expo-Power (Saha 1993)}$\",\r\n    formule: \"$U(x) = - e^{\\\\alpha x^{1-\\\\gamma}}$\",\r\n   dom_def_inf: 0.1,\r\n   dom_def_sup: 5,\r\n   param: [\"alpha\", \"gamma\"],\r\n   param_l: [\"\\\\alpha\", \"\\\\gamma\"],\r\n  dom_param: [\r\n     [0.01, 3.0],   \/\/ alpha > 0\r\n     [-5.0, 5.0]    \/\/ gamma \u2208 \u211d\r\n  ],\r\n  cont: [\"alpha > 0\"],\r\n  cont_L: [\"\\\\alpha > 0\"],\r\n  \"U_f(x)\": \"return -Math.exp(alpha * Math.pow(x, 1-gamma));\",\r\n  AA_L: \"$\\\\alpha(1-\\\\gamma)x^{1-\\\\gamma} - \\\\dfrac{\\\\gamma}{x}$\",\r\n  AR_L: \"$\\\\alpha(1-\\\\gamma)x^{2-\\\\gamma} - \\\\gamma$\",\r\n  P_L: \"$\\\\alpha(1-\\\\gamma)x^{1-\\\\gamma} - \\\\dfrac{\\\\gamma - 1}{x}$\",\r\n  T_L: \"$\\\\dfrac{A(x) + 2\/x}{A(x) + 1\/x}$\",\r\n  A_f: \"return alpha * (1 - gamma) * Math.pow(x, 1 - gamma) - gamma \/ x;\",\r\n  R_f: \"return alpha * (1 - gamma) * Math.pow(x, 2 - gamma) - gamma;\",\r\n  P_f: \"return alpha * (1 - gamma) * Math.pow(x, 1 - gamma) - (gamma - 1) \/ x;\",\r\n  T_f: \"const A = alpha * (1 - gamma) * Math.pow(x, 1 - gamma) - gamma \/ x; return (A + 2\/x) \/ (A + 1\/x);\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Expo-Power (Xie 2000)}$\",\r\n  formule: \"$U(x)=\\\\frac{1}{\\\\gamma}\\\\left[1- e^{-\\\\gamma \\\\left(\\\\frac{x^{1-\\\\sigma} - 1}{1-\\\\sigma}\\\\right)}\\\\right]$\",\r\n  dom_def_inf: 0.1,\r\n  dom_def_sup: 5,\r\n  param: [\"gamma\", \"sigma\"],\r\n  param_l: [\"\\\\gamma\", \"\\\\sigma\"],\r\n  dom_param: [\r\n    [0.0, 5.0],   \/\/ gamma \u2265 0\r\n    [0.0, 5.0]    \/\/ sigma \u2265 0\r\n  ],\r\n  cont: [\"gamma >= 0\", \"sigma >= 0\"],\r\n  cont_L: [\"\\\\gamma \\\\ge 0\", \"\\\\sigma \\\\ge 0\"],\r\n  \"U_f(x)\": \"return (1\/gamma) * (1 - Math.exp(-gamma * ((Math.pow(x,1-sigma)-1)\/(1-sigma))));\",\r\n  AA_L: \"$\\\\gamma x^{-\\\\sigma} + \\\\dfrac{\\\\sigma}{x}$\",\r\n  AR_L: \"$\\\\gamma x^{1-\\\\sigma} + \\\\sigma$\",\r\n  P_L: \"$\\\\gamma x^{-\\\\sigma} + \\\\dfrac{1}{x}$\",\r\n  T_L: \"$\\\\dfrac{A(x) + 2\/x}{A(x) + 1\/x}$\",\r\n  A_f: \"return gamma * Math.pow(x, -sigma) + sigma \/ x;\",\r\n  R_f: \"return gamma * Math.pow(x, 1 - sigma) + sigma;\",\r\n  P_f: \"return gamma * Math.pow(x, -sigma) + 1 \/ x;\",\r\n  T_f: \"const A = gamma * Math.pow(x, -sigma) + sigma \/ x; return (A + 2\/x) \/ (A + 1\/x);\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Lucas (1978)} $\",\r\n  formule: \"$U(x)=\\\\frac{1-(1+\\\\beta x)^{1-\\\\gamma}}{1-\\\\gamma}$\",\r\n  dom_def_inf: 0,\r\n  dom_def_sup: 5,\r\n  param: [\"beta\", \"gamma\"],\r\n  param_l: [\"\\\\beta\", \"\\\\gamma\"],\r\n  dom_param: [\r\n    [0.01, 5.0],   \/\/ beta > 0\r\n    [0.0, 10.0]    \/\/ gamma \u2265 0\r\n  ],\r\n  cont: [\"beta > 0\"],\r\n  cont_L: [\"\\\\beta > 0\"],\r\n  \"U_f(x)\": \"return (1 - Math.pow(1 + beta * x, 1 - gamma)) \/ (1 - gamma);\",\r\n  AA_L: \"$\\\\dfrac{\\\\gamma\\\\beta}{1+\\\\beta x}$\",\r\n  AR_L: \"$\\\\dfrac{\\\\gamma\\\\beta x}{1+\\\\beta x}$\",\r\n  P_L: \"$\\\\dfrac{(\\\\gamma+1)\\\\beta}{1+\\\\beta x}$\",\r\n  T_L: \"$\\\\dfrac{(\\\\gamma+2)\\\\beta}{1+\\\\beta x}$\",\r\n  A_f: \"return gamma * beta \/ (1 + beta * x);\",\r\n  R_f: \"return (gamma * beta * x) \/ (1 + beta * x);\",\r\n  P_f: \"return (gamma + 1) * beta \/ (1 + beta * x);\",\r\n  T_f: \"return (gamma + 2) * beta \/ (1 + beta * x);\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Loi normale}$\",\r\n  formule: \"$U(x) = \\\\Phi\\\\!\\\\left(\\\\frac{x - \\\\mu}{\\\\sigma}\\\\right)=\\\\frac{1}{2\\\\sigma^2}\\\\int_{-\\\\infty}^x e^{\\\\frac{(t-\\\\mu)^2}{2\\\\sigma^2}}dt$\",\r\n dom_def_inf: -5,\r\n  dom_def_sup: 5,\r\n  param: [\"mu\", \"sigma\"],\r\n  param_l: [\"\\\\mu\", \"\\\\sigma\"],\r\n  dom_param: [\r\n    [-5.0, 5.0],   \/\/ mu\r\n    [0.1, 5.0]     \/\/ sigma > 0\r\n  ],\r\n  cont: [\"sigma > 0\"],\r\n  cont_L: [\"\\\\sigma > 0\"],\r\n  \"U_f(x)\": `\r\n    const z = (x - mu) \/ (sigma * Math.SQRT2);\r\n    const t = 1 \/ (1 + 0.3275911 * Math.abs(z));\r\n    const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741, a4 = -1.453152027, a5 = 1.061405429;\r\n    const erf = 1 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*Math.exp(-z*z);\r\n    return 0.5 * (1 + Math.sign(z) * erf);`,\r\n    AA_L: \"$\\\\dfrac{x - \\\\mu}{\\\\sigma^2}$\",\r\n    AR_L: \"$\\\\dfrac{x(x - \\\\mu)}{\\\\sigma^2}$\",\r\n    P_L: \"$\\\\dfrac{x - \\\\mu}{\\\\sigma^2} - \\\\dfrac{1}{x - \\\\mu}$\",\r\n    T_L: \"$\\\\dfrac{\\\\left(\\\\dfrac{x - \\\\mu}{\\\\sigma^2}\\\\right)^3 - 3\\\\dfrac{x - \\\\mu}{\\\\sigma^4}}{\\\\left(\\\\dfrac{x - \\\\mu}{\\\\sigma^2}\\\\right)^2 - \\\\dfrac{1}{\\\\sigma^2}}$\",\r\n   A_f: \"return (x - mu) \/ (sigma * sigma);\",\r\n   R_f: \"return x * (x - mu) \/ (sigma * sigma);\",\r\n   P_f: \"return (x - mu) \/ (sigma * sigma) - 1 \/ (x - mu);\",\r\n   T_f: \"const a = (x - mu) \/ (sigma * sigma); return (a*a*a - 3 * a \/ (sigma * sigma)) \/ (a*a - 1 \/ (sigma * sigma));\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Loi logistique}$\",\r\n  formule: \"$U(x) = \\\\dfrac{1}{1 + e^{-\\\\frac{x-\\\\mu}{s}}}$\",\r\n  dom_def_inf: -5,\r\n  dom_def_sup: 5,\r\n  param: [\"mu\", \"s\"],\r\n  param_l: [\"\\\\mu\", \"s\"],\r\n  dom_param: [\r\n    [-5.0, 5.0],   \/\/ mu\r\n    [0.1, 5.0]     \/\/ s > 0\r\n  ],\r\n  cont: [\"s > 0\"],\r\n  cont_L: [\"s > 0\"],\r\n  \"U_f(x)\": `\r\n    const z = (x - mu) \/ s;\r\n    return 1 \/ (1 + Math.exp(-z));\r\n  `,\r\n  \/\/ ----- D\u00c9RIV\u00c9ES ANALYTIQUES -----\r\n  \/\/ d\u00e9riv\u00e9e premi\u00e8re : U'(x) = U(x)(1-U(x)) \/ s\r\n  AA_L: \"$\\\\dfrac{e^{-\\\\frac{x-\\\\mu}{s}}}{s\\\\left(1 + e^{-\\\\frac{x-\\\\mu}{s}}\\\\right)^2}$\",\r\n  \/\/ d\u00e9riv\u00e9e seconde : U''(x)\r\n  AR_L: \"$\\\\dfrac{e^{-\\\\frac{x-\\\\mu}{s}}\\\\left(e^{-\\\\frac{x-\\\\mu}{s}} - 1\\\\right)}{s^2\\\\left(1 + e^{-\\\\frac{x-\\\\mu}{s}}\\\\right)^3}$\",\r\n  \/\/ Pente logarithmique : U'(x)\/U(x)\r\n  P_L: \"$\\\\dfrac{1}{s}\\\\left(1 - U(x)\\\\right)$\",\r\n  \/\/ Torsion : U'''(x)\/U''(x)\r\n  T_L: \"$\\\\dfrac{1 - 4U(x) + 6U(x)^2}{s\\\\left(1 - 2U(x)\\\\right)}$\",\r\n  \/\/ ----- D\u00c9RIV\u00c9ES EN CODE JS -----\r\n  A_f: `\r\n    const U = 1 \/ (1 + Math.exp(-(x - mu) \/ s));\r\n    return U * (1 - U) \/ s;\r\n  `,\r\n  R_f: `\r\n    const U = 1 \/ (1 + Math.exp(-(x - mu) \/ s));\r\n    return (U * (1 - U) * (1 - 2 * U)) \/ (s * s);\r\n  `,\r\n  P_f: `\r\n    const U = 1 \/ (1 + Math.exp(-(x - mu) \/ s));\r\n    return (1 - U) \/ s;\r\n  `,\r\n  T_f: `\r\n    const U = 1 \/ (1 + Math.exp(-(x - mu) \/ s));\r\n    return (1 - 4*U + 6*U*U) \/ (s * (1 - 2*U));\r\n  `\r\n},\r\n{\r\n  Nom: \"Loi Beta\",\r\n  formule: \"$U(x)=I_x(\\\\alpha,\\\\beta)=\\\\dfrac{B(x;\\\\alpha,\\\\beta)}{B(\\\\alpha,\\\\beta)}$\",\r\n  dom_def_inf: 0,\r\n  dom_def_sup: 1,\r\n  param: [\"alpha\", \"beta\"],\r\n  param_l: [\"\\\\alpha\", \"\\\\beta\"],\r\n  dom_param: [\r\n    [0.1, 10.0],   \/\/ alpha > 0\r\n    [0.1, 10.0]    \/\/ beta > 0\r\n  ],\r\n  cont: [\"alpha > 0\", \"beta > 0\"],\r\n  cont_L: [\"\\\\alpha > 0\", \"\\\\beta > 0\"],\r\n  \/\/ ----- Fonction U(x) en JS -----\r\n  \"U_f(x)\": `\r\n    \/\/ Beta CDF via s\u00e9rie ou approximation (ici version simple via betainc)\r\n    function betainc(x, a, b) {\r\n      \/\/ approximation num\u00e9rique standard (Continued fraction)\r\n      \/\/ Source: Numerical Recipes (version simplifi\u00e9e)\r\n      function betacf(x, a, b) {\r\n        const MAXIT = 200;\r\n        const EPS = 3e-7;\r\n        const FPMIN = 1e-30;\r\n        let qab = a + b;\r\n        let qap = a + 1;\r\n        let qam = a - 1;\r\n        let c = 1;\r\n        let d = 1 - qab * x \/ qap;\r\n        if (Math.abs(d) < FPMIN) d = FPMIN;\r\n        d = 1 \/ d;\r\n        let h = d;\r\n        for (let m = 1, m2 = 2; m <= MAXIT; m++, m2 += 2) {\r\n          let aa = m * (b - m) * x \/ ((qam + m2) * (a + m2));\r\n          d = 1 + aa * d;\r\n          if (Math.abs(d) < FPMIN) d = FPMIN;\r\n          c = 1 + aa \/ c;\r\n          if (Math.abs(c) < FPMIN) c = FPMIN;\r\n          d = 1 \/ d;\r\n          h *= d * c;\r\n          aa = -(a + m) * (qab + m) * x \/ ((a + m2) * (qap + m2));\r\n          d = 1 + aa * d;\r\n          if (Math.abs(d) < FPMIN) d = FPMIN;\r\n          c = 1 + aa \/ c;\r\n          if (Math.abs(c) < FPMIN) c = FPMIN;\r\n          d = 1 \/ d;\r\n          let del = d * c;\r\n          h *= del;\r\n          if (Math.abs(del - 1) < EPS) break;\r\n        }\r\n        return h;\r\n      }\r\n\t  function logGamma(z) {\r\n  const g = 7;\r\n  const p = [\r\n    0.99999999999980993,\r\n    676.5203681218851,\r\n    -1259.1392167224028,\r\n    771.32342877765313,\r\n    -176.61502916214059,\r\n    12.507343278686905,\r\n    -0.13857109526572012,\r\n    9.9843695780195716e-6,\r\n    1.5056327351493116e-7\r\n  ];\r\n\r\n  if (z < 0.5) {\r\n    \/\/ Reflection formula\r\n    return Math.log(Math.PI) - Math.log(Math.sin(Math.PI * z)) - logGamma(1 - z);\r\n  }\r\n\r\n  z -= 1;\r\n  let x = p[0];\r\n  for (let i = 1; i < p.length; i++) {\r\n    x += p[i] \/ (z + i);\r\n  }\r\n\r\n  const t = z + g + 0.5;\r\n  return 0.5 * Math.log(2 * Math.PI) + (z + 0.5) * Math.log(t) - t + Math.log(x);\r\n}\r\n\r\n    function logbeta(a, b) {\r\n    return logGamma(a) + logGamma(b) - logGamma(a + b);\r\n}\r\n\r\n      if (x <= 0) return 0;\r\n      if (x >= 1) return 1;\r\n      const bt = Math.exp(a * Math.log(x) + b * Math.log(1 - x) - logbeta(a, b));\r\n      if (x < (a + 1) \/ (a + b + 2))\r\n        return bt * betacf(x, a, b) \/ a;\r\n      else\r\n        return 1 - bt * betacf(1 - x, b, a) \/ b;\r\n    }\r\n    return betainc(x, alpha, beta);\r\n  `,\r\n  \/\/ ----- COEFFICIENTS D'AVERSION -----\r\n  \/\/ On utilise U'(x) = x^{alpha-1} (1-x)^{beta-1} \/ B(alpha,beta)\r\n  AA_L: \"$A(x)= -\\\\frac{U''(x)}{U'(x)} = \\\\frac{\\\\alpha-1}{x} - \\\\frac{\\\\beta-1}{1-x}$\",\r\n  AR_L: \"$R(x)=xA(x)= (\\\\alpha-1) - x\\\\frac{\\\\beta-1}{1-x}$\",\r\n  P_L: \"$P(x)= -\\\\frac{U'''(x)}{U''(x)} = \\\\frac{\\\\alpha-2}{x} - \\\\frac{\\\\beta-2}{1-x}$\",\r\n  T_L: \"$T(x)= -\\\\frac{U''''(x)}{U'''(x)} = \\\\frac{\\\\alpha-3}{x} - \\\\frac{\\\\beta-3}{1-x}$\",\r\n  \/\/ ----- Versions JS -----\r\n  A_f: `\r\n    return (alpha - 1) \/ x - (beta - 1) \/ (1 - x);\r\n  `,\r\n  R_f: `\r\n    return x * ((alpha - 1) \/ x - (beta - 1) \/ (1 - x));\r\n  `,\r\n  P_f: `\r\n    return (alpha - 2) \/ x - (beta - 2) \/ (1 - x);\r\n  `,\r\n  T_f: `\r\n    return (alpha - 3) \/ x - (beta - 3) \/ (1 - x);\r\n  `\r\n}  \r\n];\r\nU_f3 =[{\r\n  Nom: \"$\\\\text{Expo-Power (Sheng 1984)}$\",\r\n  formule: \"$U(x) = - e^{-a x} - b e^{-c x}$\",\r\n dom_def_inf: 0,\r\n  dom_def_sup: 5,\r\n  param: [\"a\", \"b\", \"c\"],\r\n  param_l: [\"a\", \"b\", \"c\"],\r\n  dom_param: [\r\n    [0.1, 5.0],   \/\/ a > 0\r\n    [0.1, 5.0],   \/\/ b > 0\r\n    [0.01, 4.0]   \/\/ c < a (contrainte s\u00e9par\u00e9e)\r\n  ],\r\n  cont: [\"a > c\", \"b > 0\"],\r\n  cont_L: [\"a > c\", \"b > 0\"],\r\n  \"U_f(x)\": \"return -Math.exp(-a*x) - b * Math.exp(-c*x);\",\r\n  AA_L: \"$\\\\dfrac{a^2 e^{-ax} + b c^2 e^{-cx}}{a e^{-ax} + b c e^{-cx}}$\",\r\n  AR_L: \"$x\\\\,\\\\dfrac{a^2 e^{-ax} + b c^2 e^{-cx}}{a e^{-ax} + b c e^{-cx}}$\",\r\n  P_L: \"$\\\\dfrac{a^3 e^{-ax} + b c^3 e^{-cx}}{a^2 e^{-ax} + b c^2 e^{-cx}}$\",\r\n  T_L: \"$\\\\dfrac{a^4 e^{-ax} + b c^4 e^{-cx}}{a^3 e^{-ax} + b c^3 e^{-cx}}$\",\r\n  A_f: \"return (a*a * Math.exp(-a*x) + b * c*c * Math.exp(-c*x)) \/ (a * Math.exp(-a*x) + b * c * Math.exp(-c*x));\",\r\n  R_f: \"return x * ((a*a * Math.exp(-a*x) + b * c*c * Math.exp(-c*x)) \/ (a * Math.exp(-a*x) + b * c * Math.exp(-c*x)));\",\r\n  P_f: \"return (a*a*a * Math.exp(-a*x) + b * c*c*c * Math.exp(-c*x)) \/ (a*a * Math.exp(-a*x) + b * c*c * Math.exp(-c*x));\",\r\n  T_f: \"return (a*a*a*a * Math.exp(-a*x) + b * c*c*c*c * Math.exp(-c*x)) \/ (a*a*a * Math.exp(-a*x) + b * c*c*c * Math.exp(-c*x));\"\r\n},\r\n{\r\n  Nom: \"$\\\\text{Loi logistique de Filho \\& alii}$\",\r\n  formule: \"$U(x) = \\\\left(1 + e^{-\\\\frac{x-\\\\mu}{s}}\\\\right)^{-\\\\alpha}$\",\r\n  dom_def_inf: -5,\r\n  dom_def_sup: 5,\r\n  param: [\"mu\", \"s\", \"alpha\"],\r\n  param_l: [\"\\\\mu\", \"s\", \"\\\\alpha\"],\r\n  dom_param: [\r\n    [-5.0, 5.0],   \/\/ mu\r\n    [0.1, 5.0],    \/\/ s > 0\r\n    [0.1, 5.0]     \/\/ alpha > 0\r\n  ],\r\n  cont: [\"s > 0\", \"alpha > 0\"],\r\n  cont_L: [\"s > 0\", \"\\\\alpha > 0\"],\r\n  \/\/ ----- Fonction U(x) en JS -----\r\n  \"U_f(x)\": `\r\n    const z = (x - mu) \/ s;\r\n    return Math.pow(1 + Math.exp(-z), -alpha);\r\n  `,\r\n  \/\/ ----- D\u00c9RIV\u00c9ES ANALYTIQUES -----\r\n  \/\/ U'(x)\r\n  AA_L: \"$U'(x)=\\\\dfrac{\\\\alpha}{s}\\\\,\\\\dfrac{e^{-\\\\frac{x-\\\\mu}{s}}}{\\\\left(1+e^{-\\\\frac{x-\\\\mu}{s}}\\\\right)^{\\\\alpha+1}}$\",\r\n  \/\/ U''(x)\r\n  AR_L: \"$U''(x)=\\\\dfrac{\\\\alpha}{s^2}\\\\,\\\\dfrac{e^{-\\\\frac{x-\\\\mu}{s}}\\\\left((\\\\alpha+1)e^{-\\\\frac{x-\\\\mu}{s}}-1\\\\right)}{\\\\left(1+e^{-\\\\frac{x-\\\\mu}{s}}\\\\right)^{\\\\alpha+2}}$\",\r\n  \/\/ pente logarithmique : U'\/U\r\n  P_L: \"$\\\\dfrac{U'(x)}{U(x)} = \\\\dfrac{\\\\alpha}{s}\\\\,\\\\dfrac{e^{-\\\\frac{x-\\\\mu}{s}}}{1+e^{-\\\\frac{x-\\\\mu}{s}}}$\",\r\n  \/\/ torsion : U'''\/U''\r\n  T_L: \"$T(x)=\\\\dfrac{(\\\\alpha+2)e^{-2z}-(2\\\\alpha+1)e^{-z}+1}{s\\\\left((\\\\alpha+1)e^{-z}-1\\\\right)}$ avec $z=\\\\frac{x-\\\\mu}{s}$\",\r\n  \/\/ ----- D\u00c9RIV\u00c9ES EN CODE JS ----\/\/\r\n  A_f: `\r\n    const z = (x - mu) \/ s;\r\n    const ez = Math.exp(-z);\r\n    return (alpha \/ s) * ez \/ Math.pow(1 + ez, alpha + 1);\r\n  `,\r\n  R_f: `\r\n    const z = (x - mu) \/ s;\r\n    const ez = Math.exp(-z);\r\n    return (alpha \/ (s * s)) *\r\n           (ez * ((alpha + 1) * ez - 1)) \/\r\n           Math.pow(1 + ez, alpha + 2);\r\n  `,\r\n  P_f: `\r\n    const z = (x - mu) \/ s;\r\n    const ez = Math.exp(-z);\r\n    return (alpha \/ s) * (ez \/ (1 + ez));\r\n  `,\r\n  T_f: `\r\n    const z = (x - mu) \/ s;\r\n    const ez = Math.exp(-z);\r\n    return ((alpha + 2) * ez * ez - (2 * alpha + 1) * ez + 1) \/\r\n           (s * ((alpha + 1) * ez - 1));\r\n  `\r\n},\r\n\r\n];\r\nU_f4 =[{\r\n  Nom: \"$\\\\text{Loi de Richards}$\",\r\n  formule: \"$U(x)=\\\\left(1 + q\\\\,e^{-a(x-b)}\\\\right)^{-1\/\\\\eta}$\",\r\n  dom_def_inf: -1,\r\n  dom_def_sup: 6,\r\n  param: [\"q\", \"a\", \"b\", \"eta\"],\r\n  param_l: [\"q\", \"a\", \"b\", \"\\\\eta\"],\r\n  dom_param: [\r\n    [0.1, 5.0],   \/\/ q > 0\r\n    [0.1, 5.0],   \/\/ a > 0\r\n    [-5.0, 5.0],  \/\/ b \u2208 R\r\n    [0.1, 5.0]    \/\/ eta > 0\r\n  ],\r\n  cont: [\"q > 0\", \"a > 0\", \"eta > 0\"],\r\n  cont_L: [\"q > 0\", \"a > 0\", \"\\\\eta > 0\"],\r\n  \/\/ ----- Fonction U(x) en JS -----\r\n  \"U_f(x)\": `\r\n    const z = q * Math.exp(-a * (x - b));\r\n    return Math.pow(1 + z, -1 \/ eta);\r\n  `,\r\n  \/\/ ----- D\u00c9RIV\u00c9ES ANALYTIQUES -----\r\n  \/\/ U'(x)\r\n  AA_L: \"$U'(x)=\\\\dfrac{a}{\\\\eta}\\\\,\\\\dfrac{q\\\\,e^{-a(x-b)}}{\\\\left(1+q\\\\,e^{-a(x-b)}\\\\right)^{1+1\/\\\\eta}}$\",\r\n  \/\/ U''(x)\r\n  AR_L: \"$U''(x)=\\\\dfrac{a^2}{\\\\eta}\\\\,\\\\dfrac{q e^{-a(x-b)}\\\\left((1+1\/\\\\eta)q e^{-a(x-b)} - 1\\\\right)}{\\\\left(1+q e^{-a(x-b)}\\\\right)^{2+1\/\\\\eta}}$\",\r\n  \/\/ pente logarithmique U'\/U\r\n  P_L: \"$\\\\dfrac{U'(x)}{U(x)} = \\\\dfrac{a}{\\\\eta}\\\\,\\\\dfrac{q e^{-a(x-b)}}{1+q e^{-a(x-b)}}$\",\r\n  \/\/ torsion T(x) = U'''\/U''\r\n  T_L: \"$T(x)=\\\\dfrac{(2+1\/\\\\eta)q^2 e^{-2a(x-b)}-(1+2\/\\\\eta)q e^{-a(x-b)}+1}{a\\\\left((1+1\/\\\\eta)q e^{-a(x-b)} - 1\\\\right)}$\",\r\n  \/\/ ----- D\u00c9RIV\u00c9ES EN CODE JS -----\r\n  A_f: `\r\n    const z = q * Math.exp(-a * (x - b));\r\n    return (a \/ eta) * (z \/ Math.pow(1 + z, 1 + 1\/eta));\r\n  `,\r\n  R_f: `\r\n    const z = q * Math.exp(-a * (x - b));\r\n    return (a * a \/ eta) *\r\n           (z * ((1 + 1\/eta) * z - 1)) \/\r\n           Math.pow(1 + z, 2 + 1\/eta);\r\n  `,\r\n  P_f: `\r\n    const z = q * Math.exp(-a * (x - b));\r\n    return (a \/ eta) * (z \/ (1 + z));\r\n  `,\r\n  T_f: `\r\n    const z = q * Math.exp(-a * (x - b));\r\n    return ((2 + 1\/eta) * z * z - (1 + 2\/eta) * z + 1) \/\r\n           (a * ((1 + 1\/eta) * z - 1));\r\n  `},\r\n  {\r\n  Nom: \"Loi normale tronqu\u00e9e (Chen)\",\r\n  formule: \"$U(x)=\\\\dfrac{\\\\Phi\\\\!\\\\left(\\\\frac{x-\\\\mu}{\\\\sigma}\\\\right)-\\\\Phi\\\\!\\\\left(\\\\frac{a-\\\\mu}{\\\\sigma}\\\\right)}{\\\\Phi\\\\!\\\\left(\\\\frac{b-\\\\mu}{\\\\sigma}\\\\right)-\\\\Phi\\\\!\\\\left(\\\\frac{a-\\\\mu}{\\\\sigma}\\\\right)}$\",\r\n  dom_def_inf: \"a\",\r\n  dom_def_sup: \"b\",\r\n  param: [\"mu\", \"sigma\", \"a\", \"b\"],\r\n  param_l: [\"\\\\mu\", \"\\\\sigma\", \"a\", \"b\"],\r\n  dom_param: [\r\n    [-5.0, 5.0],   \/\/ mu\r\n    [0.1, 5.0],    \/\/ sigma > 0\r\n    [-5.0, 4.0],   \/\/ a\r\n    [-4.0, 5.0]    \/\/ b, with a < b\r\n  ],\r\n  cont: [\"sigma > 0\", \"a < b\"],\r\n  cont_L: [\"\\\\sigma > 0\", \"a < b\"],\r\n  \/\/ ----- Fonction U(x) -----\r\n  \"U_f(x)\": `\r\n    function Phi(z) {\r\n      const t = 1 \/ (1 + 0.3275911 * Math.abs(z));\r\n      const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741,\r\n            a4 = -1.453152027, a5 = 1.061405429;\r\n      const erf = 1 - (((((a5*t + a4)*t + a3)*t + a2)*t + a1)*t)*Math.exp(-z*z);\r\n      const sign = z >= 0 ? 1 : -1;\r\n      return 0.5 * (1 + sign * erf);\r\n    }\r\n    const z  = (x - mu) \/ sigma;\r\n    const za = (a - mu) \/ sigma;\r\n    const zb = (b - mu) \/ sigma;\r\n    const num = Phi(z)  - Phi(za);\r\n    const den = Phi(zb) - Phi(za);\r\n    return num \/ den;\r\n  `,\r\n  \/\/ ----- COEFFICIENTS D'AVERSION (identiques \u00e0 la loi normale) -----\r\n  \/\/ A(x) = -U''\/U'\r\n  AA_L: \"$A(x)=\\\\dfrac{x-\\\\mu}{\\\\sigma^2}$\",\r\n  \/\/ R(x) = x A(x)\r\n  AR_L: \"$R(x)=\\\\dfrac{x(x-\\\\mu)}{\\\\sigma^2}$\",\r\n  \/\/ Prudence P(x) = -U'''\/U''\r\n  P_L: \"$P(x)=\\\\dfrac{x-\\\\mu}{\\\\sigma^2}-\\\\dfrac{1}{x-\\\\mu}$\",\r\n  \/\/ Temp\u00e9rance T(x) = -U''''\/U'''\r\n  T_L: \"$T(x)=\\\\dfrac{\\\\left(\\\\dfrac{x-\\\\mu}{\\\\sigma^2}\\\\right)^3 - 3\\\\dfrac{x-\\\\mu}{\\\\sigma^4}}{\\\\left(\\\\dfrac{x-\\\\mu}{\\\\sigma^2}\\\\right)^2 - \\\\dfrac{1}{\\\\sigma^2}}$\",\r\n  \/\/ ----- Versions JavaScript -----\r\n  A_f: `\r\n    return (x - mu) \/ (sigma * sigma);\r\n  `,\r\n  R_f: `\r\n    return x * (x - mu) \/ (sigma * sigma);\r\n  `,\r\n  P_f: `\r\n    return (x - mu) \/ (sigma * sigma) - 1 \/ (x - mu);\r\n  `,\r\n  T_f: `\r\n    const a0 = (x - mu) \/ (sigma * sigma);\r\n    return (a0*a0*a0 - 3 * a0 \/ (sigma * sigma)) \/\r\n           (a0*a0 - 1 \/ (sigma * sigma));\r\n  `\r\n}\r\n];\r\nU_f5 =[{\r\n  Nom: \"$\\\\text{Expo-Power  (Sheng 2016)}$\",\r\n  formule: \"$U(x) = -\\\\frac{1}{\\\\alpha} \\\\left[ 1 - \\\\exp\\\\left( -\\\\alpha \\\\cdot \\\\frac{\\\\beta + (x-\\\\delta)^\\\\gamma}{\\\\epsilon-\\\\delta} \\\\right) \\\\right]$\",\r\n  dom_def_inf: \"delta\",\r\n  dom_def_sup: \"epsilon\",\r\n  param: [\"alpha\", \"beta\", \"gamma\", \"delta\", \"epsilon\"],\r\n  param_l: [\"\\\\alpha\", \"\\\\beta\", \"\\\\gamma\", \"\\\\delta\", \"\\\\epsilon\"],\r\n  dom_param: [\r\n    [0.01, 5.0],   \/\/ alpha > 0\r\n    [-5.0, 5.0],   \/\/ beta libre\r\n    [0.1, 5.0],    \/\/ gamma > 0\r\n    [0.0, 5.0],    \/\/ delta\r\n    [0.1, 10.0]    \/\/ epsilon, avec contrainte epsilon > delta\r\n  ],\r\n  cont: [\"alpha > 0\", \"gamma > 0\", \"epsilon > delta\"],\r\n  cont_L: [\"\\\\alpha > 0\", \"\\\\gamma > 0\", \"\\\\epsilon > \\\\delta\"],\r\n  \"U_f(x)\": \"return -(1\/alpha) * (1 - Math.exp(-alpha * ((beta + Math.pow(x - delta, gamma)) \/ (epsilon - delta))));\",\r\n  AA_L: \"$\\\\alpha Y'(x) - \\\\dfrac{Y''(x)}{Y'(x)},\\\\quad Y(x)=\\\\dfrac{\\\\beta + (x-\\\\delta)^\\\\gamma}{\\\\epsilon-\\\\delta}$\",\r\n  AR_L: \"$x A(x)$\",\r\n  P_L: \"$-\\\\dfrac{-\\\\alpha^2 (Y')^3 + 3\\\\alpha Y'Y'' - Y'''}{\\\\alpha (Y')^2 - Y''}$\",\r\n  T_L: \"$-\\\\dfrac{\\\\alpha^3 (Y')^4 - 6\\\\alpha^2 (Y')^2Y'' + 4\\\\alpha Y'Y''' + 3\\\\alpha (Y'')^2 - Y^{(4)}}{-\\\\alpha^2 (Y')^3 + 3\\\\alpha Y'Y'' - Y'''}$\",\r\n  A_f: \"const k = epsilon - delta; const s = x - delta; const Y1 = gamma * Math.pow(s, gamma - 1) \/ k; const Y2 = gamma * (gamma - 1) * Math.pow(s, gamma - 2) \/ k; return alpha * Y1 - Y2 \/ Y1;\",\r\n  R_f: \"const k = epsilon - delta; const s = x - delta; const Y1 = gamma * Math.pow(s, gamma - 1) \/ k; const Y2 = gamma * (gamma - 1) * Math.pow(s, gamma - 2) \/ k; const A = alpha * Y1 - Y2 \/ Y1; return x * A;\",\r\n  P_f: \"const k = epsilon - delta; const s = x - delta; const Y1 = gamma * Math.pow(s, gamma - 1) \/ k; const Y2 = gamma * (gamma - 1) * Math.pow(s, gamma - 2) \/ k; const Y3 = gamma * (gamma - 1) * (gamma - 2) * Math.pow(s, gamma - 3) \/ k; const num = -alpha*alpha * Math.pow(Y1, 3) + 3 * alpha * Y1 * Y2 - Y3; const den =  alpha * Math.pow(Y1, 2) - Y2; return - num \/ den;\",\r\n  T_f: \"const k = epsilon - delta; const s = x - delta; const Y1 = gamma * Math.pow(s, gamma - 1) \/ k; const Y2 = gamma * (gamma - 1) * Math.pow(s, gamma - 2) \/ k; const Y3 = gamma * (gamma - 1) * (gamma - 2) * Math.pow(s, gamma - 3) \/ k; const Y4 = gamma * (gamma - 1) * (gamma - 2) * (gamma - 3) * Math.pow(s, gamma - 4) \/ k; const num =  alpha*alpha*alpha * Math.pow(Y1, 4) - 6 * alpha*alpha * Math.pow(Y1, 2) * Y2 + 4 * alpha * Y1 * Y3 + 3 * alpha * Math.pow(Y2, 2) - Y4; const den = -alpha*alpha * Math.pow(Y1, 3) + 3 * alpha * Y1 * Y2 - Y3; return - num \/ den;\"\r\n}\r\n];\r\n\r\n\r\nlet currentGroup = 0;        \/\/ 0,1,2,3,4\r\nlet currentFunctionIndex = 0;\r\nlet paramSliders = [];\r\nlet curve = null;\r\nlet curveA = null;  \/\/ Courbe pour A(x)\r\nlet curveR = null;  \/\/ Courbe pour R(x)\r\nlet curveP = null;  \/\/ Courbe pour P(x)\r\nlet curveT = null;  \/\/ Courbe pour T(x)\r\n\r\nfunction getFunctionByGroupAndIndex(group, idx) {\r\n  if (group === 0) return U_f0[idx];\r\n  if (group === 1) return U_f1[idx];\r\n  if (group === 2) return U_f2[idx];\r\n  if (group === 3) return U_f3[idx];\r\n  if (group === 4) return U_f4[idx];\r\n  return null;\r\n}\r\n\r\nfunction cleanDisplay(v) {\r\n  if (v === Infinity) return \"+\u221e\";\r\n  if (v === -Infinity) return \"-\u221e\";\r\n  return v.toFixed(2);\r\n}\r\n\r\nfunction removeOldSliders() {\r\n  paramSliders.forEach(s => {\r\n    try {\r\n      if (s.remove) s.remove();\r\n      else board.removeObject(s.id);\r\n    } catch(e) {\r\n      console.log(\"Erreur suppression:\", e);\r\n    }\r\n  });\r\n  paramSliders = [];\r\n}\r\n\r\nfunction getParamValuesFromFunction(f) {\r\n  const vals = {};\r\n  paramSliders.forEach((s, i) => {\r\n    vals[f.param[i]] = s.Value();\r\n  });\r\n  return vals;\r\n}\r\n\r\nfunction retypesetMathJax(id) {\r\n  if (window.MathJax && MathJax.typesetPromise) {\r\n    const el = document.getElementById(id);\r\n    if (el) {\r\n      MathJax.typesetPromise([el]).catch((err) => console.log(err));\r\n    }\r\n  }\r\n}\r\n\r\n\r\n\/\/ --- BLOC 1 : Liste d\u00e9roulante ---\r\n\r\nvar blocSelect = board.create('text', [-1,3.5,'$\\\\text{Fonctions d}^\\\\prime\\\\text{utilit\u00e9}$'],\r\n{fixed:true,\r\nfontSize:18,\r\nhighlight:false,\r\ncolor:'#A42A04'\r\n});\r\nvar texti0 = board.create('text', [-0.1, 1.5, '$\\\\text {Domaine}$'], {fixed:true,color:\"green\"});\r\nvar texti0 = board.create('text', [-1, 1, '$\\\\text {inf}$'], {fixed:true});\r\nvar texti1 = board.create('text', [1.3, 1, '$\\\\text {sup}$'], {fixed:true});\r\nvar input0 = board.create('text', [\r\n    -0.70, \r\n    1, \r\n    '<input id=\"in0\" onchange=\"updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\" type=\"number\" min=\"0\" max=\"999\" value=\"1\" ' +\r\n    'style=\"width:50px; color:navy; background:#daeaf6; border:1px solid #333; padding:2px;\">'\r\n], {fixed:true});\r\n\r\nvar input1 = board.create('text', [\r\n    0.40, \r\n    1, \r\n    '<input id=\"in1\" onchange=\"updateCurveFromFunction(getFunctionByGroupAndIndex(currentGroup, currentFunctionIndex));\" type=\"number\" min=\"0\" max=\"999\" value=\"2\" ' +\r\n    'style=\"width:50px; color:#FF4433; background:#fce1e4; border:1px solid #333; padding:2px;\">'\r\n], {fixed:true});\r\n\r\n\r\n\/\/ 2) Synchronisation (\u00e0 placer juste apr\u00e8s)\r\nconst in0 = document.getElementById(\"in0\");\r\nconst in1 = document.getElementById(\"in1\");\r\n\r\nin0.addEventListener(\"input\", () => {\r\n    in1.value = Number(in0.value) + 1;\r\n});\r\n\r\nvar blocSelect = board.create('text', [-1.3, 2.5, `\r\n  <div id=\"bloc_select\" class=\"control-panel\" style=\"font-size:16px;\">\r\n    <select id=\"uf_select\" \r\n            style=\"\r\n              margin-left:10px; \r\n              padding:4px;\r\n              font-weight:bold;\r\n            \">\r\n      <optgroup label=\"0 Param\u00e8tre\"\r\n                style=\"\r\n\t\t\t\t\/\/background:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f0.map((f, i) => `<option value=\"0_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n      <optgroup label=\"1 Param\u00e8tre\"\r\n               style=\"\r\n\t\t\t\tbackground:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f1.map((f, i) => `<option value=\"1_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n      <optgroup label=\"2 Param\u00e8tres\"\r\n                style=\"\r\n\t\t\t\tbackground:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f2.map((f, i) => `<option value=\"2_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n      <optgroup label=\"3 Param\u00e8tres\"\r\n                style=\"\r\n\t\t\t\tbackground:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f3.map((f, i) => `<option value=\"3_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n      <optgroup label=\"4 Param\u00e8tres\"\r\n                style=\"\r\n\t\t\t\tbackground:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f4.map((f, i) => `<option value=\"4_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n      <optgroup label=\"5 Param\u00e8tres\"\r\n              style=\"\r\n\t\t\t\tbackground:#e0e0e0; \r\n\t\t\t\tfont-family:'CMU Serif',\r\n\t\t\t\t'Computer Modern',serif; \r\n\t\t\t\tfont-weight:bold;\r\n\t\t\t\tpadding:4px;\r\n                color:#DC143C;\r\n          \">\r\n        ${U_f5.map((f, i) => `<option value=\"5_${i}\">${f.Nom}<\/option>`).join(\"\")}\r\n      <\/optgroup>\r\n\r\n    <\/select>\r\n  <\/div>\r\n`], {\r\n  display: 'html',\r\n  fixed: true,\r\n  cssStyle: 'font-size: 16px;'\r\n});\r\n\r\n\r\n\/\/ --- BLOC 2 : Formules et caract\u00e9ristiques ---\r\nvar blocFormules = board.create('text', [2.6, 3.8, `\r\n  <div id=\"bloc_formules\" class=\"control-panel\" style=\"max-width:400px;\">\r\n    S\u00e9lectionnez une fonction...\r\n  <\/div>\r\n`], { display: 'html', fixed: true });\r\n\r\nfunction updateFormulesFromFunction(f) {\r\n  const html = `\r\n    <b>Nom:<\/b> ${f.Nom}<br>\r\n    <b>Formule:<\/b> ${f.formule}<br>\r\n    <div id=\"coeff-container\">\r\n      <div><b>A(x):<\/b> <span class=\"${f.AA_L.includes('inexistant') ? 'coef-inexistant' : ''}\">${f.AA_L || 'NA'}<\/span><\/div>\r\n      <div><b>R(x):<\/b> <span class=\"${f.AR_L.includes('inexistant') ? 'coef-inexistant' : ''}\">${f.AR_L || 'NA'}<\/span><\/div>\r\n      <div><b>P(x):<\/b> <span class=\"${f.P_L.includes('inexistant') ? 'coef-inexistant' : ''}\">${f.P_L || 'NA'}<\/span><\/div>\r\n      <div><b>T(x):<\/b> <span class=\"${f.T_L.includes('inexistant') ? 'coef-inexistant' : ''}\">${f.T_L || 'NA'}<\/span><\/div>\r\n    <\/div>\r\n  `;\r\n  document.getElementById(\"bloc_formules\").innerHTML = html;\r\n  retypesetMathJax(\"bloc_formules\");\r\n}\r\n\r\n\/\/ --- BLOC 3 : Sliders ---\r\nvar blocSliders = board.create('text', [6.5, 4, `\r\n  <div id=\"bloc_sliders\" class=\"control-panel\">\r\n    <b>Param\u00e8tres :<\/b> (glissez les sliders)\r\n  <\/div>\r\n`], { display: 'html', fixed: true });\r\n\r\nfunction updateSlidersFromFunction(f) {\r\n  removeOldSliders();\r\n\r\n  const startY = 2.8;\r\n  const stepY = 0.45;\r\n\r\n  f.param.forEach((p, i) => {\r\n    const dom = f.dom_param[i] || [0, 1];\r\n    const min = dom[0];\r\n    const max = dom[1];\r\n    const init = (min + max) \/ 2;\r\n\r\n    const s = board.create('slider', [\r\n      [6, startY - i*stepY],\r\n      [9.5, startY - i*stepY],\r\n      [min, init, max]\r\n    ], {\r\n      name: `\\\\(${f.param_l[i]}:\\\\)`,\r\n      baseline: { strokeColor: 'blue' },\r\n      highline: { strokeColor: 'red' },\r\n      fillColor: '#0061a8',\r\n      strokeColor: '#0061a8',\r\n      label: { fontSize: 14, strokeColor: 'Black' }\r\n    });\r\n\r\n    s.on('drag', function() {\r\n      updateCurveFromFunction(f);\r\n      updateContraintesFromFunction(f);\r\n    });\r\n\r\n    paramSliders.push(s);\r\n  });\r\n\r\n  if (window.MathJax && MathJax.typesetPromise) {\r\n    MathJax.typesetPromise([board.renderer.container]).catch(err => console.log(err));\r\n  }\r\n\r\n  updateCurveFromFunction(f);\r\n}\r\n\r\n\r\n\/\/ --- BLOC 4 : Contraintes ---\r\nvar blocContraintes = board.create('text', [-1.0, 0.2, `\r\n  <div id=\"bloc_contraintes\" class=\"control-panel\">\r\n    <b>Contraintes :<\/b> S\u00e9lectionnez une fonction\r\n  <\/div>\r\n`], { display: 'html', fixed: true });\r\n\r\nfunction updateContraintesFromFunction(f) {\r\n  const vals = getParamValuesFromFunction(f);\r\n  \r\n  if (!f.cont || f.cont.length === 0) {\r\n    document.getElementById(\"bloc_contraintes\").innerHTML = \r\n      '<b>Contraintes :<\/b> Aucune';\r\n    return;\r\n  }\r\n\r\n  let status = \"OK\";\r\n  let msg = \"\";\r\n\r\n  f.cont.forEach((c, k) => {\r\n    const cL = (f.cont_L && f.cont_L[k]) ? f.cont_L[k] : c;\r\n    try {\r\n      let expr = c;\r\n      Object.keys(vals).forEach(p => {\r\n        expr = expr.replace(new RegExp(p, \"g\"), vals[p] || 0);\r\n      });\r\n      if (!eval(expr)) {\r\n        status = \"\u274c\";\r\n        msg += `\\\\(${cL}\\\\) `;\r\n      }\r\n    } catch(e) {\r\n      status = \"Erreur\";\r\n      msg += `\\\\(${cL}\\\\) `;\r\n    }\r\n  });\r\n  \r\n  if (status === \"OK\") {\r\n    document.getElementById(\"bloc_contraintes\").innerHTML = \r\n      `<b>Contraintes :<\/b> OK`;\r\n  } else {\r\n    document.getElementById(\"bloc_contraintes\").innerHTML = \r\n      `<b>Contraintes :<\/b> ${status} : ${msg}`;\r\n  }\r\n  retypesetMathJax(\"bloc_contraintes\");\r\n}\r\n\r\nfunction updateCurveFromFunction(f) {\r\n  const vals = getParamValuesFromFunction(f);\r\n\r\n  \/\/ Supprimer toutes les courbes existantes\r\n  [curve, curveA, curveR, curveP, curveT].forEach(c => {\r\n    if (c) {\r\n      try { board1.removeObject(c); } catch(e) {}\r\n    }\r\n  });\r\n  curve = curveA = curveR = curveP = curveT = null;\r\n\r\n  \/\/ G\u00e9rer les bornes du domaine (peuvent \u00eatre des noms de param\u00e8tres)\r\n  let x0 = Number(in0.value); \/\/ f.dom_def_inf;\r\n  let x1 = Number(in1.value); \/\/ f.dom_def_sup;\r\n\r\n\r\n  board1.setBoundingBox([x0, 1.4, x1, -0.4]);\r\n\r\n  \r\n  if (typeof x0 === 'string') {\r\n    x0 = vals[x0] || 0.1;\r\n  }\r\n  if (typeof x1 === 'string') {\r\n    x1 = vals[x1] || 5;\r\n  }\r\n\r\n  const paramNames = f.param || [];\r\n  const args = paramNames.map(p => vals[p] || 1);\r\n\r\n  \/\/ Cr\u00e9er les fonctions en dehors des closures\r\n  const U = new Function(...paramNames, 'x', f[\"U_f(x)\"]);\r\n  \r\n  \/\/ Courbe principale U(x) normalis\u00e9e\r\n  const U0 = U(...args, x0);\r\n  const U1 = U(...args, x1);\r\n\r\n  if (Math.abs(U1 - U0) > 1e-10) {\r\n    curve = board1.create('functiongraph', [\r\n      function(x) {\r\n        const ux = U(...args, x);\r\n        return (ux - U0) \/ (U1 - U0);\r\n      }, \r\n      x0, x1\r\n    ], {\r\n      strokeColor: '#074978',\r\n\t  shadow:true,\r\n      strokeWidth: 4,\r\n      strokeOpacity: 0.9,\r\n      name: 'U(x)',\r\n      visible: true\r\n    });\r\n  }\r\n\r\n  \/\/ Courbes des coefficients (affich\u00e9es selon les checkboxes)\r\n  \r\n  \/\/ A(x) - Aversion absolue au risque\r\n  if (checkbox1.Value() && f.A_f && f.A_f !== \"return undefined;\") {\r\n    try {\r\n      const A_func = new Function(...paramNames, 'x', f.A_f);\r\n      curveA = board1.create('functiongraph', [\r\n        function(x) {\r\n          try {\r\n            const result = A_func(...args, x);\r\n            return (result === undefined || isNaN(result)) ? NaN : result;\r\n          } catch(e) {\r\n            return NaN;\r\n          }\r\n        }, \r\n        x0, x1\r\n      ], {\r\n        strokeColor: '#A42A04',\r\n        strokeWidth: 4,\r\n\t\tshadow:true,\r\n        name: 'A(x)',\r\n        visible: true\r\n      });\r\n    } catch(e) {\r\n      console.log(\"Erreur cr\u00e9ation courbe A(x):\", e);\r\n    }\r\n  }\r\n\r\n  \/\/ R(x) - Aversion relative au risque\r\n  if (checkbox2.Value() && f.R_f && f.R_f !== \"return undefined;\") {\r\n    try {\r\n      const R_func = new Function(...paramNames, 'x', f.R_f);\r\n      curveR = board1.create('functiongraph', [\r\n        function(x) {\r\n          try {\r\n            const result = R_func(...args, x);\r\n            return (result === undefined || isNaN(result)) ? NaN : result;\r\n          } catch(e) {\r\n            return NaN;\r\n          }\r\n        }, \r\n        x0, x1\r\n      ], {\r\n        strokeColor: '#00AA00',\r\n        strokeWidth: 4,\r\n\t\tshadow:true,\r\n\t\tstrokeColor:\"#00a877\",\r\n        name: 'R(x)',\r\n        visible: true\r\n      });\r\n    } catch(e) {\r\n      console.log(\"Erreur cr\u00e9ation courbe R(x):\", e);\r\n    }\r\n  }\r\n\r\n  \/\/ P(x) - Prudence\r\n  if (checkbox3.Value() && f.P_f && f.P_f !== \"return undefined;\") {\r\n    try {\r\n      const P_func = new Function(...paramNames, 'x', f.P_f);\r\n      curveP = board1.create('functiongraph', [\r\n        function(x) {\r\n          try {\r\n            const result = P_func(...args, x);\r\n            return (result === undefined || isNaN(result)) ? NaN : result;\r\n          } catch(e) {\r\n            return NaN;\r\n          }\r\n        }, \r\n        x0, x1\r\n      ], {\r\n        strokeWidth: 4,\r\n\t\tshadow:true,\r\n\t\tstrokeColor:\"#ffc40c\",\r\n        name: 'P(x)',\r\n        visible: true\r\n      });\r\n    } catch(e) {\r\n      console.log(\"Erreur cr\u00e9ation courbe P(x):\", e);\r\n    }\r\n  }\r\n\r\n  \/\/ T(x) - Temp\u00e9rance\r\n  if (checkbox4.Value() && f.T_f && f.T_f !== \"return undefined;\") {\r\n    try {\r\n      const T_func = new Function(...paramNames, 'x', f.T_f);\r\n      curveT = board1.create('functiongraph', [\r\n        function(x) {\r\n          try {\r\n            const result = T_func(...args, x);\r\n            return (result === undefined || isNaN(result)) ? NaN : result;\r\n          } catch(e) {\r\n            return NaN;\r\n          }\r\n        }, \r\n        x0, x1\r\n      ], {\r\n        strokeColor: '#ff8f00',\r\n        strokeWidth: 4,\r\n\t\tshadow:true,\r\n        name: 'T(x)',\r\n        visible: true\r\n      });\r\n    } catch(e) {\r\n      console.log(\"Erreur cr\u00e9ation courbe T(x):\", e);\r\n    } \r\n }\r\n\r\n    board1.update();\r\n\r\n}\r\n\r\nconst labX = board1.create('text', [-.005,6.8,'$x$']);\r\n<\/script>\r\n\r\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-12151","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/12151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12151"}],"version-history":[{"count":2,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/12151\/revisions"}],"predecessor-version":[{"id":12155,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/12151\/revisions\/12155"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}