From 366d271b67fd49876b3f857e72182577b8bd66ab Mon Sep 17 00:00:00 2001 From: nisha617 Date: Thu, 18 Sep 2025 23:23:03 +1000 Subject: [PATCH 1/5] Add files via upload --- lectures/cake_eating_problem.md | 197 ++++++++++++++++---------------- 1 file changed, 98 insertions(+), 99 deletions(-) diff --git a/lectures/cake_eating_problem.md b/lectures/cake_eating_problem.md index 1ea4264..73424af 100644 --- a/lectures/cake_eating_problem.md +++ b/lectures/cake_eating_problem.md @@ -9,7 +9,7 @@ kernelspec: name: python3 --- -# 蛋糕食用问题 I:最优储蓄导论 +# 吃蛋糕问题 I:最优储蓄导论 ```{contents} 目录 :depth: 2 @@ -17,47 +17,40 @@ kernelspec: ## 概述 -在本讲中,我们将介绍一个简单的"蛋糕食用"问题。 +在本讲中,我们介绍一个简单的“吃蛋糕”问题。 -跨期问题是:今天享用多少,为将来留下多少? +这里的跨期问题是:今天要享受多少,为未来留下多少? -虽然这个话题听起来很简单,但这种当前效用和未来效用之间的权衡是许多储蓄和消费问题的核心。 +尽管这个主题听起来很平凡,但这种“当前效用与未来效用的权衡”正是许多储蓄与消费问题的核心。 -一旦我们掌握了这个简单环境中的概念,我们就会将它们应用到逐渐更具挑战性——且更有用的问题中。 +一旦我们在这个简单环境中掌握了相关思想,我们就会逐步把它们应用到更具挑战性——也更有用——的问题中。 -我们将用来解决蛋糕食用问题的主要工具是动态规划。 +我们用来解决吃蛋糕问题的主要工具是动态规划。 -在阅读本讲之前,读者可能会发现复习以下讲座很有帮助: +在阅读本讲之前,读者可能会发现复习以下讲座会有帮助: * {doc}`最短路径讲座 ` * {doc}`基础麦考尔模型 ` * {doc}`带分离的McCall模型 ` * {doc}`带分离和连续工资分布的McCall模型 ` -在接下来的内容中,我们需要以下导入: +在接下来的内容中,我们需要导入以下模块: ```{code-cell} ipython import matplotlib.pyplot as plt -import matplotlib as mpl -FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" -mpl.font_manager.fontManager.addfont(FONTPATH) -plt.rcParams['font.family'] = ['Source Han Serif SC'] - -plt.rcParams["figure.figsize"] = (11, 5) #设置默认图形大小 import numpy as np ``` ## 模型 -我们考虑无限时间范围 $t=0, 1, 2, 3..$ +我们考虑一个无限期的时间区间 $t=0, 1, 2, 3..$ -在 $t=0$ 时,主体获得一个大小为 $\bar x$ 的完整蛋糕。 +在 $t=0$ 时,决策者获得一个大小为 $\bar x$ 的完整蛋糕。 -让 $x_t$ 表示每个时期开始时蛋糕的大小, -特别地,$x_0=\bar x$。 +令 $x_t$ 表示每一期开始时的蛋糕大小。特别地,$x_0 = \bar{x}$。 我们选择在任何给定时期 $t$ 吃掉多少蛋糕。 -在时期 $t$ 选择消费 $c_t$ 的蛋糕后,在时期 $t+1$ 剩下 +如果在第 $t$ 期选择消费 $c_t$ 单位的蛋糕,那么在第 $t+1$ 期剩余的蛋糕量为 $$ x_{t+1} = x_t - c_t @@ -73,18 +66,18 @@ $$ u(c) = \frac{c^{1-\gamma}}{1-\gamma} \qquad (\gamma \gt 0, \, \gamma \neq 1) ``` -用Python表示为 +在 Python 中表示为: ```{code-cell} ipython3 def u(c, γ): return c**(1 - γ) / (1 - γ) ``` -未来蛋糕消费的效用按照$\beta\in(0, 1)$进行折现。 +未来的蛋糕消费效用按照折现因子 $\beta \in (0,1)$ 进行折现。 -具体来说,在$t$期消费$c$单位的现值为$\beta^t u(c)$ +具体来说,$t$ 期后的 $c$ 单位消费的现值是 $\beta^t u(c)$。 -个体的问题可以写作 +决策者的问题可以写作 ```{math} :label: cake_objective @@ -92,7 +85,7 @@ def u(c, γ): \max_{\{c_t\}} \sum_{t=0}^\infty \beta^t u(c_t) ``` -约束条件为 +约束条件为,对所有 $t$, ```{math} :label: cake_feasible @@ -102,50 +95,50 @@ x_{t+1} = x_t - c_t 0\leq c_t\leq x_t ``` -对所有$t$成立。 - -当$x_0 = \bar x$时,满足{eq}`cake_feasible`的消费路径$\{c_t\}$被称为**可行的**。 +一个满足{eq}`cake_feasible`的消费路径 ${c_t}$(其中 $x_0 = \bar{x}$)被称为**可行的**。 在这个问题中,以下术语是标准的: -* $x_t$被称为**状态变量** -* $c_t$被称为**控制变量**或**行动** -* $\beta$和$\gamma$是**参数** +* $x_t$ 被称为**状态变量** +* $c_t$ 被称为**控制变量**或**行动** +* $\beta$ 和 $\gamma$ 是**参数** ### 权衡 -蛋糕食用问题中的关键权衡是: +吃蛋糕问题中的关键权衡是: -* 由于折现因子的存在,延迟消费是有代价的。 -* 但由于$u$是凹函数,延迟部分消费也是有吸引力的。 -$u$ 的凹性意味着消费者从*消费平滑*中获得价值,也就是将消费分散在不同时期。 +* 推迟消费是有代价的,因为存在折现因子。 +* 但推迟部分消费也具有吸引力,因为效用函数 $u$ 是凹的。 -这是因为凹性意味着边际效用递减——在同一时期内每多消费一勺蛋糕所带来的效用增加会逐渐减少。 +$u$ 的凹性意味着*消费平滑*,即将消费分散在不同时期,给消费者带来价值。 + +这是因为凹性意味着边际效用递减——在同一时期内,每多消费一勺蛋糕所带来的效用增加会逐渐减少。 ### 直观理解 -上述推理表明,贴现因子 $\beta$ 和曲率参数 $\gamma$ 将在决定消费率方面发挥关键作用。 +上述推理表明,贴现因子 $\beta$ 和曲率参数 $\gamma$ 在决定消费率时将起到关键作用。 -以下是对这些参数影响的一个有根据的猜测。 +我们可以合理猜测这些参数的影响: -首先,较高的 $\beta$ 意味着较少的贴现,因此个体更有耐心,这应该会降低消费率。 +首先,较高的 $\beta$ 意味着较少的折现,因此个体更有耐心,这应该会降低消费率。 其次,较高的 $\gamma$ 意味着边际效用 $u'(c) = c^{-\gamma}$ 随着 $c$ 的增加下降得更快。 -这表明会有更多的平滑,因此消费率更低。 +这意味着会有更多的消费平滑,因此消费率会更低。 -总之,我们预期消费率会随着*这两个参数的增加而减少*。 +总之,我们预期消费率会*随着这两个参数的增加而减少*。 让我们看看这是否正确。 -## 值函数 -我们动态规划处理的第一步是获得贝尔曼方程。 +## 价值函数 + +我们动态规划处理的第一步是得到贝尔曼方程。 下一步是使用它来计算解。 ### 贝尔曼方程 -为此,我们令$v(x)$表示当剩余$x$单位蛋糕时,从当前时刻起可获得的最大终身效用。 +为此,我们令 $v(x)$ 表示当剩余 $x$ 单位蛋糕时,从当前时刻起可获得的最大终身效用。 即, @@ -155,13 +148,13 @@ $u$ 的凹性意味着消费者从*消费平滑*中获得价值,也就是将 v(x) = \max \sum_{t=0}^{\infty} \beta^t u(c_t) ``` -其中最大化是针对从$x_0 = x$开始所有可行的路径$\{ c_t \}$。 +其中最大化是针对从 $x_0 = x$ 开始所有可行的路径 $\{ c_t \}$。 -此时,我们还没有$v$的表达式,但我们仍然可以对它进行推断。 +此时,我们还没有 $v$ 的表达式,但我们仍然可以对它进行推断。 -例如,就像{doc}`McCall模型`一样,值函数将满足*贝尔曼方程*的一个版本。 +例如,就像在{doc}`McCall模型`中一样,价值函数将满足某种形式的*贝尔曼方程*。 -在当前情况下,这个方程表明$v$满足 +在当前情形下,该方程表明 $v$ 满足 ```{math} :label: bellman-cep @@ -171,19 +164,20 @@ v(x) = \max_{0\leq c \leq x} \{u(c) + \beta v(x-c)\} ``` 这里的直观理解本质上与McCall模型相同。 + 最优地选择 $c$ 意味着要在当前和未来回报之间进行权衡。 选择 $c$ 带来的当前回报就是 $u(c)$。 在当前蛋糕大小为 $x$ 的情况下,假设采取最优行为,从下一期开始计算的未来回报是 $v(x-c)$。 -这两项就是 {eq}`bellman-cep` 右边的两项,经过适当的贴现后得到。 +经过适当的折现之后,这两项就是 {eq}`bellman-cep` 右边的两项。 如果使用这种权衡策略最优地选择 $c$,那么我们就能从当前状态 $x$ 获得最大的终身回报。 -因此,$v(x)$ 等于 {eq}`bellman-cep` 的右边,这验证了我们的说法。 +因此,正如我们声称的,$v(x)$ 等于 {eq}`bellman-cep` 的右边。 -### 解析解 +### 一个解析解 已经证明,当 $u$ 是 {eq}`crra_utility` 中的 CRRA 效用函数时,函数 @@ -195,23 +189,25 @@ v^*(x_t) = \left( 1-\beta^{1/\gamma} \right)^{-\gamma}u(x_t) 是贝尔曼方程的解,因此等于价值函数。 -在下面的练习中,你需要确认这一点是否正确。 +在下面的练习中,你需要验证这一点。 + +解 {eq}`crra_vstar` 严重依赖于 CRRA 效用函数。 -解 {eq}`crra_vstar` 在很大程度上依赖于 CRRA 效用函数。 事实上,如果我们不使用CRRA效用函数,通常就完全没有解析解。 -换句话说,在CRRA效用函数之外,我们知道值函数仍然满足贝尔曼方程,但我们无法将其明确地写出来,作为状态变量和参数的函数。 +换句话说,在CRRA效用函数之外,我们知道价值函数仍然满足贝尔曼方程,但我们无法显式地写出它,作为状态变量和参数的函数。 -当需要时,我们将用数值方法来处理这种情况。 +在那种情况下,我们会在需要时通过数值方法来处理。 -以下是值函数的Python表示: +下面是价值函数的一个 Python 表示: ```{code-cell} ipython3 def v_star(x, β, γ): return (1 - β**(1 / γ))**(-γ) * u(x, γ) ``` -下面是一个显示固定参数下函数的图表: + +下面的图,展示了在固定参数下该函数的形状: ```{code-cell} ipython3 β, γ = 0.95, 1.2 @@ -226,26 +222,27 @@ ax.legend(fontsize=12) plt.show() ``` + ## 最优策略 -现在我们已经有了价值函数,计算每个状态下的最优行动就变得直接了。 +既然我们已经得到了价值函数,那么在每个状态下计算最优行动就很直接了。 -我们应该选择消费来最大化贝尔曼方程{eq}`bellman-cep`的右侧。 +我们应该选择一个消费水平,使得贝尔曼方程{eq}`bellman-cep`的右侧最大化: $$ c^* = \arg \max_{c} \{u(c) + \beta v(x - c)\} $$ -我们可以将这个最优选择视为状态$x$的函数,在这种情况下,我们称之为**最优策略**。 +我们可以将这个最优选择视为状态 $x$ 的函数,此时称之为**最优策略** (optimal policy)。 -我们用$\sigma^*$表示最优策略,因此 +我们用 $\sigma^*$ 表示最优策略,因此 $$ \sigma^*(x) := \arg \max_{c} \{u(c) + \beta v(x - c)\} \quad \text{对所有 } x $$ -如果我们将价值函数的解析表达式{eq}`crra_vstar`代入右侧并计算最优值,我们发现 +如果我们将价值函数的解析表达式{eq}`crra_vstar`代入右侧并计算最优值,可以得到 ```{math} :label: crra_opt_pol @@ -255,7 +252,7 @@ $$ 现在让我们回顾一下关于参数影响的直觉。 -我们猜测消费率会随着这两个参数的增加而减少。 +我们之前猜测,消费率会随着这两个参数的增加而减少。 从{eq}`crra_opt_pol`可以看出,事实确实如此。 这里有一些图表来说明。 @@ -265,7 +262,7 @@ def c_star(x, β, γ): return (1 - β ** (1/γ)) * x ``` -继续使用上面的$\beta$和$\gamma$值,绘图如下 +继续使用前面给定的参数 $\beta$ 和 $\gamma$,绘制出的图形如下: ```{code-cell} ipython3 fig, ax = plt.subplots() @@ -278,15 +275,16 @@ ax.legend() plt.show() ``` + ## 欧拉方程 -在上述讨论中,我们已经为具有CRRA效用的蛋糕食用问题提供了完整的解决方案。 +在上面的讨论中,我们已经在 CRRA 效用的情形下给出了吃蛋糕问题的完整解。 -实际上,还有另一种方法可以求解最优策略,这就是基于所谓的**欧拉方程**。 +事实上,还有另一种方法可以求解最优策略,即基于所谓的**欧拉方程**(Euler equation)。 -虽然我们已经有了完整的解决方案,但现在正是研究欧拉方程的好时机。 +尽管我们已经得到了完整解,但现在正是研究欧拉方程的好时机。 -这是因为,对于更复杂的问题,这个方程提供了通过其他方法难以获得的关键见解。 +这是因为,对于更复杂的问题,这个方程能够提供一些通过其他方法难以获得的关键洞见。 ### 陈述和含义 @@ -300,14 +298,14 @@ u^{\prime} (c^*_{t})=\beta u^{\prime}(c^*_{t+1}) 这是最优路径的必要条件。 -它表明,在最优路径上,经过适当贴现后,跨期边际收益是相等的。 +它表明,在最优路径上,经过适当折现之后,跨期边际收益是相等的。 -这是有道理的:通过平滑消费直到不存在边际收益为止,就能达到最优。 +这很合理:最优性是通过平滑消费直到没有额外的边际收益为止得到的。 我们也可以用策略函数来表述欧拉方程。 **可行消费策略**是一个满足 $0 \leq \sigma(x) \leq x$ 的映射 $x \mapsto \sigma(x)$。 -最后的限制表明我们不能消费超过剩余蛋糕的数量。 +这里的约束条件表明,我们不能消费超过剩余蛋糕的数量。 如果一个可行消费策略 $\sigma$ 对于所有 $x > 0$ 满足以下条件,则称其**满足欧拉方程**: @@ -320,7 +318,7 @@ u^{\prime}( \sigma(x) ) 显然,{eq}`euler_pol`只是{eq}`euler-cep`的策略等价形式。 -事实证明,一个可行策略是最优的,当且仅当它满足欧拉方程。 +事实证明,一个可行策略当且仅当满足欧拉方程时才是最优的。 在练习中,你需要验证最优策略{eq}`crra_opt_pol`确实满足这个泛函方程。 @@ -329,48 +327,46 @@ u^{\prime}( \sigma(x) ) ``` 关于欧拉方程在更一般情况下充分性的证明,请参见{cite}`ma2020income`中的命题2.2。 -以下论证着重于必要性,解释为什么最优路径或政策应该满足欧拉方程。 + +下面的论证将聚焦于必要性,解释为什么任何最优路径或最优策略都必须满足欧拉方程。S ### 推导 I:扰动法 -让我们用$c$作为消费路径$\{c_t\}_{t=0}^\infty$的简写。 +我们把 $c$ 作为消费路径 ${c_t}_{t=0}^\infty$ 的简写。 -整体蛋糕食用最大化问题可以写作 +整个吃蛋糕的最大化问题可以写作 $$ \max_{c \in F} U(c) \quad \text{where } U(c) := \sum_{t=0}^\infty \beta^t u(c_t) $$ -其中$F$是可行消费路径的集合。 +其中 $F$ 是所有可行消费路径的集合。 -我们知道可微函数在最大值点处的梯度为零。 +我们知道,可微函数在极大值点的梯度为零。 -因此最优路径$c^* := \{c^*_t\}_{t=0}^\infty$必须满足 +因此最优路径 $c^* := \{c^*_t\}_{t=0}^\infty$ 必须满足 $U'(c^*) = 0$。 ```{note} -如果你想确切了解导数$U'(c^*)$是如何定义的,考虑到参数$c^*$是一个无限长的向量,你可以从学习[Gateaux导数](https://en.wikipedia.org/wiki/Gateaux_derivative)开始。不过,下文并不假定需要这些知识。 +如果你想确切了解导数 $U'(c^*)$ 是如何定义的,考虑到参自变量 $c^*$ 是一个无限长的向量,你可以从学习[加托导数](https://baike.baidu.com/item/%E5%8A%A0%E6%89%98%E5%AF%BC%E6%95%B0)开始。不过,下文并不假定需要这些知识。 ``` -换句话说,对于任何 -从最优路径无限小(且可行)的扰动出发。 +换句话说,对于任何无穷小的(且可行的)偏离最优路径的扰动,$U$ 的变化率必须为零。 -考虑一个可行的扰动,在时间 $t$ 将消费减少到 -$c^*_t - h$ -并在下一期增加到 $c^*_{t+1} + h$。 +因此,考虑这样一个可行的扰动:在 $t$ 期把消费减少为 $c_t^* - h$,并在下一期把消费增加为 $c_{t+1}^* + h$。 -其他任何时期的消费都不发生变化。 +在其他时期消费不发生变化。 -我们将这个扰动路径称为 $c^h$。 +我们称这种扰动路径为 $c^h$。 -根据之前关于零梯度的论述,我们有 +根据前面关于零梯度的论证,我们有 $$ \lim_{h \to 0} \frac{U(c^h) - U(c^*)}{h} = U'(c^*) = 0 $$ -考虑到消费只在 $t$ 和 $t+1$ 时发生变化,这变成 +注意到消费只在 $t$ 和 $t+1$ 时刻发生变化,上式可以写为 $$ \lim_{h \to 0} @@ -378,7 +374,7 @@ $$ - \beta^t u(c^*_t) - \beta^{t+1} u(c^*_{t+1}) }{h} = 0 $$ -重新整理后,同样的表达式可以写成 +经过整理,相同的式子可以写作 $$ \lim_{h \to 0} @@ -387,7 +383,7 @@ $$ \frac{ u(c^*_{t+1} + h) - u(c^*_{t+1}) }{h} = 0 $$ -或者,取极限后, +或者,取极限后得到 $$ - u'(c^*_t) + \beta u'(c^*_{t+1}) = 0 @@ -396,9 +392,10 @@ $$ 这就是欧拉方程。 ### 推导 II:使用贝尔曼方程 + 另一种推导欧拉方程的方法是使用贝尔曼方程{eq}`bellman-cep`。 -对贝尔曼方程右侧关于$c$求导并令其等于零,我们得到 +对贝尔曼方程右侧关于 $c$ 求导并令其等于零,我们得到 ```{math} :label: bellman_FOC @@ -406,8 +403,8 @@ $$ u^{\prime}(c)=\beta v^{\prime}(x - c) ``` -为了得到$v^{\prime}(x - c)$,我们设 -$g(c,x) = u(c) + \beta v(x - c)$,这样在最优消费选择下, +为了得到 $v^{\prime}(x - c)$,我们设 +$g(c,x) = u(c) + \beta v(x - c)$,这样,在最优消费选择下, ```{math} :label: bellman_equality @@ -415,7 +412,7 @@ $g(c,x) = u(c) + \beta v(x - c)$,这样在最优消费选择下, v(x) = g(c,x) ``` -对等式两边求导,同时考虑到最优消费会依赖于$x$,我们得到 +对等式两边求导,同时考虑到最优消费会依赖于 $x$,我们得到 $$ v' (x) = @@ -423,7 +420,7 @@ v' (x) = + \frac{\partial }{\partial x} g(c,x) $$ -当$g(c,x)$在$c$处取得最大值时,我们有$\frac{\partial }{\partial c} g(c,x) = 0$。 +当 $g(c,x)$ 在 $c$ 处取得最大值时,我们有 $\frac{\partial }{\partial c} g(c,x) = 0$。 因此导数简化为 @@ -435,9 +432,9 @@ v' (x) = = \frac{\partial }{\partial x} \beta v(x - c) = \beta v^{\prime}(x - c) ``` -(这个论点是[包络定理](https://en.wikipedia.org/wiki/Envelope_theorem)的一个例子。) +(这个推导是[包络定理](https://blog.csdn.net/qq_25018077/article/details/123295394)的一个例子。) -但现在应用{eq}`bellman_FOC`得到 +结合{eq}`bellman_FOC`得到 ```{math} :label: bellman_v_prime @@ -456,14 +453,16 @@ u^{\prime}(c) = v^{\prime}(x) 如何得到{eq}`crra_vstar`和{eq}`crra_opt_pol`中给出的价值函数和最优策略的表达式? -第一步是对消费策略的函数形式进行猜测。 +第一步是对消费策略的函数形式作一个猜测。 + +假设我们不知道解,并从一个假设出发:最优策略是线性的。 -假设我们不知道解,从猜测最优策略是线性的开始。 +换句话说,我们猜测存在一个正的 $\theta$,使得令使得对所有 $t$,设定$c_t^*=\theta x_t$会产生一个最优路径。 -换句话说,我们推测存在一个正数$\theta$,使得对所有$t$设定$c_t^*=\theta x_t$会产生一个最优路径。 从这个猜想出发,尝试获得解 {eq}`crra_vstar` 和 {eq}`crra_opt_pol`。 在此过程中,你需要使用价值函数的定义和贝尔曼方程。 +``` ```{solution} cep_ex1 :class: dropdown From 68af17250a752c5075ff3e5b315a10fc4ebcb3f9 Mon Sep 17 00:00:00 2001 From: nisha617 Date: Fri, 19 Sep 2025 23:00:30 +1000 Subject: [PATCH 2/5] Add files via upload --- lectures/cake_eating_problem.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lectures/cake_eating_problem.md b/lectures/cake_eating_problem.md index 73424af..d07a5c9 100644 --- a/lectures/cake_eating_problem.md +++ b/lectures/cake_eating_problem.md @@ -42,7 +42,7 @@ import numpy as np ``` ## 模型 -我们考虑一个无限期的时间区间 $t=0, 1, 2, 3..$ +我们考虑一个无限期的时间区间 $t=0, 1, 2, 3...$ 在 $t=0$ 时,决策者获得一个大小为 $\bar x$ 的完整蛋糕。 @@ -122,9 +122,7 @@ $u$ 的凹性意味着*消费平滑*,即将消费分散在不同时期,给 首先,较高的 $\beta$ 意味着较少的折现,因此个体更有耐心,这应该会降低消费率。 -其次,较高的 $\gamma$ 意味着边际效用 $u'(c) = c^{-\gamma}$ 随着 $c$ 的增加下降得更快。 - -这意味着会有更多的消费平滑,因此消费率会更低。 +其次,较高的 $\gamma$ 意味着边际效用 $u'(c) = c^{-\gamma}$ 随着 $c$ 的增加下降得更快。这意味着会有更多的消费平滑,因此消费率会更低。 总之,我们预期消费率会*随着这两个参数的增加而减少*。 @@ -332,13 +330,13 @@ u^{\prime}( \sigma(x) ) ### 推导 I:扰动法 -我们把 $c$ 作为消费路径 ${c_t}_{t=0}^\infty$ 的简写。 +我们把 $c$ 作为消费路径 $\left\{{c_t}\right\}_{t=0}^\infty$ 的简写。 整个吃蛋糕的最大化问题可以写作 $$ \max_{c \in F} U(c) -\quad \text{where } U(c) := \sum_{t=0}^\infty \beta^t u(c_t) +\quad \text{ 其中 } U(c) := \sum_{t=0}^\infty \beta^t u(c_t) $$ 其中 $F$ 是所有可行消费路径的集合。 From ebb6ba72059d59c7a5e1102832ccec7149e54e6e Mon Sep 17 00:00:00 2001 From: nisha617 Date: Fri, 26 Sep 2025 21:26:46 +1000 Subject: [PATCH 3/5] Update cake_eating_problem.md --- lectures/cake_eating_problem.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lectures/cake_eating_problem.md b/lectures/cake_eating_problem.md index d07a5c9..9c47399 100644 --- a/lectures/cake_eating_problem.md +++ b/lectures/cake_eating_problem.md @@ -38,6 +38,10 @@ kernelspec: ```{code-cell} ipython import matplotlib.pyplot as plt +FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" +mpl.font_manager.fontManager.addfont(FONTPATH) +plt.rcParams['font.family'] = ['Source Han Serif SC'] + import numpy as np ``` ## 模型 From cd03fbbc378e79c8683f578ea675402ded9f3c10 Mon Sep 17 00:00:00 2001 From: nisha617 Date: Fri, 26 Sep 2025 21:36:31 +1000 Subject: [PATCH 4/5] Update cake_eating_problem.md --- lectures/cake_eating_problem.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lectures/cake_eating_problem.md b/lectures/cake_eating_problem.md index 9c47399..7813a8d 100644 --- a/lectures/cake_eating_problem.md +++ b/lectures/cake_eating_problem.md @@ -30,7 +30,7 @@ kernelspec: 在阅读本讲之前,读者可能会发现复习以下讲座会有帮助: * {doc}`最短路径讲座 ` -* {doc}`基础麦考尔模型 ` +* {doc}`基础McCall模型 ` * {doc}`带分离的McCall模型 ` * {doc}`带分离和连续工资分布的McCall模型 ` @@ -38,10 +38,6 @@ kernelspec: ```{code-cell} ipython import matplotlib.pyplot as plt -FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" -mpl.font_manager.fontManager.addfont(FONTPATH) -plt.rcParams['font.family'] = ['Source Han Serif SC'] - import numpy as np ``` ## 模型 From 8d07a13506fd294c697b294f67115dfed3113b75 Mon Sep 17 00:00:00 2001 From: nisha617 Date: Wed, 1 Oct 2025 16:40:12 +1000 Subject: [PATCH 5/5] Update cake_eating_problem.md --- lectures/cake_eating_problem.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lectures/cake_eating_problem.md b/lectures/cake_eating_problem.md index 7813a8d..4b8ce26 100644 --- a/lectures/cake_eating_problem.md +++ b/lectures/cake_eating_problem.md @@ -38,6 +38,11 @@ kernelspec: ```{code-cell} ipython import matplotlib.pyplot as plt +import matplotlib as mpl +FONTPATH = "fonts/SourceHanSerifSC-SemiBold.otf" +mpl.font_manager.fontManager.addfont(FONTPATH) +plt.rcParams['font.family'] = ['Source Han Serif SC'] + import numpy as np ``` ## 模型 @@ -213,7 +218,7 @@ x_grid = np.linspace(0.1, 5, 100) fig, ax = plt.subplots() -ax.plot(x_grid, v_star(x_grid, β, γ), label='value function') +ax.plot(x_grid, v_star(x_grid, β, γ), label='价值函数') ax.set_xlabel('$x$', fontsize=12) ax.legend(fontsize=12)