从CES效用函数到Python代码用SymPy手把手推导替代弹性附完整代码在经济学建模中CESConstant Elasticity of Substitution效用函数因其独特的数学性质和经济含义成为分析消费者行为和市场竞争的重要工具。传统教材往往停留在理论推导层面而本文将带您用Python的SymPy库重新演绎这一经典模型通过可执行的代码揭示其背后的经济学逻辑。1. 环境准备与符号定义1.1 安装必要库确保已安装Python 3.7环境后通过pip安装SymPy库pip install sympy numpy matplotlib1.2 初始化符号系统在Jupyter Notebook或Python脚本中导入库并定义符号变量from sympy import * import numpy as np # 定义符号变量 x, y, δ symbols(x y delta, realTrue, positiveTrue)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(fMU_x {MU_x}) print(fMU_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, labelfδ{δ}) 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 完全替代情形δ1limit(σ, δ, 1)输出结果为oo无穷大符合完全替代特征。5.2 柯布-道格拉斯情形δ→0通过级数展开验证series(σ, δ, 0, n2)显示结果为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, realTrue, positiveTrue) # 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(fMRS {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, labelfδ{δ_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时建议使用泰勒展开避免数值不稳定对于实证研究可先通过回归估计σ再反推δ值计算优化方案# 使用lambdify加速数值计算 numeric_MRS lambdify((x, y, δ), MRS, numpy)扩展应用方向生产函数分析国际贸易模型消费者需求系统估计在最近的一个市场分析项目中我们使用CES框架估计了不同品牌智能手机的替代模式发现当δ0.3时模型拟合度最佳σ≈1.43这一结果帮助客户理解了产品定位的竞争格局。