Advertisement

经济学:无差异曲线与效用函数可视化

阅读量:
复制代码
 import matplotlib.pyplot as plt

    
 import numpy as np
    
 fig = plt.figure(1) #定义新的三维坐标轴,用以绘制效用曲面
    
 ax1 = plt.axes(projection='3d')
    
 #定义三维数据与效用函数参数
    
 n =100 
    
 a = 1
    
 b = 2 
    
 x = np.linspace(0,30,n)
    
 y = np.linspace(0,30,n) 
    
 X, Y = np.meshgrid(x,y) 
    
 #一般效用曲面
    
 #Z = np.sqrt(X*Y)
    
 #完全替代品效用曲面
    
 #Z = a*X+b*Y 
    
 #完全互补品效用曲面 
    
 #Z = np.minimum(a*X,b*Y)
    
 #最大效用函数
    
 #Z = np.maximum(a*X,b*Y)
    
 #不完全互补品
    
 Z = np.minimum(b*X-a*Y,b*Y-a*X)
    
 #曲面图 
    
 Utility = ax1.plot_surface(X,Y,Z,cmap='coolwarm',alpha=0.8)
    
 #添加题目
    
 plt.title('U=min(2x-y,2y-x)')
    
 #叠加等高(无差异)线 
    
 ax1.contour(X,Y,Z,zdir='z',offset=0,cmap='rainbow')
    
 #设置坐标轴标签
    
 ax1.set_xlabel('Good X')
    
 ax1.set_ylabel('Good Y')
    
 ax1.set_zlabel('Utility')
    
 #图例色条
    
 fig.colorbar(Utility, shrink=0.5, aspect=20)
    
 plt.savefig('Utility Surface.png')
    
 #第二个图单独绘制等高(无差异)线 
    
 fig = plt.figure(2)
    
 ax2 = plt.subplot(111)
    
 Indiff = ax2.contour(X,Y,Z,cmap='rainbow')
    
 ax2.set_xlabel('Good X')
    
 ax2.set_ylabel('Good Y') 
    
 #添加题目
    
 plt.title('U=min(2x-y,2y-x)')
    
 #显示等高线(效用)值 
    
 plt.clabel(Indiff,inline=True,fontsize=12)
    
 plt.savefig('Indifference Curve.png')
    
 plt.show()

代码中给出了几种效用函数,可以自己调参或更改效用函数。

以下是以U=min(2x-y,2y-x)为效用函数构造出来的图形,此外还可以根据需要调整成不同的效用函数

全部评论 (0)

还没有任何评论哟~