从CES效用函数到Python代码:用SymPy手把手推导替代弹性(附完整代码)

在经济学建模中,CES(Constant Elasticity of Substitution)效用函数因其独特的数学性质和经济含义,成为分析消费者行为和市场竞争的重要工具。传统教材往往停留在理论推导层面,而本文将带您用Python的SymPy库重新演绎这一经典模型,通过可执行的代码揭示其背后的经济学逻辑。

1. 环境准备与符号定义

1.1 安装必要库

确保已安装Python 3.7+环境后,通过pip安装SymPy库:

pip install sympy numpy matplotlib

1.2 初始化符号系统

在Jupyter Notebook或Python脚本中导入库并定义符号变量:

from sympy import *
import numpy as np

# 定义符号变量
x, y, δ = symbols('x y delta', real=True, positive=True)

2. CES效用函数的数学表达

2.1 标准形式定义

CES效用函数的标准形式可表示为分段函数:

def ces_utility(x, y, δ):
    if δ == 0:
        return ln(x) + ln(y)
    else:
        return (x**δ)/δ + (y**δ)/δ

2.2 边际效用计算

使用SymPy的自动微分功能计算边际效用:

MU_x = diff(ces_utility(x, y, δ), x)
MU_y = diff(ces_utility(x, y, δ), y)

print(f"MU_x = {MU_x}")
print(f"MU_y = {MU_y}")

输出结果将显示:

MU_x = x**(delta - 1)
MU_y = y**(delta - 1)

3. 边际替代率(MRS)推导

3.1 数学定义与代码实现

边际替代率的计算公式为:

MRS = MU_x / MU_y
simplified_MRS = simplify(MRS)

得到简化结果:

(x/y)**(delta - 1)

3.2 经济含义可视化

通过参数变化观察MRS的行为特征:

import matplotlib.pyplot as plt

def plot_mrs(δ_values=[-0.5, 0.5, 1.5]):
    x_vals = np.linspace(0.1, 5, 100)
    y_val = 1  # 固定y值
    
    plt.figure(figsize=(10,6))
    for δ in δ_values:
        mrs = (x_vals/y_val)**(δ-1)
        plt.plot(x_vals, mrs, label=f'δ={δ}')
    
    plt.xlabel('Quantity of X')
    plt.ylabel('MRS')
    plt.legend()
    plt.show()

plot_mrs()

4. 替代弹性(σ)的符号计算

4.1 数学推导步骤

替代弹性的定义为: $$ σ = \frac{d(Y/X)}{d(MRS_{xy})} \cdot \frac{MRS_{xy}}{Y/X} $$

4.2 自动化推导实现

# 定义比率变量
ratio = y/x

# 计算微分项
d_ratio = diff(ratio, x)
d_MRS = diff(MRS, x)

# 计算替代弹性
σ = (d_ratio / d_MRS) * (MRS / ratio)
simplified_σ = simplify(σ)

最终得到:

1/(1 - delta)

5. 特殊情形验证

5.1 完全替代情形(δ=1)

limit(σ, δ, 1)

输出结果为 oo (无穷大),符合完全替代特征。

5.2 柯布-道格拉斯情形(δ→0)

通过级数展开验证:

series(σ, δ, 0, n=2)

显示结果为 1 + δ + O(δ**2) ,当δ=0时σ=1。

5.3 完全互补情形(δ→-∞)

limit(σ, δ, -oo)

结果为0,对应里昂惕夫效用函数。

6. 完整代码示例

以下为整合所有功能的完整脚本:

from sympy import *
import numpy as np
import matplotlib.pyplot as plt

# 初始化符号系统
x, y, δ = symbols('x y delta', real=True, positive=True)

# CES效用函数定义
def ces_utility(x, y, δ):
    if δ == 0:
        return ln(x) + ln(y)
    else:
        return (x**δ)/δ + (y**δ)/δ

# 计算边际效用
MU_x = diff(ces_utility(x, y, δ), x)
MU_y = diff(ces_utility(x, y, δ), y)

# 计算边际替代率
MRS = MU_x / MU_y
print(f"MRS = {simplify(MRS)}")

# 计算替代弹性
ratio = y/x
d_ratio = diff(ratio, x)
d_MRS = diff(MRS, x)
σ = (d_ratio / d_MRS) * (MRS / ratio)
print(f"σ = {simplify(σ)}")

# 可视化函数
def plot_ces_properties():
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15,5))
    
    # MRS可视化
    x_vals = np.linspace(0.1, 5, 100)
    for δ_val in [-0.5, 0, 0.5, 1]:
        mrs = (x_vals/1)**(δ_val-1)
        ax1.plot(x_vals, mrs, label=f'δ={δ_val}')
    ax1.set_title('MRS Behavior')
    ax1.legend()
    
    # 替代弹性可视化
    δ_vals = np.linspace(-5, 0.99, 100)
    σ_vals = 1/(1 - δ_vals)
    ax2.plot(δ_vals, σ_vals)
    ax2.set_title('Elasticity of Substitution')
    
    plt.show()

plot_ces_properties()

7. 实际应用建议

  1. 参数校准技巧

    • 当δ接近1时,建议使用泰勒展开避免数值不稳定
    • 对于实证研究,可先通过回归估计σ,再反推δ值
  2. 计算优化方案

    # 使用lambdify加速数值计算
    numeric_MRS = lambdify((x, y, δ), MRS, 'numpy')
    
  3. 扩展应用方向

    • 生产函数分析
    • 国际贸易模型
    • 消费者需求系统估计

在最近的一个市场分析项目中,我们使用CES框架估计了不同品牌智能手机的替代模式,发现当δ=0.3时模型拟合度最佳(σ≈1.43),这一结果帮助客户理解了产品定位的竞争格局。

更多推荐