楼主: tulipsliu
1813 14

[学科前沿] [DSGE] NEWS AND NOISE SHOCKS IN HOUSING MARKET [推广有奖]

11
tulipsliu 在职认证  发表于 2021-5-17 15:16:03
  1. ## Basic RBC model with full depreciation
  2. #
  3. # Jesus Fernandez-Villaverde
  4. # Haverford, July 26, 2013

  5. function main()

  6.     ##  1. Calibration

  7.     aalpha = 1/3     # Elasticity of output w.r.t. capital
  8.     bbeta  = 0.95    # Discount factor

  9.     # Productivity values
  10.     vProductivity = [0.9792 0.9896 1.0000 1.0106 1.0212]

  11.     # Transition matrix
  12.     mTransition   = [0.9727 0.0273 0.0000 0.0000 0.0000;
  13.                      0.0041 0.9806 0.0153 0.0000 0.0000;
  14.                      0.0000 0.0082 0.9837 0.0082 0.0000;
  15.                      0.0000 0.0000 0.0153 0.9806 0.0041;
  16.                      0.0000 0.0000 0.0000 0.0273 0.9727]

  17.     # 2. Steady State

  18.     capitalSteadyState = (aalpha*bbeta)^(1/(1-aalpha))
  19.     outputSteadyState = capitalSteadyState^aalpha
  20.     consumptionSteadyState = outputSteadyState-capitalSteadyState

  21.     println("Output = ",outputSteadyState," Capital = ",capitalSteadyState," Consumption = ",consumptionSteadyState)

  22.     # We generate the grid of capital
  23.     vGridCapital = 0.5*capitalSteadyState:0.00001:1.5*capitalSteadyState

  24.     nGridCapital = length(vGridCapital)
  25.     nGridProductivity = length(vProductivity)

  26.     # 3. Required matrices and vectors

  27.     mOutput           = zeros(nGridCapital,nGridProductivity)
  28.     mValueFunction    = zeros(nGridCapital,nGridProductivity)
  29.     mValueFunctionNew = zeros(nGridCapital,nGridProductivity)
  30.     mPolicyFunction   = zeros(nGridCapital,nGridProductivity)
  31.     expectedValueFunction = zeros(nGridCapital,nGridProductivity)

  32.     # 4. We pre-build output for each point in the grid

  33.     mOutput = (vGridCapital.^aalpha)*vProductivity;

  34.     # 5. Main iteration

  35.     maxDifference = 10.0
  36.     tolerance = 0.0000001
  37.     iteration = 0

  38.     while(maxDifference > tolerance)
  39.         expectedValueFunction = mValueFunction*mTransition';

  40.         for nProductivity = 1:nGridProductivity
  41.         
  42.             # We start from previous choice (monotonicity of policy function)
  43.             gridCapitalNextPeriod = 1
  44.         
  45.             for nCapital = 1:nGridCapital
  46.         
  47.                 valueHighSoFar = -1000.0
  48.                 capitalChoice  = vGridCapital[1]
  49.             
  50.                 for nCapitalNextPeriod = gridCapitalNextPeriod:nGridCapital

  51.                     consumption = mOutput[nCapital,nProductivity]-vGridCapital[nCapitalNextPeriod]
  52.                     valueProvisional = (1-bbeta)*log(consumption)+bbeta*expectedValueFunction[nCapitalNextPeriod,nProductivity]
  53.                
  54.                     if (valueProvisional>valueHighSoFar)
  55.                         valueHighSoFar = valueProvisional
  56.                         capitalChoice = vGridCapital[nCapitalNextPeriod]
  57.                         gridCapitalNextPeriod = nCapitalNextPeriod
  58.                     else
  59.                         break # We break when we have achieved the max
  60.                     end
  61.                                  
  62.                 end
  63.             
  64.                 mValueFunctionNew[nCapital,nProductivity] = valueHighSoFar
  65.                 mPolicyFunction[nCapital,nProductivity] = capitalChoice
  66.          
  67.             end
  68.         
  69.         end

  70.         maxDifference  = max(abs(mValueFunctionNew-mValueFunction))
  71.         mValueFunction    = mValueFunctionNew
  72.         mValueFunctionNew = zeros(nGridCapital,nGridProductivity)

  73.         iteration = iteration+1
  74.         if mod(iteration,10)==0 || iteration == 1
  75.             println(" Iteration = ", iteration, " Sup Diff = ", maxDifference)
  76.         end
  77.            
  78.     end

  79.     println(" Iteration = ", iteration, " Sup Diff = ", maxDifference)
  80.     println(" ")
  81.     println(" My check = ", mPolicyFunction[1000,3])

  82. end
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 12:44