# 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
# 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
# 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()
# 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} $
# 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()
# 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()
# 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()
# 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()
# 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()
# 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()
# 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()
# 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()
# 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()