Python+经济学:短期生产函数与图像

Python+经济学:短期生产函数与图像

写在前面:

本文灵感源于闲逛时的胡思乱想,在初级微观经济学中,边际产量函数与平均产量函数的图形都被简化为先递增后递减的倒U形,那么可以运用该图形与一元二次函数图像的相似之处,先构造出边际产量函数(Marginal Production Function),继而“逆推”出总产量函数(Total Production Function)和平均产量函数(Average Production Function)并用Python绘制相应函数图像。


PS:虽然这种图形用PPT也能简单绘制,但对手残党不太友好。


预备知识:一元二次函数图形性质回顾


一元二次函数 [公式] 的一般图形呈先递减后递增的U型,函数关于 [公式] 对称,而其关于x轴对称的函数为 [公式] ,其关于y轴对称的函数为 [公式]


本例主要讨论短期生产函数,即总产量TotalProduction仅与劳动投入量Labor相关,而资本投入量Kapital只是固定值。边际产量函数MP是本例的重点:


[公式]


通过上式可知,边际产量曲线关于L=50对称,且当L=0时,MP=0,由MP可逆向构造总产量函数与平均产量函数:


[公式]


[公式]


代码实现:


import matplotlib.pyplot as plt

import numpy as np


#生产函数的设定与计算

#设定劳动投入量参数,Labor是一个列表

n = 200

Labor = np.linspace(0,110,n)

#设定边际产量、平均产量和总产量的空列表备用

MP = []

AP = []

TP = []


for i in range(len(Labor)):

    #取出Labor中的每个元素赋值给labor,参与后续计算

    labor = Labor[i]

    #设定资本投入量为固定值50

    kapital =50

    #从边际产量的表达式开始设定生产函数,MP→AP→TP

    mp = -(labor ** 2) + 100 * labor

    ap = -(1 / 3) * labor ** 2 + 50 * labor + (kapital / labor)

    tp = -(1 / 3) * labor ** 3 + 50 * labor ** 2 + kapital

    #将计算结果写入对应产量的列表

    TP.append(tp)

    MP.append(mp)

    AP.append(ap)


#绘图环节

fig = plt.figure(1,figsize=(8,8))

#绘制第一个图,总产量曲线

ax1 = plt.subplot(111)

#下面语句可将所有产量曲线合成显示在一张图中(上下排列)

# ax1 = plt.subplot(211)

ax1.plot(Labor, TP,'r',label='Total Production')

#设定坐标轴名称

ax1.set_xlabel('Labor')

ax1.set_ylabel('Total Production')

#设定绘图区上边框与右边框不可见,且坐标轴交点设定为原点(0,0)

ax1.spines['top'].set_visible(False)

ax1.spines['right'].set_visible(False)

ax1.spines['bottom'].set_position(('data', 0))

ax1.spines['left'].set_position(('data',0))

#设定图例

plt.legend(['Total Production'])


fig = plt.figure(2,figsize=(8,8))

ax2 = plt.subplot(111)

#下面语句可将所有产量曲线合成显示在一张图中(上下排列)

# ax2 = plt.subplot(212)

ax2.plot(Labor, MP,'b',label='Marginal Production')

ax2.plot(Labor, AP,'g',label='Average Production')

ax2.set_xlabel('Labor')

ax2.set_ylabel('Marginal & Average Production')

ax2.spines['top'].set_visible(False)

ax2.spines['right'].set_visible(False)

ax2.spines['bottom'].set_position(('data', 0))

ax2.spines['left'].set_position(('data',0))

plt.legend(['Marginal Production','Average Production'])

plt.show()

劳动力投入量labor的取值大于100是为了展现边际产量为负数时,总产量递减的状态,运行中触发“divide by zero”报警,但并不影响绘图。


绘图效果:



总产量函数曲线


边际产量函数与平均产量函数曲线


曲线图上下排列合并输出

依葫芦画瓢,绘制成本函数与曲线也是可行的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容