#!/usr/bin/env python # coding: utf-8 # # Lecture Support: Solow Growth Model Simulator: 2020-01-23 # In[1]: # prepare the python environment with the numerical # analysis package (np), the database package (pd), & # the matlab clone plotting package (plt): import numpy as np import pandas as pd import matplotlib.pyplot as plt # In[2]: # SET PARAMETERS, INITIAL CONDITIONS, AND SCENARIO LENGTH IN THIS CELL # # THESE ARE ALL QUANTITIES YOU CAN CHANGE AT WILL # # choose the model parameters: n = 0.01 # the labor-force L proportional growth rate g = 0.02 # the labor-efficiency E proportional growth rate s = 0.12 # the share of production Y that is saved and invested δ = 0.03 # the capital depreciation rate θ = 1.09 # the elasticitiy of production Y with respect to capital # intensity κ # # additional variables in the model: output per worker y; the # capital stock K # choose starting values L_0, E_0, and κ_0 for the labor force, labor # efficiency, and capital intensity: L_0 = 1 E_0 = 1 κ_0 = 8 # choose the length of time for which the simulation will run: T = 300 # In[3]: # initialize the list of labor force values: L = [L_0] # calculate the labor force for the duration of the # simulation: for t in range(T): L = L + [L[t]*np.exp(n)] # initialize the dataframe: solow_df = pd.DataFrame() # stuff the list of labor-force values into the dataframe: solow_df['L'] = L # plot the labor force over time solow_df.L.plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('Size of Labor Force') plt.show() # In[4]: # initialize the list of labor efficiency values: E = [E_0] # calculate labor efficiency for the duration of the # simulation: for t in range(T): E = E + [E[t]*np.exp(g)] # stuff the list of labor-efficiency values into the dataframe: solow_df['E'] = E # plot the L and E values in the dataframe over time: solow_df[['L','E']].plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('Values of Labor Efficiency and Labor Force') plt.show() # **Memo**: # # The definition of capital intensity: $ \kappa = \frac{K}{Y} $ # The proportional growth rate of output: $ g_Y = \theta g_{\kappa} + n + g $ # The change in the capital stock: $ \frac{dK}{dt} = sY - \delta K $ # The proportional growth rate of the capital stock: $ g_{K} = \frac{1}{K} \frac{dK}{dt} = s\frac{Y}{K} - \delta = \frac{s}{\kappa} - \delta $ # The proportional growth rate of capital intensity is: $ g_\kappa = g_K - g_Y # # So the proportional rate of growth of capital-intensity $ \kappa $ is: # # >$ g_\kappa = \left( \frac{s}{\kappa} - \delta \right) - \left( \theta g_{\kappa} + n + g \right) $ # # > $ (1+\theta) g_\kappa = \frac{s}{\kappa} - \delta - n - g $ # # >$ g_\kappa = \frac{s/\kappa - (n+g+\delta)}{1+\theta} $ # # # # # # # In[5]: # initialize the list of capital-intensity values: κ = [κ_0] # calculate capital intensity for the duration of the # simulation: for t in range(T): κ = κ + [κ[t]*(1 + (s/κ[t] - (n+g+δ))/(1+θ))] # stuff the list of capital-intensity values into the dataframe: solow_df['κ'] = κ # plot capital intensity: solow_df.κ.plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('Capital Intensity') plt.show() # In[6]: # show the three variables calculated so far over time: solow_df[['L','E', 'κ']].plot() # set the y-axis minimum to zero, & tell python to show the plot: plt.ylim(bottom=0) plt.title('Labor Force, Labor Efficiency, Capital Intensity') plt.show() # In[7]: # calculate the remaining variables in the model # initialize the lists of values: Y = [] K = [] y = [] # calculate the variables for the duration of the # simulation: for t in range(T+1): Y = Y + [(κ[t]**θ)*L[t]*E[t]] K = K + [(κ[t]*Y[t])] y = y + [Y[t]/L[t]] # stuff the lists of values into the dataframe: solow_df['Y'] = Y solow_df['K'] = K solow_df['y'] = y # plot the entire dataframe: solow_df.plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('All the Model Variables') plt.show() # In[8]: # show output per worker: solow_df.y.plot() # set the y-axis minimum to zoero, & tell python to show the plot: plt.ylim(bottom=0) plt.title('Output per Worker') plt.show() # In[9]: # show output: solow_df.Y.plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('Value of Production') plt.show() # In[10]: # show the capital stock: solow_df.K.plot() # set the y-axis minimum to zero, title the plot, # & tell python to show the plot: plt.ylim(bottom=0) plt.title('Value of Capital Stock') plt.show() # In[11]: # show capital intensity: solow_df.κ.plot() # set the y-axis minimum to zoero, & tell python to show the plot: plt.ylim(bottom=0) plt.title('Capital Intensity') plt.show() # In[12]: # show labor efficiency: solow_df.E.plot() # set the y-axis minimum to zoero, & tell python to show the plot: plt.ylim(bottom=0) plt.title('Labor Efficiency') plt.show() # In[13]: # show size of labor force: solow_df.L.plot() # set the y-axis minimum to zoero, & tell python to show the plot: plt.ylim(bottom=0) plt.title('Size of Labor Force') plt.show()