交互演示:包络定理与消费者对偶
拖动滑块,看无差异曲线、最优切点与支出函数包络线实时联动
动态拖动价格与收入滑块,实时观察效用最大化切点轨迹与支出函数曲线族的包络结构。
本文依据 Muñoz-Garcia《Advanced Microeconomic Theory》第 2 章及配套课程讲义撰写,属于微观经济学专栏的消费理论模块。阅读前建议了解对偶性与罗伊恒等式与斯勒茨基分解。
注记本讲交互目标
- 拖动价格 \(p_1, p_2\) 与收入 \(w\),观察最优切点沿价格轴移动时,间接效用与支出函数如何联动;
- 理解包络定理的几何含义:价值函数对参数求导 = 拉格朗日函数在最优处对参数求导(中间变量“冻结”在最优解);
- 目睹 \(e(p, u)\) 曲线族的上包络就是 \(v^{-1}\) 的几何结构。
直觉:拖动滑块
下面是柯布–道格拉斯效用 \(u(x_1,x_2)=x_1^{0.5}x_2^{0.5}\) 的世界。左侧图中,红色预算线与蓝色无差异曲线的切点就是马歇尔需求;右侧图中,灰色的曲线族是不同目标效用水平下的支出函数 \(e(p_1, u)\)(关于 \(p_1\)),彩色高亮曲线是当前收入对应的等效用线。
viewof p1 = Inputs.range([0.5, 8], {value: 2, step: 0.1, label: html`价格 p₁`})
viewof p2 = Inputs.range([0.5, 8], {value: 2, step: 0.1, label: html`价格 p₂`})
viewof w = Inputs.range([20, 300], {value: 100, step: 5, label: html`收入 w`})
// 马歇尔需求(柯布–道格拉斯,alpha = 0.5)
x1 = (0.5 * w) / p1
x2 = (0.5 * w) / p2
u_star = Math.sqrt(x1 * x2)
v_val = w / (2 * Math.sqrt(p1 * p2))
e_val = 2 * u_star * Math.sqrt(p1 * p2)
// 数值面板
html`<table class="table table-sm" style="max-width:520px">
<tr><td>间接效用 v(p, w)</td><td><b>${v_val.toFixed(3)}</b></td></tr>
<tr><td>支出函数 e(p, u*)</td><td><b>${e_val.toFixed(1)}</b>(恒等于收入 w = ${w})</td></tr>
<tr><td>最优消费束 (x₁*, x₂*)</td><td><b>(${x1.toFixed(2)}, ${x2.toFixed(2)})</b></td></tr>
</table>`
// 左图:预算线 + 无差异曲线簇 + 最优切点
Plot.plot({
height: 380,
x: { label: "x₁", domain: [0, Math.max(60, x1 * 2.2)] },
y: { label: "x₂", domain: [0, Math.max(60, x2 * 2.2)] },
marks: [
Plot.line([[0, w / p2], [w / p1, 0]], { stroke: "#ef4444", strokeWidth: 2.5 }),
...[0.6, 0.8, 1, 1.25, 1.6].map(k =>
Plot.line(d3.range(0.5, Math.max(60, x1 * 2.2), 0.5).map(t =>
[t, (k * u_star) ** 2 / t]), { stroke: "#93b4f8", strokeOpacity: k === 1 ? 1 : 0.35, strokeWidth: k === 1 ? 2 : 1 })
),
Plot.dot([[x1, x2]], { fill: "#10b981", r: 7, stroke: "black" }),
Plot.text([[x1, x2]], { text: ["E*"], dx: 14, dy: -10, fontSize: 14, fontWeight: "bold" })
],
title: "效用最大化:预算线与无差异曲线切点"
})
// 右图:支出函数曲线族 e(p1, u) 关于 p1(p2、u 固定时的曲线族 + 当前切线斜率 = 希克斯需求)
Plot.plot({
height: 380,
x: { label: "p₁", domain: [0.5, 8] },
y: { label: "e(p₁, u)", domain: [0, Math.max(150, w * 1.4)] },
marks: [
...[0.5, 0.75, 1, 1.4, 2].map(k =>
Plot.line(d3.range(0.5, 8, 0.05).map(t =>
[t, 2 * k * u_star * Math.sqrt(t * p2)]), { stroke: "#c3cedd", strokeOpacity: k === 1 ? 0 : 0.5 })
),
Plot.line(d3.range(0.5, 8, 0.05).map(t =>
[t, 2 * u_star * Math.sqrt(t * p2)]), { stroke: "#1e3a8a", strokeWidth: 2.5 }),
Plot.dot([[p1, 2 * u_star * Math.sqrt(p1 * p2)]], { fill: "#ef4444", r: 7, stroke: "black" }),
Plot.text([[p1, 2 * u_star * Math.sqrt(p1 * p2)]], { text: ["(p₁, e)"], dx: 16, fontSize: 13, fontWeight: "bold" })
],
title: "支出函数:曲线族的上包络(谢泼德引理 = 曲线斜率)"
})
提示你应该看到什么
- 调高 \(p_1\):左图预算线变陡、切点左移;右图当前点沿深蓝曲线右移上爬——曲线的斜率恰是希克斯需求 \(h_1 = \partial e / \partial p_1\)(谢泼德引理)。
- 调高 \(w\):左图预算线外移、切点升到更高无差异曲线;右图整条深蓝曲线按 \(\sqrt{w}\) 比例抬升——这就是 \(e(p, v(p,w)) \equiv w\) 的对偶闭环。
数学:为什么切点轨迹是包络
固定 \((p_2, w)\),让 \(p_1\) 变动。每个 \(p_1\) 对应一个最优效用 \(v(p_1, p_2, w)\)。支出函数在目标效用 \(u\) 处的曲线 \(e(\cdot, u)\) 的斜率是 \(h_1(p, u)\)。 包络定理指出:
\[\frac{\partial v(p, w)}{\partial p_i} = \left.\frac{\partial \mathcal{L}}{\partial p_i}\right|_{x = x^*(p,w)} = -\lambda^* x_i^*\]
求参数导数时,\(x\) 不跟着调整(冻结在旧最优),因此价值函数的导数只捕捉“直接效应”。几何上,这正是一条光滑曲线与它的切线族的关系:每条 \(e(\cdot, u_k)\) 曲线在 \(u_k = v(p, w)\) 处与价值轨迹相切而非相交,故称包络。