{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "578e0433-bb88-4078-ae08-561efbffe5ea",
   "metadata": {},
   "source": [
    "# 4. Algorithm Comparison in Optimal Consumption Problem"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6563b00e-e084-4f1f-96f5-83ea21299563",
   "metadata": {},
   "source": [
    "DING Minjie, Spring 2025"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10f534f1-0a55-46de-b96e-76c345dee323",
   "metadata": {},
   "source": [
    "____________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d89e960-83c0-4151-9448-6a7261141aab",
   "metadata": {},
   "source": [
    "Differnet algorithm leads to different compuation speed. In this tutorial, I will firstly show computation difference with a simple example. Then, I will compare three methods to solve optimal consumption problem.\n",
    "\n",
    "1. A simple example to show computation difference\n",
    "2. Optimal Consumption Solution 1: Value Function Iteration using Loop\n",
    "3. Optimal Consumption with Income Shock\n",
    "4. Optimal Consumption Solution 2: Speed Up with Vectorization\n",
    "5. Endogenous Grid Method\n",
    "6. Optimal Consumption Solution 3: Speed Up with Endogenous Grid Method\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88930055-f564-4a3a-838a-d5fa01df090d",
   "metadata": {},
   "source": [
    "______________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b91f8a71-4aad-440f-b21a-b07a4eb2ae7d",
   "metadata": {},
   "source": [
    "# 1. A simple example to show computation difference"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e2a779c-e3cb-4267-a3b0-c1411f7e1acc",
   "metadata": {},
   "source": [
    "_____________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c77588d0-c6f1-4032-b6fb-a636878de36c",
   "metadata": {},
   "source": [
    "Some commonly used methods to speed up computation include:\n",
    "\n",
    "1. Vectorization is faster than Loop.\n",
    "2. Endogenous grid method is faster than value exogenous grid method. \n",
    "3. Use parpool to handle large dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a02c905-63d4-4647-9e48-cdab1e388224",
   "metadata": {},
   "source": [
    "I use optimal consumption as an example to demonstrate speed difference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6a8f759c-08ae-49f4-99d0-1255545132c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<html><body><pre>ans = 'C:\\Users\\ading\\A_TA_Notes'</pre></body></html>"
      ],
      "text/plain": [
       "ans = 'C:\\Users\\ading\\A_TA_Notes'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cd\"C:\\Users\\ading\\A_TA_Notes\"\n",
    "pwd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "89f690fd-cd75-4ceb-825d-12755fa792e5",
   "metadata": {},
   "outputs": [],
   "source": [
    "clear all;  % Clears all variables from the workspace\n",
    "close all;  % Closes all open figure windows\n",
    "clc;        % Clears the Command Window"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "100128e8-d4cc-4079-b38a-b423477e3818",
   "metadata": {},
   "source": [
    "We want to sum up all dot product of elements in a matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9ff975b9-4575-46e4-b5d4-d3f647530656",
   "metadata": {},
   "outputs": [],
   "source": [
    "rng(100);                    % Set random seed\n",
    "n = 1200;\n",
    "A = random('Normal',0,1,n,n);  % Generate Matrix\n",
    "A = A + A';                    % Make it symmetric"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9282ac78-9b86-4fe3-a5ab-8f2f9872b33b",
   "metadata": {},
   "source": [
    "The first method is to use nested loops"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4f24c076-19ed-4056-a035-aa8c828840a3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "历时 4.272858 秒。\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>total_1 = 3.0207e+06</pre></body></html>"
      ],
      "text/plain": [
       "total_1 = 3.0207e+06"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Code 1: Nested Loops for Total Calculation\n",
    "tic; % Start the timer\n",
    "total_1=0;\n",
    "for i=1:n\n",
    "    for j=1:n\n",
    "        total_1=total_1+A(i,:)*A(j,:)';\n",
    "    end\n",
    "end\n",
    "toc; % End the timer\n",
    "total_1"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08c26c41-8035-42f8-b7ee-2fdac720351b",
   "metadata": {},
   "source": [
    "We can also loop over another dimension."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0d899bb1-f550-495b-963d-83b272fc36aa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "历时 1.985000 秒。\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>total_2 = 3.0207e+06</pre></body></html>"
      ],
      "text/plain": [
       "total_2 = 3.0207e+06"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Code 2: Another Nested Loop Approach\n",
    "tic; \n",
    "total_2=0;\n",
    "for i=1:n\n",
    "    for j=1:n\n",
    "        total_2=total_2+A(:,i)'*A(:,j);\n",
    "    end\n",
    "end\n",
    "toc;\n",
    "total_2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da24f27a-295c-4e1f-96ac-d9ce81b93bfa",
   "metadata": {},
   "source": [
    "However, loop one by one is slow. We can speed up with vectors. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7766bd6c-f454-479c-9ea3-b791a14b4885",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "历时 0.049618 秒。\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<html><body><pre>total_3 = 3.0207e+06</pre></body></html>"
      ],
      "text/plain": [
       "total_3 = 3.0207e+06"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "% Code 3: Vectorized Approach\n",
    "tic; \n",
    "total_3=sum(sum(A*A'));\n",
    "toc;\n",
    "total_3"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "db3ef5db-8ba2-497a-b622-602d479e776a",
   "metadata": {},
   "source": [
    "As we can see, vectorized approach takes much less time. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ee4b5ec-8360-4f27-b5a3-6b6fd3cc54ab",
   "metadata": {},
   "source": [
    "## parpool"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3eb5697f-c8ae-4e12-8380-49f4e8dfb28b",
   "metadata": {},
   "source": [
    "parpool enables us to handle several process simultaneously.\n",
    "\n",
    "However, it needs initialization time. So, when dealing with small dataset, parpool may not be the fastest.\n",
    "\n",
    "I have 6 par working together, but the time is longer than 1/6 of normal loops.\n",
    "\n",
    "Use parpool when we encounter large dataset. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9b2c7e67-84c8-4bb4-994f-920fc0fb3775",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正在使用 'Processes' 配置文件启动并行池(parpool)...\n",
      "已连接到具有 6 个工作进程的并行池。\n",
      "历时 1.518947 秒。\n"
     ]
    }
   ],
   "source": [
    "%% Paralell Computing\n",
    "parpool;\n",
    "\n",
    "tic; % Start the timer\n",
    "total_1=0;\n",
    "parfor i=1:n\n",
    "    for j=1:n\n",
    "        total_1=total_1+A(i,:)*A(j,:)';\n",
    "    end\n",
    "end\n",
    "toc; % End the timer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce31f1e4-6fb3-4c4b-b792-be7923e76d5a",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0dd318b7-ce20-4cee-9ddd-c20698235cec",
   "metadata": {},
   "source": [
    "# 2. Optimal Consumption Solution 1: Value Function Iteration using Loop"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a248a3f0-2d2b-4a6b-a136-3afa61ef03c0",
   "metadata": {},
   "source": [
    "_________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2f32d02-d692-4c87-b583-f0ed6ad935de",
   "metadata": {},
   "source": [
    "Optimal consumption is a classical dynamic programming problem in economics. "
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "42872a23-b078-4e65-b822-37d9e68da44c",
   "metadata": {},
   "source": [
    "The problem can be formally described as follows:\n",
    "\n",
    "- **Objective**: Maximize the expected utility over time:\n",
    "\n",
    "  $$\n",
    "  V(A) = \\max_{c} \\left\\{ U(c) + \\beta E[V(A') | A] \\right\\}\n",
    "  $$\n",
    "\n",
    "  where:\n",
    "  -  V(A): Value function representing the maximum utility achievable with current assets $ A $.\n",
    "  -  U(c): Utility derived from consumption $ c $. For simplicity, assume $U(c) = log(c)$.\n",
    "  -  A': Future assets after consumption is made,\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81756bcc-28e1-4fbd-b245-091d043b8579",
   "metadata": {},
   "source": [
    "- **Asset Transition**: determined by the equation:\n",
    "\n",
    "  $$\n",
    "  A' = (1 + r)A + Y - c\n",
    "  $$\n",
    "\n",
    "  where:\n",
    "  - r: is the interest rate\n",
    "  - Y: is the income."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22ac3c93-8e79-4160-b5ff-dffed1bcb4aa",
   "metadata": {},
   "source": [
    "- **Constraints**:\n",
    "\n",
    "  $$\n",
    "  c \\geq 0 \\quad \\text{and} \\quad c \\leq A + Y\n",
    "  $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "87a43c71-5855-4732-a0ea-4bb26aa51506",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Preparation\n",
    "\n",
    "% Households\n",
    "y = 1;              % Fixed income received by the agent\n",
    "gamma   = 1;        % risk aversion in consumption utility function \n",
    "r = 0.03;           % The rate at which savings grow\n",
    "beta = 0.95;        % How much future utility is worth today\n",
    "\n",
    "\n",
    "% Assets grids\n",
    "a_grid_size = 500;      % Number of asset grid\n",
    "a_max = 20;        % Maximum value of asset\n",
    "borrow_limit  = 0;   % Borrowing limit\n",
    "a_grid_power   = 1;           % Power of grid interval, 1 for linear, 0 for L-shaped\n",
    "\n",
    "a_grid = linspace(0,1,a_grid_size)';\n",
    "a_grid = a_grid.^(1./a_grid_power);\n",
    "a_grid = borrow_limit + (a_max - borrow_limit).*a_grid;\n",
    "\n",
    "\n",
    "% Iteration setting\n",
    "iter_max = 100;          % maxium iteration\n",
    "iter_counter = 1;        % iteration counting   \n",
    "\n",
    "iter_tolerance = 0.01;   % Tolerance for convergence \n",
    "iter_diff = 1;           % initial difference "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "9b0e44cd-c27a-41de-b611-17cdcf268ebd",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Local Function to Facilitate Expression\n",
    "\n",
    "% Utility function\n",
    "if gamma == 1\n",
    "    u = @(c)log(c);\n",
    "else    \n",
    "    u = @(c)(c.^(1-gamma)-1)./(1-gamma);\n",
    "end    \n",
    "\n",
    "% Derivative of utility function to consumption\n",
    "u1 = @(c) c.^(-gamma);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c6a2dbf6-7522-456e-8a9c-6ffdef0fd8f5",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Initialize value functions and consumption function\n",
    "V_guess        = u(r.*a_grid+y)./(1-beta);     % initial guess of value function\n",
    "V_current      = zeros(a_grid_size,1);              % current value functions from iteration\n",
    "V_next         = zeros(a_grid_size,1);              % new value functions from iteration\n",
    "C              = zeros(a_grid_size,1);              % consumption policy\n",
    "V_intermediate = zeros(a_grid_size, iter_max);      % intermediate value functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "db8c71b9-1baf-4786-aff6-b8a28d6314e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total iteration:  31, Time: 48.294024 \n"
     ]
    }
   ],
   "source": [
    "%% Iteration using fmincon\n",
    "\n",
    "options = optimoptions('fmincon','Display','off','TolX',1.0e-8);  % Options for the optimizer\n",
    "\n",
    "tic\n",
    "while iter_counter <= iter_max && iter_diff > iter_tolerance\n",
    "\n",
    "    for i = 1:a_grid_size\n",
    "        utility_function = @(c) - u(c) - beta * interp1(a_grid, V_current, (1+r)*(a_grid(i) + y - c));\n",
    "        % we need to find maximum utility, and we have fmincon\n",
    "        % so we try to find minimum negative utility\n",
    "        % interpolated from the current value function.\n",
    "        \n",
    "        [C(i), V_next(i)] = fmincon(utility_function, y + 0.5 * a_grid(i),[],[],[],[],eps,a_grid(i) + y, [], options);\n",
    "        % [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)\n",
    "        % find c(i) and V'(i) that maximize utility\n",
    "        % x0 = income+0.5*assetGrid(i) \n",
    "        % upper bound =  assetGrid(i)+income\n",
    "    end\n",
    "\n",
    "    % Update value function\n",
    "    V_next = -V_next;\n",
    "    V_intermediate(:,iter_counter) = V_next;\n",
    "    iter_diff = max(abs(V_current - V_next)); \n",
    "    V_current = V_next; \n",
    "    iter_counter = iter_counter + 1; \n",
    "\n",
    "end\n",
    "\n",
    "% Displays the total number of iterations and the time taken\n",
    "fprintf('Total iteration: %3i, Time: %2.6f \\n', iter_counter, toc);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b7d5a36-d032-49c0-a6bd-7d229bf79711",
   "metadata": {},
   "source": [
    "Here are parameters which will affect total running time of iteration.\n",
    "\n",
    "    a_grid_size: number of total grid\n",
    "    a_grid_power: interval difference of grid\n",
    "    gamma: type of utility function, when gamma doesn't equal to 1, the computation is more complicated. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "807d8aac-1c79-44a8-a969-eda80a2a641a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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HLEDmpszZ86qVavy8/Pnz59vv3zjxo333HOP73c377333n379vngjXbu3NnQ0GB9fPLkyc6dO/vgTQElGDt27I4dO2w/lpaW3nvvvWlpadu3b3fxFby7ScomVTgJ2xLFDmhuwIABv/vd7/R6vX2xq66u3rNnz4YNG2xLzpw5U1JS8ssvv4SEhAwfPvy2225r9jq7d+++4447evbsaf3xq6++unz58l133WX98Zdfftm5c6fJZOrSpcvkyZOtpyrayslb7NmzZ8iQIbW1tYcOHVKpVM0mtL379ddfn5CQEBQUZDAYzp4929jYuHPnznHjxn3xxRe333577969reubTKbdu3dbp500aVJISIh1ufN3AeDQ4MGDH3jggW3bttmWtLaJ2TTbJFtuwl999ZXJZBoxYoTtV0pLS+vq6mJjY9s0WwClCq3OMakPGcqEAg/22sjyb3/nnXeEECdPnrQteeWVVzp27NjQ0GD9cdOmTSqV6t57750yZUq/fv1UKtWuXbusT9lOnTQ7Jztt2rS4uDjr4y+//DIiIqJfv36TJ0/u3bt3v379vv/+e4eTTJs2bcyYMa3N6eQtrr322mnTpnXs2DEuLq53794hISHFxcXWp0pKSrp162Z994iIiEGDBtXW1j733HM33XRTREREXFzcpUuX7E+a7N27t2vXrgMGDJgyZUrPnj1vueWW48ePX/VdmuFUbFsp8z+FLP/quLg424ZpM2XKlC5dulgfO9nEHJ6KdbgJv/76682uIRk0aFBGRkbLeeSRKgMGDHB+Eta22lXXkRmO2MHLOjy5X+oR2qzlPt+MGTNSU1P1ev3TTz9tXfLuu+/Onj3buk/Z2NiYkpKyfPnyFStWCCEsFkt0dPT69esnTJjg4jtOnjx52LBh//3f/61Sqerr60ePHp2YmPjxxx87XPnbb79tdlFzenq68w9wWB0+fPjkyZPh4eH19fVRUVGvvfaadW9++vTp99xzz4cffqhSqYxG48CBA1955RWdTnf06NGGhoYPP/zQ/kUuX778yCOPjB8/fsuWLUKIX375ZfTo0VOnTv3yyy+dvwvgOXnkSTOXL1/+4IMP/va3vy1YsEC4sIm15HAT/q//+q9FixbZriEpLS09evSo9crgluSRKhyuc4hiBy+Tx5YWEhKSmJi4efNma7H76quvjh49umnTJuuzQUFBX3/9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"
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Plotting\n",
    "figure(1)\n",
    "subplot(1,2,1)\n",
    "plot(a_grid,V_current)\n",
    "legend('Value Function')\n",
    "xlabel('Asset')\n",
    "ylabel('Value')\n",
    "\n",
    "subplot(1,2,2)\n",
    "plot(a_grid,C)\n",
    "legend('Policy Function')\n",
    "xlabel('Asset')\n",
    "ylabel('Consumption')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcf292d5-75aa-426b-a609-d6b7e3b81deb",
   "metadata": {},
   "source": [
    "Sometimes, people use **\"max\"** to find value function.\n",
    "\n",
    "Let's re-run clear code cell, and parameters code cell."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7eb1c934-143e-4d45-a79e-0e13fd4eb565",
   "metadata": {},
   "outputs": [],
   "source": [
    "clear all;  % Clears all variables from the workspace\n",
    "close all;  % Closes all open figure windows\n",
    "clc;        % Clears the Command Window"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "2dac75f8-a279-40d9-8e12-f7a20c8ac126",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Preparation\n",
    "\n",
    "% Households\n",
    "y = 1;              % Fixed income received by the agent\n",
    "gamma   = 1;        % risk aversion in consumption utility function \n",
    "r = 0.03;           % The rate at which savings grow\n",
    "beta = 0.95;        % How much future utility is worth today\n",
    "\n",
    "\n",
    "% Assets grids\n",
    "a_grid_size = 500;      % Number of asset grid\n",
    "a_max = 20;        % Maximum value of asset\n",
    "borrow_limit  = 0;   % Borrowing limit\n",
    "a_grid_power   = 1;           % Power of grid interval, 1 for linear, 0 for L-shaped\n",
    "\n",
    "a_grid = linspace(0,1,a_grid_size)';\n",
    "a_grid = a_grid.^(1./a_grid_power);\n",
    "a_grid = borrow_limit + (a_max - borrow_limit).*a_grid;\n",
    "\n",
    "\n",
    "% Iteration setting\n",
    "iter_max = 100;          % maxium iteration\n",
    "iter_counter = 1;        % iteration counting   \n",
    "\n",
    "iter_tolerance = 0.01;   % Tolerance for convergence \n",
    "iter_diff = 1;           % initial difference "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "abba8c5e-231a-40ea-b02f-148de965c0e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Initialize value functions and consumption function\n",
    "V_guess        = u(r.*a_grid+y)./(1-beta);     % initial guess of value function\n",
    "V_current      = zeros(a_grid_size,1);              % current value functions from iteration\n",
    "V_next          = zeros(a_grid_size,1);              % new value functions from iteration\n",
    "V_intermediate = zeros(a_grid_size, iter_max);      % intermediate value functions\n",
    "C              = zeros(a_grid_size,1);              % consumption policy\n",
    "S  = zeros(a_grid_size,1);                   % saving function\n",
    "S_index = zeros(a_grid_size,1);              % saving choice index function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "47064eda-e9d2-4e8f-9a79-1e1b7dad7b12",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Local Function to Facilitate Expression\n",
    "\n",
    "% Utility function\n",
    "if gamma == 1\n",
    "    u = @(c)log(c);\n",
    "else    \n",
    "    u = @(c)(c.^(1-gamma)-1)./(1-gamma);\n",
    "end    \n",
    "\n",
    "% Derivative of utility function to consumption\n",
    "u1 = @(c) c.^(-gamma);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a94da5c3-cccb-4cf6-b110-2c7cee30d067",
   "metadata": {},
   "source": [
    "We use \"max\" here to find optimal choice."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "379b99c4-14af-4b30-853e-cc952ef67b01",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total iteration:  32, Time: 0.266263 \n"
     ]
    }
   ],
   "source": [
    "%% Iteration using max\n",
    "\n",
    "V_next = V_guess;\n",
    "\n",
    "tic; \n",
    "\n",
    "while iter_counter <= iter_max && iter_diff > iter_tolerance\n",
    "    \n",
    "    iter_counter = iter_counter + 1;\n",
    "    V_current = V_next;   % pass the old value to current value\n",
    "\n",
    "    \n",
    "    % loop over assets\n",
    "    for i = 1:a_grid_size        \n",
    "        cash = (1+r).*a_grid(i) + y;\n",
    "        V_choice = u(max(cash-a_grid,1.0e-10)) + beta.*V_current;           \n",
    "        [V_next(i),S_index(i)] = max(V_choice);\n",
    "        S(i) = a_grid(S_index(i));      % Saving = i_th a_grid which maximize value function \n",
    "        C(i) = cash - S(i);            % Consumption = cash - saving\n",
    "    end\n",
    "    \n",
    "    \n",
    "    iter_diff = max(max(abs(V_next - V_current)));\n",
    "   \n",
    "    % disp(['Iteration no. ' int2str(iter_counter), ' max val fn diff is ' num2str(iter_diff)]);\n",
    "end    \n",
    "\n",
    "% Displays the total number of iterations and the time taken\n",
    "fprintf('Total iteration: %3i, Time: %2.6f \\n', iter_counter, toc);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "773c054f-4188-4441-8178-76c6726187c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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LigosKNbuBqiylMmdn7Wjhw5Mn/+fB8fn40bN+p0OlHvaQKAjsEVuxa6//77RcRgMFgO5ubmiojy98lOmfOBQmktdunSJSuV05bUesrEbs/ahx9+OGfOnKFDhyYmJprb1Kn4NAFAByDYtdBvfvMbrVar3A9kVlZW1qtXr1qzSPaipKRk79692dnZloO3bt0SEVdXVysV1ZbUd8rEns/a2rVrY2NjJ0yYsHnzZstSVXmaAKDDEOxaSKPRBAUFpaenm59ANBgMR48eHT16tHULa7Fu3botWbLk7bffthxMTk728PAYMmSItapqQ+o7ZWK3Z23r1q2bNm2aO3fu6tWrNZp/+n8hVZ4mAOgwBLuWmzNnTnFxcVRUVFFRUUFBQWRkpEajmT59urXraiEXF5fnn3/+q6++iouLKykpuXz58qJFi86ePRsdHV3rT6/9UtkpE/s8ayUlJWvXrtXpdGVlZSv/mRLm1HeaAKDDONTU1Fi7BjuWkpKyatWq69evi0jv3r3XrFkTGBho7aJarrq6Oi4ubsuWLVVVVSJy7733Ll68eNy4cdauq4UCAwP9/Pzee+89y0F7P2V1D8ruzlpSUtLixYvrXXX+/HnlfkF7P00AYC0Eu9YymUz5+fkiotfrrV1L26iurj537tw999zTr18/a9fSLtR3ykSNZ02VpwkA2hvBDgAAQCVs9C4cAAAANBfBDgAAQCUIdgAAACpBsAMAAFAJgh0AAIBKEOwAAABUgmAHAACgEgQ7AAAAldBauwCgebKzswsLC728vHx9fa1dCwAAtoVvnoCdCQsLy8vLGzhw4P79+zv4rTdu3Ni/f//g4OAOfl8AAJqIqVjYk3PnzuXl5T344IN5eXnfffddR751SkrKunXrysvLO/JNAQBoFoId7MmePXtEZMmSJSLy17/+1drlAABgW7jHDnajurp63759gwYN+rd/+zc/P7+DBw++8sorPXv2tNymsLDwiy++yM/Pd3BwCAwMDAkJcXJyauJaEcnPzz98+HBRUdG99947atSowYMHK+OZmZlnzpwREeV/674QAABbwD12sBt79+595ZVXlixZMm3atE8++SQmJmbhwoURERHmDY4cORIZGVldXd2jRw+j0fjLL794enomJiZ6enreda2IrFu3buPGjVqt9p577rl582ZlZeWECRNWr14tItHR0fv27TO/0cmTJ93c3Dr26AEAuDumYmE39uzZo9FonnrqKREZO3asVqutNRu7ZMmS+++//5tvvjlx4sR333335ptvFhUV/eUvf2nK2l27dm3cuHHkyJEnTpw4ceLEmTNnnnvuud27d3/wwQcismbNmri4OBGJi4vLzc0l1QEAbBNTsbAPly9fPnXq1IgRI5S5V2dn57Fjx+7bty89Pf2RRx4RkcrKymvXrj344IP33HOP8pJnnnmmvLy8f//+d10rIvHx8W5ubm+//bZOpxMRJyen11577Ztvvtm8eXNERIRGw38CAQDsAMEO9uHTTz8VkXHjxplHxo0bt2/fvi1btijBzsnJSa/Xp6WlTZs2LSQkJDAwsF+/fpMnT1Y2bnzt5cuXi4qKAgICsrKyLN/017/+dUFBQX5+vl6v76DjBACgFbjHDvbh3//934uLi2vNgV6/fl2j0XzxxRdeXl4iUlRUtHDhwtOnTytrvb29w8PDZ8yY4erq2vjatLS0WbNmNfTWCQkJQUFBKSkpCxYsiIuLGzt2bHsdJAAArcMVO9iBY8eOFRcXDxw40Dxzqrhy5cqZM2f27NkTFRUlIp6enjt37rx48eLXX3994sSJo0ePvv/++8eOHfvkk08aX6vMtA4fPnz69Ol13/1f//VfO+QoAQBoLYId7ICSzJYvX+7v7285XlhYOGLEiN27d8+bN6+mpubUqVN9+/b18fHx8fGZMmVKeXn51KlTs7Kyzp8//8ADDzSy9qGHHhKRqqqqoKAgy/2fP3++srKyR48eHXeoAAC0AreEw9Zdv3790KFDXl5etVKdiHh5eQUGBv70009/+9vfzp49O23atHfeece81sXFpU+fPiLSrVu3xtfec889fn5+p06dyszMNG9gMBhmz549bdq0qqoqEVGu6lVXV7fnsQIA0CpcsYOtS05ONplMlo9NWJo4ceLJkycTExN37Njx0EMPffrpp926dXv88cc1Gk1mZubBgwcDAwP79u3bt2/fRtaKyNKlS5977rmIiIh58+b99re/LS8vf/fdd3/++eclS5Yoz8l2795dRN5///3MzMypU6f6+Ph04GcAAECT8PAEbF1YWFheXt7nn3+uJLBaqqurAwMDDQbDwYMHe/TosWzZsiNHjphMJhHRaDRhYWFLly5VWpyUlpY2slZEMjMzV6xYkZOToyzee++9L7300pQpU5RFk8k0e/bsr776SkQ2bNjwxBNPtP+hAwDQPAQ7qE1lZeXp06e1Wu3QoUMdHR2btVZErl+/npOT4+7uPmDAgHp3XlVV5ezs3C6lAwDQOgQ7AAAAleDhCQAAAJUg2AEAAKgEwQ4AAEAlCHYAAAAqQbADAABQCYIdAACAShDsAAAAVIJgBwAAoBIEOwAAAJUg2AEAAKgEwQ4AAEAlCHYAAAAqQbADAABQCYIdAACAShDsAAAAVIJgBwAAoBIEOwAAAJUg2AEAAKjE/wOA8Z4eHdVBWQAAAABJRU5ErkJggg=="
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Plotting\n",
    "figure(1)\n",
    "subplot(2,2,1)\n",
    "plot(a_grid,V_current)\n",
    "title('Value Function')\n",
    "xlabel('Asset')\n",
    "ylabel('Value')\n",
    "\n",
    "subplot(2,2,2)\n",
    "plot(a_grid,C)\n",
    "title('Consumption Policy Function')\n",
    "xlabel('Asset')\n",
    "ylabel('Consumption')\n",
    "\n",
    "subplot(2,2,3)\n",
    "plot(a_grid,S-a_grid)\n",
    "title('Savings Policy Function (a''-a)')\n",
    "xlabel('Asset')\n",
    "ylabel('Saving')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59d95140-6bc2-4c8c-9253-7a3f7a9bd8b3",
   "metadata": {},
   "source": [
    "This method is much more faster. But there is no interpolation, only find certain index. So, there is zig-zag thing in policy function."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94336265-e695-4e84-b2fe-827b230d63e9",
   "metadata": {},
   "source": [
    "________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59d3ecc3-524e-4bdb-802b-c42ba5933068",
   "metadata": {},
   "source": [
    "# 3. Optimal Consumption with Income Shock"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "801bb7a9-d1ff-4b04-8d3a-57030785267c",
   "metadata": {},
   "source": [
    "__________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8cc2ce98-77e2-41b4-97cb-3c91d249b2d6",
   "metadata": {},
   "source": [
    "Now we introduce new changes to the problem.\n",
    "\n",
    "- The agent faces three possible income levels:\n",
    "  $$  Y = [0.5, 1.0, 1.5] $$\n",
    "  \n",
    "- Each income level has an equal probability:\n",
    "  $$ Pi_Y = [\\frac{1}{3}, \\frac{1}{3}, \\frac{1}{3}] $$\n",
    "\n",
    "- For each combination of asset levels and income states, we need to uses the `fmincon` optimization function to determine the optimal consumption level  C that maximizes the expected utility:\n",
    "  \n",
    "  $$\n",
    "  \\max_{c} \\left\\{ -\\log(c) - \\beta \\sum_{j=1}^{3} \\Pi_Y(j) V_0(A', Y(j)) \\right\\}\n",
    "  $$\n",
    "\n",
    "- The future assets A' after consumption are calculated based on the current assets, income, and chosen consumption."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed41a6ee-8774-4e5c-8e29-24eccb5ed20d",
   "metadata": {},
   "source": [
    "In parameter section, here are newly added code lines:\n",
    "\n",
    "- Y = [0.5;1.0;1.5];       % Income levels\n",
    "\n",
    "- Pi_Y = [1/3; 1/3; 1/3];  % Income probabilitie\n",
    "- N_Y = length(Y);         % Number of income levels\n",
    "\n",
    "Others are the same, except for more abbreviation. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "ef411f78-cbf9-47c3-84b0-a2fa271d73dd",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Preparation\n",
    "\n",
    "% Households\n",
    "Y = [0.5;1.0;1.5];       % Income levels\n",
    "Pi_Y = [1/3; 1/3; 1/3];  % Income probabilities  \n",
    "r = 0.02;                % The rate at which savings grow\n",
    "beta = 0.96;             % How much future utility is worth today\n",
    "\n",
    "% Asset grid\n",
    "A = (0:0.05:10)';        % Grid of asset from 0 to 10, increments of 0.05\n",
    "N_A = length(A);         % Number of points in the asset grid\n",
    "N_Y = length(Y);         % Number of income levels\n",
    "\n",
    "% Maximum iterations\n",
    "Max_iter = 100;          % maxium iteration\n",
    "iter = 1;                % iteration start from 1\n",
    "\n",
    "% Tolerance for convergence\n",
    "tol = 0.01;              % tolerance, larger to shorten time\n",
    "max_diff = 1;            % difference start\n",
    "\n",
    "% Options for fmincon optimization\n",
    "opts = optimoptions('fmincon','Display','off','TolX',1.0e-6);\n",
    "\n",
    "% Initialize value function and consumption\n",
    "V_0 = zeros(N_A, N_Y);   % current value functions\n",
    "V_1 = zeros(N_A, N_Y);   % next value functions \n",
    "C = zeros(N_A, N_Y);     % consumption policy\n",
    "V_save = zeros(N_A, N_Y, Max_iter);  % intermediate value functions"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e861b66d-9e78-439a-8be2-587bdf3dad0a",
   "metadata": {},
   "source": [
    "In iteration section, the changes are:\n",
    "\n",
    "- Introduce another loop because of 3 income level.\n",
    "- Future value in Bellman function now is expected value weighted by income probability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "206c9c6b-26d7-45f6-a3d4-eb3fbe46b2e4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration: 1, Max difference: 2.44234702\n",
      "Iteration: 11, Max difference: 0.10095394\n",
      "Iteration: 21, Max difference: 0.01114086\n",
      "Total iteration:  25, Time: 46.076386 \n"
     ]
    }
   ],
   "source": [
    "%% Iteration\n",
    "tic\n",
    "while max_diff > tol\n",
    "    for j = 1:N_Y\n",
    "        for i = 1:N_A\n",
    "            % Optimize consumption and update value function\n",
    "            utility_function = @(x) -log(x) ...\n",
    "                - beta * (Pi_Y(1)*interp1(A, V_0(:,1), (1+r)*(A(i) + Y(j) - x)) ...\n",
    "                + Pi_Y(2)*interp1(A, V_0(:,2), (1+r)*(A(i) + Y(j) - x)) ...\n",
    "                + Pi_Y(3)*interp1(A, V_0(:,3), (1+r)*(A(i) + Y(j) - x)));\n",
    "\n",
    "            [C(i,j), V_1(i,j)] = fmincon(utility_function, ...\n",
    "                0.5*Y(j)+0.5*A(i),[],[],[],[],eps,A(i)+Y(j),[],opts); \n",
    "        end\n",
    "    end\n",
    "\n",
    "    % Update the value function and check for convergence\n",
    "    V_1 = -V_1; \n",
    "    V_save(:,:,iter) = V_1; \n",
    "    max_diff = max(max(abs(V_0 - V_1)));\n",
    "\n",
    "    if mod(iter, 10) == 1\n",
    "        fprintf('Iteration: %d, Max difference: %.8f\\n', iter, max_diff);\n",
    "    end\n",
    "\n",
    "    V_0 = V_1; \n",
    "    iter = iter + 1;\n",
    "end\n",
    "fprintf('Total iteration: %3i, Time: %2.6f \\n', iter, toc);"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cd80aa95-2b95-465b-9e12-239837bf71c5",
   "metadata": {},
   "source": [
    "The plotting section is the same. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "70ba1102-a932-4e1c-920b-990caf11b534",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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BDsAAABJEOwAAAAkQbADAACQBMEOAABAEgQ7AAAASRDsAAAAJEGwAwAAkIRR6QIAXygsLLx27doDDzwQFhamdC0AZEBXgTrxyRPQhbFjx549e7Z///65ublK1wJABnQVqBNLsZBfQUHB2bNnH3nkkbNnzx47dkzpcgBoHl0FqkWwg/y2b98uhHjttdeEEFu3blW6HACaR1eBahHsILn6+vqPPvpowIABjz32WHh4+Mcff1xWVqZ0UQA0jK4CNSPYQXI5OTlVVVX/8z//I4T48Y9/XFdX99e//lXpogBoGF0Fakawg+S2b99uMBieffZZIURMTIzRaGTdBEBb0FWgZgQ7yOzq1atffvnlU0891a1bNyFEx44dY2Jirl27lp+fr3RpADSJrgKVI9hBZrb1kXHjxtm32P79hz/8QamSAGgaXQUqx33sILNhw4aVlJQEBgY6brx165bBYNi7d+8DDzygVGEANIquApXjkycgrc8//7ykpKR///4PP/yw4/br168fP358+/btCxYsUKo2AFpEV4H6MWMHaSUkJOzevTsrKysiIsJx+7Vr155++ung4OC8vDyDgbMRALiLrgL14/8f5HTr1q1PP/30gQceaNB/hRAPPPBAZGTk119//cknnyhSGwAtoqtAEwh2kFNOTo7VanU8wdnRxIkThRBZWVm+LQqAhtFVoAkEO8jpL3/5ixBi7NixTr86evTorl27fvnllxcuXPBtXQC0iq4CTeAcOwAAAEkwYwcAACAJgh0AAIAkCHYAAACSINgBAABIgmAHAAAgCYIdAACAJAh2AAAAkiDYAQAASIJgBwAAIAmCHQAAgCQIdgAAAJIg2AEAAEiCYAcAACAJgh0AAIAkCHYAAACSINgBAABIgmAHAAAgCYIdAACAJP4/xp1rT+3Gv9MAAAAASUVORK5CYII="
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Plotting the value function for each income level\n",
    "figure(1)\n",
    "subplot(1,2,1)\n",
    "plot(A, V_1(:,1), A, V_1(:,2), A, V_1(:,3))\n",
    "legend('Y=0.5','Y=1.0','Y=1.5')\n",
    "xlabel('A')\n",
    "ylabel('V')\n",
    "\n",
    "% Plotting the optimal consumption level for each income level\n",
    "subplot(1,2,2)\n",
    "plot(A, C(:,1), A, C(:,2), A, C(:,3))\n",
    "legend('Y=0.5','Y=1.0','Y=1.5')\n",
    "xlabel('A')\n",
    "ylabel('C')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8faeb5a-7118-47b7-9fd5-f543e51aef6d",
   "metadata": {},
   "source": [
    "Now, there are many asset grid and several income levels, so we have a nested loop inside a loop. \n",
    "\n",
    "The computation takes much longer time than the case with constant income. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "40e6edc6-220c-4ce2-8fd2-6698ca25d649",
   "metadata": {},
   "source": [
    "_____________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "41404875-da8d-4ed4-a5b9-d856261b7da2",
   "metadata": {},
   "source": [
    "# 4. Optimal Consumption Solution 2: Speed Up with Vectorization"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "43749c49-9058-4620-8d38-55a176d97c77",
   "metadata": {},
   "source": [
    "____________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f7056ff-f710-476d-927b-99854f07450e",
   "metadata": {},
   "source": [
    "Now we solve the model with value function iteration which is vertorized."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0cbe6845-a5be-4385-b07d-a924d8447969",
   "metadata": {},
   "source": [
    "In preparation section, the key difference is how to initialize grids."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "074b48c3-84c5-4cf2-abca-7c18a9462dfc",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Preparation\n",
    "\n",
    "% Households\n",
    "ygrid = [0.5; 1.0; 1.5]; % Income levels\n",
    "pi_y = repmat([1/3, 1/3, 1/3], 3, 1); % Income probabilities  \n",
    "r = 0.02;                % The rate at which savings grow\n",
    "beta = 0.96;             % How much future utility is worth today\n",
    "\n",
    "% Asset grid\n",
    "agrid = (0:0.05:10)';    % Grid of asset from 0 to 10, increments of 0.05\n",
    "NA_grid = length(agrid); % Number of points in the asset grid \n",
    "NY_grid = length(ygrid);  % Number of income levels\n",
    "\n",
    "% Maximum iterations\n",
    "maxiter = 10^(3);        % maxium iteration\n",
    "iter = 1;                % iteration start from 1\n",
    "\n",
    "% Tolerance for convergence\n",
    "tol_in = 1e-4;           % tolerance\n",
    "max_diff = tol_in + 1;   % difference start\n",
    "\n",
    "% Initialize grids\n",
    "V_0 = zeros(NA_grid, NY_grid);  % current value functions\n",
    "[AIND,YIND] = ndgrid(1:NA_grid,1:NY_grid);\n",
    "Amat = agrid(AIND); \n",
    "Ymat = ygrid(YIND);\n",
    "% ndgrid creates matrices AIND and YIND for indexing purposes, \n",
    "% helping to construct matrices of asset and income levels.\n",
    "\n",
    "% Remember that in previous version, we use following code\n",
    "% to initialize value function and consumption\n",
    "% V_0 = zeros(N_A, N_Y);   % current value functions\n",
    "% V_1 = zeros(N_A, N_Y);   % next value functions \n",
    "% C = zeros(N_A, N_Y);     % consumption policy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6cb00c29-26ce-4e9c-a91d-2c60187e99c0",
   "metadata": {},
   "source": [
    "In iteration, we use Golden section method and a function written by Professor Jinhui Bai.\n",
    "\n",
    "Note that in previous version, we use two loops to check each income level (N_Y) and each asset grids (N_A), one by one.\n",
    "\n",
    "Here we use vectors, Amat(:)+Ymat(:), to avoid loops. In a single N_Y*N_A matrix, all income level and all asset grids are checked. \n",
    "\n",
    "Which means, we can check N_Y*N_A element everytime. \n",
    "\n",
    "So, the computation is much faster."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "234abca8-9476-4255-acdb-fc628e556a4b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "vfi loop, running...\n",
      "Iteration: 1, Max difference: 2.44234704\n",
      "Iteration: 51, Max difference: 0.00319405\n",
      "Iteration: 101, Max difference: 0.00041483\n",
      "vertorized vfi total iteration: 137, time: 0.366026 \n"
     ]
    }
   ],
   "source": [
    "%% Iteration\n",
    "disp('vfi loop, running...');\n",
    "tic\n",
    "while (max_diff > tol_in && iter < maxiter)\n",
    "\n",
    "    % Objective function for goldenx\n",
    "    objFun = @(x) log(x) + beta * sum(pi_y(YIND(:), :) .* ...\n",
    "        interp1(agrid, V_0, (1+r)*(Amat(:)+Ymat(:)-x),'spline'), 2);\n",
    "\n",
    "    % Optimization\n",
    "    [C, V_1] = GoldenVec(objFun, eps * ones(NA_grid * NY_grid, 1), ...\n",
    "        Amat(:) + Ymat(:), 1000, 1e-8);\n",
    "\n",
    "    V_1 = reshape(V_1, NA_grid, NY_grid);\n",
    "    max_diff = max(abs(V_0(:) - V_1(:)));\n",
    "    V_0 = V_1;\n",
    "\n",
    "    % Display progress every 50 iterations\n",
    "    if mod(iter, 50) == 1\n",
    "        fprintf('Iteration: %d, Max difference: %.8f\\n', iter, max_diff);\n",
    "    end\n",
    "\n",
    "    iter = iter + 1;\n",
    "end\n",
    "fprintf('vertorized vfi total iteration: %3i, time: %2.6f \\n',iter,toc);\n",
    "\n",
    "\n",
    "%% GoldenVec function by Professor Jinhui Bai\n",
    "function [x1, f1, exitflag] = GoldenVec(f, a, b, maxiter, tol, varargin)\n",
    "% GOLDENX computes the local maximum of a univariate function on an interval using Golden Search.\n",
    "% This function is a vectorized version of the Golden Search method.\n",
    "%\n",
    "% Inputs:\n",
    "%   f       : name of the function to be maximized. The function should be in the form fval=f(x).\n",
    "%   a, b    : left and right endpoints of the interval.\n",
    "%   maxiter : maximum number of iterations.\n",
    "%   tol     : convergence tolerance.\n",
    "%   varargin: optional additional arguments for the function f.\n",
    "%\n",
    "% Outputs:\n",
    "%   x1      : local maximum of the function f.\n",
    "%   f1      : function value at the local maximum.\n",
    "%   exitflag: condition of exit (1 = converged, 0 = maximum iteration reached).\n",
    "\n",
    "% Copyright (c) 1997-2002, Paul L. Fackler & Mario J. Miranda\n",
    "% paul_fackler@ncsu.edu, miranda.4@osu.edu\n",
    "\n",
    "% Revised by Jinhui Bai, January 15, 2005\n",
    "\n",
    "% Check if bracketing points have correct sizes and values\n",
    "if ~isequal(size(a), size(b))\n",
    "    error('Bracketing vectors must be of the same length.');\n",
    "end\n",
    "\n",
    "if any((b - a) <= 0)\n",
    "    error('Lower and upper interval points are not in the correct sequence.');\n",
    "end\n",
    "\n",
    "% Define the Golden Section coefficients\n",
    "alpha1 = (3 - sqrt(5)) / 2;\n",
    "alpha2 = 1 - alpha1;\n",
    "\n",
    "% Initialize section points and function evaluations\n",
    "d = b - a;                 % Length of the interval\n",
    "x1 = a + alpha1 * d;       % Left section point\n",
    "x2 = a + alpha2 * d;       % Right section point\n",
    "s = ones(size(x1));\n",
    "f1 = feval(f, x1, varargin{:});\n",
    "f2 = feval(f, x2, varargin{:});\n",
    "\n",
    "% Iteration until convergence or maximum iteration is reached\n",
    "iter = 0;\n",
    "while any(d > tol) && (iter <= maxiter)\n",
    "    d = d * alpha2;\n",
    "    i = f2 > f1;\n",
    "\n",
    "    x1(i) = x2(i);\n",
    "    f1(i) = f2(i);\n",
    "\n",
    "    d12 = (alpha2 - alpha1) * d;       % Distance between two section points\n",
    "    x2 = x1 + s .* (i - (~i)) .* d12;\n",
    "    s = sign(x2 - x1);\n",
    "    f2 = feval(f, x2, varargin{:});\n",
    "\n",
    "    iter = iter + 1;\n",
    "end\n",
    "\n",
    "% Return the larger of the two\n",
    "i = f2 > f1;\n",
    "x1(i) = x2(i);\n",
    "f1(i) = f2(i);\n",
    "\n",
    "% Define the exit flag\n",
    "if all(d <= tol)\n",
    "    exitflag = 1;\n",
    "else\n",
    "    exitflag = 0;\n",
    "end\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "bb67d7a5-f3e6-4675-8995-84c3f1b98387",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJ2CAIAAADqgjXlAAAAB3RJTUUH6QEdDQop0gmlrQAAIABJREFUeJzs3XlcVGX///GLYQBBxVCRxDQXZLoxLW9RqVxyqRSTW8slwy3LW1ORUrHcE70rw6WUzAQ1NXJXxCX7KuCGoZCBC2paKSaKhCQaimy/P873nt98YRgGGObMnHk9Hz16MNc5c87ncBh4e13nXMeupKREAAAAwPqp5C4AAAAApkGwAwAAUAiCHQAAgEIQ7AAAABSCYAcAAKAQBDsAAACFINgBAAAoBMEOAABAIQh2AAAACkGwAwAAUAiCHQAAgEIQ7AAAABSCYAcAAKAQBDsAAACFINgBAAAoBMEOAABAIQh2AAAACkGwAwAAUAiCHQAAgEIQ7AAAABSCYAcAAKAQBDsAAACFINgBAAAoBMEOAABAIdRyFwAAMJnk5OQff/wxLS3Nzc3N19f31VdfdXR0lLsoszp16lRGRkZAQIBKVSM9F9euXfv55591W9RqtVqt7ty5s5ubm/HbSUxMvHXr1oABA0RN1nzjxo2kpKTylj733HMeHh6m3WOFavoEQZQAAKxfampqx44dS/2Gb9CgwZYtW+QurWZ98skne/bs0b4cOnSoECI/P7+GdhcREVHe39M+ffrcvn3byO1Ika6ma960aZOBALBv3z6T71Ev3XNU0ycI9NgBgNU7fvz4Sy+9VFhYOGfOnCFDhnh7e+fk5Gzfvn327NlDhw51dHSUYoTybN68ecaMGbrxpWPHjvn5+TXdGzRhwoSuXbtqX96/f3/16tUHDhzo06fPTz/9VNmt1XTNL7/88ltvvVW2vX379jW0R12lzpF5TpAtI9gBgHXLy8sbMmTIo0eP4uPju3XrJjV6eHhMnDixY8eOzz333Pjx4/39/W1kTHbq1KlTp06t6b107tz5jTfe0G0ZPXp0+/btT58+HRcX17Nnz0ptraZr9vLyKlWtjMxzgmwZwQ4ArNuaNWtu3rw5adIkbarT6tSp07Bhw86ePZuSktKpUyepMSUlJTo6+o8//mjUqFFAQICfn592/RMnTty6deu11147ceLEjh077t696+fn98Ybb9SpU0e7zrVr13bu3Hn+/HmVStWzZ8/XXntNGxmPHz/+xx9/6GaI4uLirVu3NmvW7Pnnn5e2f/v27QEDBhw+fHjbtm0FBQUBAQGvvvqqVFVUVFROTo6fn9+YMWOkHh1tPXv37o2JiXFwcOjfv3+fPn2kjScmJv74449CCOn/UiUnTpxIT08fMmSItk+omsdrJLVa/a9//evcuXNXr17VNhrYta6yNQsh0tLStm/fnp6e3qhRoyFDhjz77LOnTp367bffunfv3rhxY923b968+YknnujSpUtla5YYc9aM+S6VLVjoO0fJycllD9Y858hWyD0WDACoFinoxMbGGrPy2LFjhRBqtdrd3V2tVgshRowYoV06dOjQOnXqTJs2TQjh6Ogo/el98skntZeO7dmzR2p3d3eX/rI2bdo0PT1dWqp73ZgkPz9fCDF06FDt9hs0aDBhwgQhhIuLi7T9GTNmrFq1SrfF399ft57AwECVStW1a9emTZsKIQICAgoKCkpKSkaMGKH75+zPP/8sKXMJVzWPtyzpGrv169eXXfTee+/pLjK8a8PX2E2aNKnUexcsWLBjxw7p26W702PHjklL9VYrDYBOmDChvMMpMe6sVfhd0ltwib5zVPZgTX6ObBzBDgCsmxSwioqKKlxz3rx50h/se/fulZSU/P3339Lf3enTp0srSH90mzRpcvLkyZKSkvz8fGmFWbNmSSu4u7v7+PjcuXNHerlu3TohxNixY6WXxkQEafupqaklJSUZGRmNGzeWYuKRI0dKSkru3Lnzz3/+UwiRlJSkXd/d3f3s2bPSFqZPn65bjxRcNm3apN2jbm6o/vGWVV6wu3XrltSRdunSJWN2bSDYLV++XMqv0vf57t270vV8R44cadCgwZNPPqm737ffflulUv3xxx96q5W+PwEBAUfK0J5E489aed+l8go+duxY2XNU6mBr4hzZOIIdAFg3lUrl6OhY4WpFRUWurq5NmzaVuru0nnrqKbVa/eDBg5L//hHVzUkZGRlCiNdee63kv3/vtd1pkvDw8Pj4eOlrIyPCxo0btStIF/UvXbpU27JmzRohhHQzr7R+qRTl4+NTp04dKcgaCHbVP169pGDXq1evCToCAwNdXV2FEG+//baR32oDwc7Ly6tOnTpS0JGcPXvW29t75cqVkydP1gamkpKSgoICFxeXHj16lFetgbtitbfEGnnWDHyXDBRcYjDY1dA5snFcYwcA1k2lUhUXF1e42okTJ3Jzc19//XVptEsrICDgs88+i4uL8/f3l1peeukl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W1t/f39SUzHEwYMHc3NzL7300s2bN7/wwgvNzc3OYceJioqKnTt3PvTQQ0PWXVkAI+EoNkPff/99COGqq64avHjllVf29/f39PRMmTIlobn4k0OHDk2YMGH+/Pl5eXm9vb1vvfXWhg0btmzZkt4NIikrV64cdt2VBTASduwy1NvbG0IY8r2xBQUF6acYD/bv35+fn799+/a9e/e2tra+/PLLR44cqaysTHouzsuVBTASduwyNPCNsUPOhs6cORNCyM31tzpefPLJJ729vemv912wYMGXX3759ttvHz582I1345MrC2Ak7Nhl6Oqrrw4hnDx5cvBiW1tbCMGHMowr6aobUFpaGkI4evRoQuNwAa4sgJEQdhm64oorcnNzB+4HSvvtt99mzJgx5BSJpHR1db377rsHDhwYvPjHH3+EEKZOnZrQUFyAKwtgJIRdhlKp1O23375nz570uyxPnjz52Wef3XPPPckORtoll1yyatWq9evXD15sbGwsKCi46aabkpqKv+bKAhgJYZe5J554orOzc/ny5T/99NPhw4efeuqpVCr1yCOPJD0X/5GXl/fwww9//vnn69at6+rqOnbs2LPPPvvdd99VVVWlUv7PH79cWQAZm3Du3LmkZ/gHa25ufv7557u7u0MIl19++YsvvlhWVpb0UPxXX1/funXrNm3adPbs2RDCZZddtmLFikWLFiU9F/9VVlZWUlLy2muvDV50ZQFkRtiNVH9//6FDh0IIxcXFSc/C8Pr6+vbt2zdt2rRrr7026Vm4WK4sgAwIOwCASLjTCAAgEsIOACASwg4AIBLCDgAgEsIOACASwg4AIBLCDgAgEsIOACASuUkPAGPhwIEDHR0dhYWF119/fdKzAEC2+OYJ/ieUl5e3t7fPnj27qakp6VkAIFscxRK/ffv2tbe333jjje3t7d98803S4wBAtgg74ldfXx9CWLVqVQhh69atSY8DANki7IhcX1/fe++9d8MNN9xyyy0lJSXvv//+iRMnkh4KALJC2BG5xsbG06dP33fffSGE+++//+zZs9u3b096KADICmFH5Orr61Op1L333htCWLhwYW5urtNYAGIl7IjZsWPH9u7de8cdd0yfPj2EMGXKlIULF3Z0dOzZsyfp0QBg9Ak7YjZw6rpo0aL0ysDPmzZtSmokAMgen2NHzG677bbOzs78/PzBi93d3alU6uOPPy4sLExqMADIBt88QbS++OKLzs7O2bNnz5o1a/D68ePHv/322/r6+uXLlyc1GwBkgx07olVZWbljx466urrS0tLB6x0dHXfddVdBQcHu3btTKXcjABAP/6oRp+7u7o8++qiwsHBI1YUQCgsLy8rKfv755w8//DCR2QAgS4QdcWpsbOzv7x/8tonBFi9eHEKoq6sb26EAILuEHXF65513Qgjl5eXDPjt//vxp06bt3bv3hx9+GNu5ACCL3GMHABAJO3YAAJEQdgAAkRB2AACREHYAAJEQdgAAkRB2AACREHYAAJEQdgAAkRB2AACREHYAAJEQdgAAkRB2AACREHYAAJEQdgAAkRB2AACREHYAAJEQdgAAkRB2AACR+D/7GGZCqPqztAAAAABJRU5ErkJggg=="
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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"
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Plotting\n",
    "C = reshape(C, NA_grid, NY_grid);\n",
    "\n",
    "figure(1);\n",
    "subplot(1,2,1);\n",
    "plot(agrid, V_1(:,1), agrid, V_1(:,2), agrid, V_1(:,3));\n",
    "xlabel('A');\n",
    "ylabel('V');\n",
    "legend(arrayfun(@(y) sprintf('Y=%.1f', y), ygrid,'UniformOutput',false));\n",
    "\n",
    "subplot(1,2,2);\n",
    "plot(agrid, C);\n",
    "xlabel('A');\n",
    "ylabel('C');\n",
    "legend(arrayfun(@(y) sprintf('Y=%.1f', y), ygrid,'UniformOutput',false));"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64cd4d87-d504-4df1-a3b3-393486a25bb4",
   "metadata": {},
   "source": [
    "__________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "17d59f04-ee99-4562-92d5-8ad362bd1a0c",
   "metadata": {},
   "source": [
    "# 5. Endogenous Grid Method"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "30619a9b-ceea-4f94-a32d-e2a4a98b0105",
   "metadata": {},
   "source": [
    "_________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3cb62c3a-5b38-4826-b3e2-6283ec8d5352",
   "metadata": {},
   "source": [
    "We need to find the consumption policy function (blue arrow) and asset policy function (red arrow).  \n",
    "\n",
    "That is, given $A_t$, we need to know $C_t$ and $A_{t+1}$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb526970-49b3-4177-8583-a3c5510e2415",
   "metadata": {},
   "source": [
    "<div style=\"text-align: center;\">\n",
    "    <img src=\"./Figures/EGM_1.jpg\" width=\"500\"/>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6cfaea3e-9a2c-4d3a-878f-aa89b3a56151",
   "metadata": {},
   "source": [
    "We have a guess value for $C_t$. Or a guess value for $A_t$, they are connected by budget constraint.\n",
    "\n",
    "With Euler equation, we solve for an endogenou $C_{endo}$. And with budget constraint, we ge $C_{endo}$.\n",
    "\n",
    "The calculation is in the black arrows. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "763ac537-b7fe-4b47-84a2-7be8638a70cc",
   "metadata": {},
   "source": [
    "<div style = 'text-align: center'>\n",
    "    <img src = './Figures/EGM_2.jpg' width = '700'>\n",
    "</div>"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "82e237ff-3680-495b-94a2-479afd5a208b",
   "metadata": {},
   "source": [
    "Now we have relation between $A_{endo}$ and $A_{guess}$. \n",
    "\n",
    "We can get a new guess value $A_{guessnew}$ with this relation using interpolation, and a new guess value $A_{guessnew}$ by budget constraint.\n",
    "\n",
    "Then iterate, until two guess values are close enough.  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98866194-5dd1-4dd4-a60f-1841b2105935",
   "metadata": {},
   "source": [
    "<div style = 'text-align: center'>\n",
    "    <img src = './Figures/EGM_3.jpg' width = '500'>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0adbbeb-dfbd-4b46-bba0-41009901d04d",
   "metadata": {},
   "source": [
    "Sometimes, people interpolate the consumption function. \n",
    "\n",
    "Using the relation betwee $C_{endo}$ an $A_{endo}$, we can get a new guess valu $C_{guessnew}$ starting fro $A_{guess}$, and then ge $A_{guessnew}$ by budget constraint.\n",
    " \n",
    "Then iterate, until new guess values are close enough. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9cabf16a-30cc-4e74-aaaf-43e7e4b6c904",
   "metadata": {},
   "source": [
    "<div style = 'text-align: center'>\n",
    "    <img src = './Figures/EGM_4.jpg' width = '500'>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fea4a711-3dc5-4538-b7f8-ad0943013692",
   "metadata": {},
   "source": [
    "You may ask why we use backward induction, why not forward induction like in the graph. \n",
    "\n",
    "The main reason is that,$C_{endo}$ can be written explicitly in backward induction, which is computationally fast.\n",
    " \n",
    "If we use forward induction, we still need to solve a nonlinear function. "
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "6dec3ccd-b65a-4036-b419-d0edc4b89dc0",
   "metadata": {},
   "source": [
    "<div style=\"text-align: center;\">\n",
    "    <img src=\"./Figures/EGM_5.jpg\" width=\"500\">\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b812626-20f4-479f-9e3c-faed5d02a813",
   "metadata": {},
   "source": [
    "_______________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb13ed10-dc61-4df7-aa8f-cfcce6e9f980",
   "metadata": {},
   "source": [
    "# 6. Optimal Consumption Solution 3: Speed Up with Endogenous Grid Method"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19f30b89-bf79-4ff5-a466-813b8c65a394",
   "metadata": {},
   "source": [
    "____________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7289125d-6169-4238-874e-2774376fdf63",
   "metadata": {},
   "source": [
    "In preparation section, it's the same."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "ccfcc062-ba1d-4c53-b73f-a219bee1f8cb",
   "metadata": {},
   "outputs": [],
   "source": [
    "%% Preparation\n",
    "\n",
    "% Households\n",
    "ygrid = [0.5; 1.0; 1.5]; % Income levels\n",
    "pi_y = repmat([1/3, 1/3, 1/3], 3, 1); % Income probabilities  \n",
    "r = 0.02;                % The rate at which savings grow\n",
    "beta = 0.96;             % How much future utility is worth today\n",
    "\n",
    "% Asset grid\n",
    "agrid = (0:0.05:10)';    % Grid of asset from 0 to 10, increments of 0.05\n",
    "NA_grid = length(agrid); % Number of points in the asset grid \n",
    "NY_grid = length(ygrid);  % Number of income levels\n",
    "\n",
    "% Maximum iterations\n",
    "maxiter = 10^(3);        % maxium iteration\n",
    "iter = 1;                % iteration start from 1\n",
    "\n",
    "% Tolerance for convergence\n",
    "tol_in = 1e-4;           % tolerance\n",
    "max_diff = tol_in + 1;   % difference start\n",
    "\n",
    "% Initialize grids\n",
    "V_0 = zeros(NA_grid, NY_grid);   % current value functions\n",
    "[AIND,YIND] = ndgrid(1:NA_grid,1:NY_grid);\n",
    "Amat = agrid(AIND); \n",
    "Ymat = ygrid(YIND);\n",
    "% ndgrid creates matrices AIND and YIND for indexing purposes, \n",
    "% helping to construct matrices of asset and income levels.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0533292a-02ae-4728-b341-00a8d7fd06b9",
   "metadata": {},
   "source": [
    "Here in iteration, we don't have to deal with optimization problem, just pure iteration. \n",
    "\n",
    "We have: \n",
    "\n",
    "    interp1(a0(:,i),c0(:,i),Amat(:,i),'spline')\n",
    "\n",
    "a0 and c0 is endogenous changed, this is why it's called endogenous grid method.\n",
    "\n",
    "Remember that in Value function iteration, the code is:\n",
    "\n",
    "    interp1(agrid, V_0, (1+r)*(Amat(:)+Ymat(:)-x)\n",
    "\n",
    "The grids are exogenous there. \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e9254e4c-f45d-4bc9-bb9a-94cffc7e02dc",
   "metadata": {},
   "source": [
    "\n",
    "Also, in EGM (endogenous grid method), interpolation is used to get optimal policy function,\n",
    "\n",
    "while, in VFI (value function iteration), interpolation is used to fit data to existing exogenous grid, optimal value function is achieved by fmincon or other opizationmal function. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "4607ece8-2190-4545-ba30-1af0685d1734",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "endogenous grid loop, running...\n",
      "Iteration: 1, Max difference: 0.64808303\n",
      "Iteration: 51, Max difference: 0.00021198\n",
      "endogenous grid total iteration:  56, time: 0.019076 \n"
     ]
    }
   ],
   "source": [
    "%% Iteration\n",
    "\n",
    "% Initial guess on future consumption.\n",
    "cp0 = r*Amat+Ymat;  % cp is consumption projected\n",
    "cpnext = cp0;\n",
    "\n",
    "disp('endogenous grid loop, running...');\n",
    "tic\n",
    "while (max_diff > tol_in && iter < maxiter)\n",
    "    % Derive current consumption and current assets    \n",
    "    % Given guessed future consumption, we can get current consumption\n",
    "    % and current asset, thus their mapping relation,\n",
    "    % or consumption policy function.\n",
    "    c0 = (beta*(1+r)*(cp0.^(-1))*pi_y').^(-1); % from Euler equation\n",
    "    a0 = Amat/(1+r)+c0-Ymat;         % from budget constraint\n",
    "    V = log(c0);\n",
    "\n",
    "    % Update the guess for the consumption decision\n",
    "    % Interpolation conditional on productivity realization\n",
    "    % use default option for outbounders (no extrapolation)\n",
    "    for i = 1:3\n",
    "        cpnext(:,i)  = interp1(a0(:,i),c0(:,i),Amat(:,i),'spline');\n",
    "    end\n",
    "\n",
    "    % Consumption decision rule for a binding borrowing constraint\n",
    "    idcon = (Amat+Ymat-cpnext)<0;\n",
    "    cpnext(idcon) = Amat(idcon)+Ymat(idcon);\n",
    "\n",
    "    % Compute and display distance\n",
    "    max_diff = max(abs(cpnext(:)-cp0(:)));\n",
    "    if mod(iter,50) == 1\n",
    "        fprintf('Iteration: %d, Max difference: %.8f\\n', iter, max_diff);\n",
    "    end\n",
    "\n",
    "    % Update iteration parameters\n",
    "    iter = iter+1;\n",
    "    cp0 = cpnext;\n",
    "    c0 = cpnext;\n",
    "end\n",
    "fprintf('endogenous grid total iteration: %3i, time: %2.6f \\n',iter,toc);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "abdf68d3-94ed-4b69-b226-f1ebc1a2a540",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJ2CAIAAADqgjXlAAAAB3RJTUUH6QEdDQsF+cr4DwAAIABJREFUeJzt3XuUlWWh+PHHYWAAAQ8MhMDRuKTj5QiImqIiWimFRSQKFYWXShHGG6YhmlBLIBNFKAdMWekJFgaIqYVjKB4vC0GhCDoVYKCHBS6aBpRQLiOb3x/b3zQOMMwMe+9373d/Pss/mHdf5sFxzf76XPY+av/+/QEAgNxXEPUAAABIDWEHABATwg4AICaEHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAIgJYQcAEBPCDgAgJoQdAEBMCDsAgJgQdgAAMSHsAABiQtgBAMSEsAMAiAlhBwAQE8IOACAmhB0AQEwIOwCAmBB2AAAxIewAAGJC2AEAxISwAwCICWEHABATwg4AICaEHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAIgJYQcAEBPCDgAgJoQdAEBMCDsAgJgQdgAAMSHsAABiojDqAWSjqqqqpUuX7ty5s3nz5n379m3ZsmXUIwIAODxhV9uCBQsmTZr0wQcfJL8sLCy8+eabv/e970U7KgCAw7IU+wmLFy++8847u3btOmfOnNWrVz/55JO9e/eeMmXKnDlzoh4aAMBhHLV///6ox5BFLrvssrVr17722mtt27ZNXvnwww/79et3zDHHLFmyJNqxAQDUzYzdJxQUFJx33nnVVRdCaNmy5RlnnLF58+YIRwUAUB9m7A4jkUj069dv165df/jDH6IeCwBAXczYHcZjjz32z3/+84orroh6IAAAh2HGri6vvvrqyJEjO3bs+Jvf/KZNmzZ13LOkpCRjowIA6mnt2rVRDyGjvN3JIS1evPiWW25p06bNrFmz6q66pHz7TycLlZSU+ClEzk8hG/gpZAM/hWyQh9MulmIP7uGHHy4tLf3Upz61YMGCbt26RT0cAIDDM2N3EHfcccfChQt79eo1Y8aM4uLiqIcDAFAvwq62G2+88fnnn//CF77wwAMPFBUVRT0cAID6EnafUFZW9vzzzw8cOHDq1KlRjwUAoGGciv23ysrK/v37V1VVff7znz9wrm7KlClNmjQ51GNtkgWAbJOHr85m7P7tjTfeqKqqCiG8+OKLB97605/+tI6wAwCInLD7ty996Utf+tKXoh4FAEAjebsTAICYEHYAADEh7AAAYkLYAQDEhLADAIgJYQcAEBPCDgAgJryPHQA0UklJSdRDyDv59kkSDSXsAKDxdEYmKenDshQLABATwg4AICaEHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAD52zTXXtG/ffvbs2QfeNHv27Pbt29999931fKp33nlnxIgRxxxzzLHHHnv99ddXVFTUcecJEyZ87ZPuv//+xvwF8t5R+/fvj3oMcVBSUuI9KgHyTfx++VdUVJx88sn79u1bt25dhw4dal0vLi7+05/+1Lx58/o8z2mnnda6devvf//7H3744eTJk4uLi//4xz8e6rEtWrTo2LHjqaeeWn2lX79+Y8eOrXW3hv4Lj98P6LB88gQA8LEOHTqUlZUNGzZs1KhR8+fPr74+cuTI7du3l5eX16fqQgiTJk2qrKz84x//2KlTpxDC5z//+V69ej344IMHtloI4d133929e/ekSZO++c1vpuovkrcsxQIA/zZ06NDLLrtswYIFCxcuTF6ZN2/ewoULx48ff+aZZ9bzSebMmTNkyJBk1YUQevbs2b9//1//+tcHvfPy5ctDCCeeeOIRjx1hBwB80syZM4uLi0tLS3fs2LF9+/bS0tI+ffrU3F131CGMHj06hLBjx46KiopTTjml5nN+5jOfWb16dSKROPDbrVq1qrCwsF27dtOmTbvpppueeOKJjz76KN1/x7iyFAsAKXPUrUuiHkLD7L//cwderF6QHT9+/O7du99///3XXnut5h0ef/zxgz5bctbtjTfeCCF079695k1du3ZNJBK7d+9u2bJlrUetWbOmoKCgpKSkVatWe/funT59+o9+9KMlS5ZUT/hRf8IOAFLmoJ2Ui4YOHTp//vzp06cnEonp06fXWicdMWJEHY/du3dvCKGw8BONceyxx4YQ9uzZc2DYrVy5sri4uLy8vGfPniGEefPmfeMb37jiiitq1ST1IewAgIMoKytbuHDhWWeddcMNN9S6aefOnQd9SGFhYfPmzZs1axZCqLXqumvXrhBC06ZND3zU22+/vXfv3uSjQghDhw79/e9/P2vWrHXr1tl411D22AEAB9GhQ4fCwsIuXboceFPrQ7j11ltDCCeccEIIYfv27TUfsmbNmhDCoQ7VVldd0gUXXBBCeOutt1L0V8kjZuwAgIZ56qmnDno9ua/uuOOOKywsfPPNN2veVFlZ2bFjx1rrsyGErVu3Pvfcc7179+7du3f1xffffz+E0KZNmxSPOw8IOwCgYQYPHlzHrQUFBQMHDnzhhRc++uijZMlt37590aJF11xzzYF3Pvroo7/zne9ccsklzz33XPXFOXPmdOrU6dxzz035yGPPUiwAkGJ33nnn5s2br7jiik2bNq1bt27IkCEFBQXJhdoQwiuvvHLppZcuWbIkhNCqVauRI0eWl5ePGzdu69atGzZs+Na3vrV8+fIpU6YUFKiUBjNjBwCk2Gc/+9m5c+eWlpYef/zxIYQuXbo8++yz1W+AsmXLlkWLFg0bNiz55bRp01q2bHnfffdNnjw5hNChQ4fHH3/cp1A0js+KTY08/DQ6APzyzzCfFXtYJjkBAGJC2AEAxISwAwCICWEHABATwg4AICaEHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAD52zTXXtG/ffvbs2QfeNHv27Pbt2999990Nfc7bbrvtsB/8+s4774wYMeKYY4459thjr7/++oqKioZ+F5KEHQDwsXvvvTeEcMMNN9RKq4qKiptvvrm4uHjcuHENesKHHnpoypQpu3btquM+FRUVZ5999uuvv/7Tn/70Bz/4wZNPPnnBBRfs3r27EeNH2AEAH+vQoUNZWdl77703atSomtdHjhy5ffv2OXPmNG/evJ5PtXPnzmuvvba0tPSw95w0aVJlZeUrr7xy3XXX3XLLLS+88MLf/va3Bx98sDF/gbwn7ACAfxs6dOhll122YMGChQsXJq/Mmzdv4cKF48ePP/PMM+v/PN27d58zZ87MmTOLi4vrvuecOXOGDBnSqVOn5Jc9e/bs37//r3/968aNP88JOwDgE5I1VlpaumPHju3bt5eWlvbp06fm7rqjDmH06NHV9xk+fPhbb7113XXX1f29duzYUVFRccopp9S8+JnPfGb16tWJRCK1f698UBj1AAAgPtZd3jnqITTYiQu21LqSXJAdNmzY+PHjd+/e/f7777/22ms17/D4448f/KlOPLH6z1OnTq3Pd3/jjTdCCN27d695sWvXrolEYvfu3S1btqzPk1BN2AFAyhwYSTlq6NCh8+fPnz59eiKRmD59es1iCyGMGDEiVd9o7969IYTCwk8EybHHHhtC2LNnj7BrKEuxAMBBlJWVhRDOOuusG264odZNOw+hEUdZmzVrFkKoteqa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mzZtatq06eDBg2tePO200+r4Ruu+PMORWAAgWjEPu9mzZ2/btu3BBx/s379/CGHAgAEFBQWlpaW/+tWvRo0adahHrVixom/fvvfcc08GRwoAcKRifniivLy8qKhowIAB1VcuvvjioqKi8vLyQz1k06ZNVVVVPXr0yMgAAQBSJs4zdolEYv369WeccUat0xJ9+vRZvnx5IpE46CmKv/zlLyGE008/fcWKFX/7299atGhx8skn170nDwAgG8Q57D744INEIlFcXFzr+jHHHJNIJPbs2dOiRYsDH7VmzZoQwsSJE7du3Vp98atf/erkyZObNGlSx7crKSlJxag5In4K2cBPIRv4KWQDPwUyL85h995774UQmjVrVut6cqJu48aNB52H27hxYwjh1FNPnTVrVteuXf/85z9PnDjx6aefbtOmzV133XWo77X//s+F+51+AgCiFOc9ds2bN6/j1kNNv40YMeK+++6bMWPGCSec0LRp09NPP/2Xv/xlu3bt5s6du2PHjvSMFAAgBeIcdq1atQoh7N27t9b1ffv2hRCOP/74gz7q7LPPHjRoUM0rrVu3Pv/88z/66KOVK1emZ6QAACkQ57Br0aJFYWFhZWVlreuVlZWFhYUH3WB3KMnPnEgkEqkcHwBASsU57EIIvXr1WrVqVc0gSyQSq1at6tWr10HvX1VVNXz48BtvvLHW9W3btoUQunfvnr6hAgAcoZiH3YABA6qqqubPn199Zf78+R999FHNd7arqWnTpu++++7ixYuTRyiS1q9f/9JLL5166qndunVL+4gBABqryYQJE6IeQxqdfPLJv/vd75577rmWLVt++OGHS5YsmTx58n/+539OmjSpsLAwhLBixYqLLrpo5cqV1R8g1rlz59/97neLFy/+j//4j+3bty9fvvz222/fv3//zJkz27dvH+nfBgCgLkft378/6jGk15YtW77//e9Xn3s444wzpk6d2rFjx+SXK1asGD58eN++fR977LHqhzz//PM/+clPtmzZkvyypKTknnvu6dmzZ2YHDgDQMPEPu6SKior169f36NGjOukO6+9///vWrVsb9BAAgAjlS9gBAMRezA9PAADkD2EHABATwg4AICaEHQBATBRGPYDclkgkli1btn379rZt255zzjkFBUI5AlVVVUuXLt25c2fz5s379u3bsmXLqEeU1yoqKlatWtWnT5/i4uKox5Kn1q9fv2HDhoKCgt69e3fo0CHq4eSjffv2vfbaazt37mzVqtX555/fpEmTqEeUX5YuXXrccccdd9xxta7nyUu2sGu81atX33zzzZs3b05+2aVLl5///OennHJKtKPKNwsWLJg0adIHH3yQ/LKwsPDmm2/+3ve+F+2o8tlNN920cuXKX/7yl+eee27UY8k7FRUVt9122+uvv578sqCgYOTIkTfddFO0o8o3r7766tixY//5z38mv2zfvv1PfvKTfv36RTuq/LFs2bKrr7564sSJtcIuf16y45mrGbBjx47rrrtu165dv/jFL1avXj19+vRdu3Zdd911//rXv6IeWh5ZvHjxnXfe2bVr1zlz5qxevfrJJ5/s3bv3lClT5syZE/XQ8tTDDz9c/WbgZNi+ffuuueaaN998c9y4catXr160aNFnP/vZsrKyJ598Muqh5ZFNmzaNHj26oKDg0Ucf/fOf//zf//3fBQUF119/fc2PqSR9li9fPnr06AOv59VLtrBrpNmzZ2/btu3uu+/u379/UVHRgAEDfvzjH//jH//41a9+FfXQ8siMGTMKCwtnzZp15plnFhUV/dd//dcjjzzSqlWrWbNmRT20fPSXv/zlwQcfbNu2bdQDyVNz585dt27d7bfffuWVVxYVFfXo0eOBBx4oLCz0/zmZ9Jvf/GbPnj233357v379mjZtevbZZ48bN66qqmrBggVRDy3mqqqqysrKrrrqqj179hx4a169ZAu7RiovL0/+x1F95eKLLy4qKiovL49wVPmmoKDgvPPOq1kSLVu2POOMM6on28mYPXv2jBkzpk+fPgMHDox6LHnqt7/9bbt27b797W9XXykuLp41a9btt98e4ajyTfKXT80NpieffHIIoaKiIrIx5YfRo0dPmzbtwgsv/OEPf3jgrXn1ki3sGiORSKxfv75nz561tl726dNn/fr1iUQiqoHlmwULFvziF7+oeSWRSPzv//7v0UcfHdWQ8ta9995bUVHxwAMPRD2QPJVIJP70pz8l94Pv27fv1VdfXbp06b59+84555xzzjkn6tHlkfPOOy+E8Oabb1ZfWbx4cQihV69ekY0pP5x00kmPPvrojBkz2rVrV+umfHvJdniiMT744INEInHgob9jjjkmkUjs2bOnRYsWkQyMxx577J///OdVV10V9UDyy0svvTRnzpz77rvPBytH5f/+7/8SiUSbNm3mzp1777337tq1K4TQqlWru+6662tf+1rUo8sjX/nKV1599dWysrINGzZccMEFy5Yte+aZZwYMGPCNb3wj6qHF3JgxYw51U769ZAu7xnjvvfdCCM2aNat1Pfl/Axs3bozlQZvs9+qrr95///1dunQ56OZZ0qSysnLcuHFf/OIXBw0aFPVY8temTZtCCC+99NJTTz01cuTIk08+ubKycvr06WPHjm3WrNmll14a9QDzyIABA1auXFleXp5c5uvYseOQIUPi+s4aOSHfXrL9p9YYzZs3r+NWb1kUicWLF19//fVt2rSZNWtWmzZtoh5OHrnjjjsKCwsnTJgQ9UAIW7du/dnPfjZq1KiLLrro8ssvf+KJJwoLC++///6ox5VH5s6dO2rUqE9/+tPl5eVr164tLy8/6aSTrr322tmzZ0c9tPyVby/Zwq4xWrVqFULYu3dvrev79u0LIRx//PERjCm/Pfzww6WlpZ/61KcWLFjQrVu3qIeTR+bOnfvyyy9PmjTJYdhoJWcjOnfu3L9//+qLnTt3/vznP79582Y79zMjkUhMmTKlY8eODz30UPIXUbdu3WbMmNGtW7cpU6YkXyDIvHx7ybYU2xgtWrQoLCysrKysdb2ysrKwsDBmq/XZ74477li4cGGvXr1mzJjh0w4y7KWXXgohfPe73611/eqrrw4hLFu2TPBlRp8+fUIIJ5xwQq3ryQ9ieeedd3wERQa88847O3fuvOiii2q+CjRp0uT0009fuHDh8uXLvWt3JPLtJVvYNVKvXr1WrVqVSCSqd04kEolVq1Y5+pRhN9544/PPP/+FL3zhgQceKCoqino4eee888771Kc+VfPKypUrk9vGO3bs6CeSMU2bNu3cufOyZctq/lIKIXz44YfBkcxMSW4CqaqqqnU9OTMUv4DIIXn1ki3sGim5PXb+/PnDhg1LXpk/f/5HH31U821ySLeysrLnn39+4MCBU6dOjXoseerKK6+sdeXHP/7xhg0brr76apMTGTZ48OCysrKav5Q2b9784osvnnHGGU2bNo12bHmiuLj4+OOPf+GFF7Zs2dK5c+fkxR07drz++uvt2rWLZUPkirx6yRZ2jfT1r3999uzZEydO3L179wknnLB+/fr77rvv+OOP//rXvx710PJFZWVlWVlZCGHPnj233HJLrVunTJkSvy2xUIerr7766aefTr6ffu/evd97773k//CMHTs26qHlkbvuuuvaa68dPnx4aWlpp06dKisrZ86c+Y9//GPKlCkOxkYor16yhV0jFRUVPf7449///vcnTZqUvHLGGWdMnTrV2lPGvPHGG8kljxdffPHAW3/6058KO/JKmzZtfv3rX48fP/7nP/958kqXLl0eeeSRnj17RjuwvNK/f/9HH310woQJ48aNS17p3Lnzgw8++KUvfSnageW5vHrJPmr//v1RjyG3VVRUrF+/vkePHt6aFcgG//rXv9asWdOxY8cePXpEPZb8tXHjxnfffbdTp07O6WeVfHjJFnYAADFhyR8AICaEHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAIgJYQcAEBPCDgAgJoQdAEBMCDsAgJgQdgAAMSHsAP6tsrLy2muvvfbaa19++eWoxwLQYIVRDwAgizz99NPJpNu5c2f//v2jHg5Aw5ixA/i3J598sqioqH///itXrvz73/8e9XAAGkbYAXxs1apVb7311kUXXXTJJZeEEObOnRv1iAAaRtgBfOzJJ58MIVx44YUDBw4sLCxcsGBBVVVV1IMCaABhBxBCCFVVVc8++2xRUdGXv/zlli1bXnLJJbt27Vq4cGHU4wJoAGEHEEIIv/3tb3ft2nXppZc2bdo0hHDFFVcEq7FArhF2ACGEsGDBghDCkCFDkl+ee+65HTt2/Otf/7p69epIxwXQAMIOILz99tsrVqzo0qXLmWeeWX1x8ODBIYR58+ZFNy6AhvE+dgDh6aefDiF06tQpOW+XtG/fvhDCU0899YMf/KB169aRDQ6g3o7av39/1GMAiNgFF1ywdevWQ906bty4K6+8MpPjAWgcYQfku1dfffW73/1uSUnJ2LFja920YsWKhx56qFu3buXl5ZGMDaBBLMUC+W7+/PkhhCFDhpx77rm1bjrrrLMeffTRjRs3Ll++/Oyzz45idAAN4PAEkNe2b9++ePHigoKCgQMHHnhr06ZNBw0aFEJ44oknMj40gAYTdkBee+aZZxKJxPnnn9+hQ4eD3uGyyy4LIZSXl1dUVGR2aAANJuyAvJY8BnvppZce6g59+vTp1q1bIpFIrtgCZDOHJwAAYsKMHQBATAg7AICYEHYAADEh7AAAYkLYAQDEhLADAIgJYQcAEBPCDgAgJoQdAEBM/D8w1JnP/6tzywAAAABJRU5ErkJggg=="
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%% Plot results\n",
    "figure(2);\n",
    "\n",
    "plot(agrid, cp0);\n",
    "xlabel('A');\n",
    "ylabel('C');\n",
    "legend(arrayfun(@(y) sprintf('Y=%.1f', y), ygrid,'UniformOutput',false));"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cd6b219-64ae-48c6-9ec9-a99a0317be04",
   "metadata": {},
   "source": [
    "___________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ce5881f-2154-4f7c-9c23-a2ea0bf94def",
   "metadata": {},
   "source": [
    "# Reference"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72a058eb-043e-4318-ad47-b729f9f59a32",
   "metadata": {},
   "source": [
    "______________________________________________________________________________________________________________________________________________________"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf529824-e76e-46b7-a5c0-261e37bcbaf4",
   "metadata": {},
   "source": [
    "1. Benjamin Moll,\n",
    "   \"Solving the Income Fluctuation Problem: Numerical Dynamic Programming\",\n",
    "   https://benjaminmoll.com/wp-content/uploads/2021/04/Lecture2_EC442_Moll.pdf"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "185b3f58-cdd7-43c3-82ab-57e5866f3c73",
   "metadata": {},
   "source": [
    "2. Benjamin Moll, \"Heterogeneous-Agent Models and Methods\", https://benjaminmoll.com/wp-content/uploads/2021/04/STEG_course.pdf"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "MATLAB Kernel",
   "language": "matlab",
   "name": "jupyter_matlab_kernel"
  },
  "language_info": {
   "file_extension": ".m",
   "mimetype": "text/x-matlab",
   "name": "matlab"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
