@@ -29,40 +29,36 @@ kernelspec:
2929```
3030
3131``` {seealso}
32- **GPU :** 这个讲座的一个使用 [jax](https://jax.readthedocs.io)在`GPU`上运行代码的版本[可在此处获得 ](https://jax.quantecon.org/newtons_method.html)
32+ **GPU加速 :** 本讲座有一个使用 [jax](https://jax.readthedocs.io)在GPU上运行的版本,[点击这里查看 ](https://jax.quantecon.org/newtons_method.html)
3333```
3434
3535## 概述
3636
37- 许多经济问题涉及寻找[ 不动点
38-
39- [ 不动点] ( https://en.wikipedia.org/wiki/Fixed_point_(mathematics) ) 或[ 零点] ( https://en.wikipedia.org/wiki/Zero_of_a_function ) (有时也称为"根")。
37+ 许多经济问题涉及寻找[ 不动点] ( https://baike.baidu.com/item/%E4%B8%8D%E5%8A%A8%E7%82%B9?fromModule=lemma_search-box ) 或[ 零点] ( https://baike.baidu.com/item/%E9%9B%B6%E7%82%B9/19736260?fromModule=lemma_search-box ) (有时也称为"根")。
4038
4139例如,在简单的供需模型中,均衡价格是使超额需求为零的价格。
4240
4341换句话说,均衡是超额需求函数的零点。
4442
45- 有各种计算技术可用于求解不动点和零点 。
43+ 有各种算法可用于求解不动点和零点 。
4644
47- 在本讲中,我们将学习一种重要的基于梯度的技术,称为[ 牛顿法] ( https://en.wikipedia.org/wiki/Newton%27s_method ) 。
45+ 在本讲中,我们将学习一种重要的基于梯度的技术,称为[ 牛顿法] ( https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95?fromModule=lemma_search-box ) 。
4846
49- 牛顿法并不总是有效 ,但在适用的情况下,与其他方法相比,收敛速度通常较快 。
47+ 牛顿法并非总是有效 ,但在适用的情况下,其收敛速度通常比其他方法更快 。
5048
51- 本讲将在一维和多维环境中应用牛顿法来解决不动点和零点查找问题 。
49+ 本讲将在一维和多维环境中应用牛顿法来解决不动点和零点计算问题 。
5250
53- * 在寻找函数$f$的不动点时,牛顿法通过求解一个
51+ 牛顿法的基本思路是:
5452
55- 函数 $f$ 的线性近似 。
53+ * 对于不动点问题,通过对函数 $f$ 进行线性近似来寻找不动点 。
5654
57- * 在寻找函数 $f$ 的零点时,牛顿法通过求解函数 $f$ 的线性近似的零点来更新
58- 现有的猜测值。
55+ * 对于零点问题,通过求解函数 $f$ 的线性近似的零点,不断更新当前的估计值,直到收敛到真实的零点。
5956
60- 为了建立直观认识,我们首先考虑一个简单的一维不动点问题,其中我们已知解,并使用连续
61- 近似和牛顿法来求解。
57+ 为了建立直观认识,我们首先考虑一个简单的一维不动点问题,其中我们已知解,并使用连续近似和牛顿法来求解。
6258
63- 然后我们将牛顿法应用到多维环境中,求解多种商品的市场均衡 。
59+ 然后我们将牛顿法应用到多维环境中,求解多种商品的市场均衡问题 。
6460
65- 在讲座最后,我们利用 [ ` autograd ` ] ( https://github.com/HIPS/autograd ) 中自动微分的强大功能来求解一个非常高维的均衡问题 。
61+ 最后,我们将使用 [ ` autograd ` ] ( https://github.com/HIPS/autograd ) 包提供的自动微分功能来处理一个高维均衡问题 。
6662
6763``` {code-cell} ipython3
6864:tags: [hide-output]
@@ -90,7 +86,7 @@ plt.rcParams["figure.figsize"] = (10, 5.7)
9086
9187## 用牛顿法计算不动点
9288
93- 在本节中,我们将在[ 索洛增长模型] ( https://en.wikipedia.org/wiki/Solow%E2%80%93Swan_model ) 的框架下求解资本运动规律的不动点。
89+ 在本节中,我们将在[ 索洛增长模型] ( https://baike.baidu.com/item/%E6%96%B0%E5%8F%A4%E5%85%B8%E5%A2%9E%E9%95%BF%E6%A8%A1%E5%9E%8B?fromtitle=%E7%B4%A2%E6%B4%9B%E5%A2%9E%E9%95%BF%E6%A8%A1%E5%9E%8B&fromid=7557049&fromModule=lemma_search-box ) 的框架下求解资本运动规律的不动点。
9490
9591我们将通过可视化方式检查不动点,用连续逼近法求解,然后应用牛顿法来实现更快的收敛。
9692
@@ -116,8 +112,8 @@ plt.rcParams["figure.figsize"] = (10, 5.7)
116112
117113换句话说,我们要寻找一个 $k^* > 0$ 使得 $g(k^* )=k^* $。
118114
119- * 这样的 $k^* $ 被称为[ 稳态] ( https://en .wikipedia.org/wiki/Steady_state ) ,
120- 因为当 $k_t = k^* $ 时意味着 $k_ {t+1} = k^* $。
115+ * 这样的 $k^* $ 被称为[ 稳态] ( https://zh .wikipedia.org/wiki/%E7%A9%A9%E6%85%8B_(%E7%B3%BB%E7%B5%B1) ) ,
116+ 因为当 $k_t = k^* $ 时, $k_ {t+1} = k^* $。
121117
122118用纸笔解方程 $g(k)=k$,你可以验证
123119
@@ -209,7 +205,7 @@ plt.show()
209205
210206在这种情况下,连续近似法意味着从某个初始状态 $k_0$ 开始,使用运动规律反复更新资本。
211207
212- 这里是从特定选择的 $k_0$ 得到的时间序列 。
208+ 这里是以特定的 $k_0$ 为初始值得到的时间序列 。
213209
214210``` {code-cell} ipython3
215211def compute_iterates(k_0, f, params, n=25):
@@ -245,8 +241,6 @@ k_star_approx
245241
246242这接近真实值。
247243
248- (solved_k)=
249-
250244``` {code-cell} ipython3
251245k_star
252246```
@@ -287,15 +281,15 @@ g'(k) = \alpha s A k^{\alpha-1} + (1-\delta)
287281
288282```
289283
290- 让我们定义这个:
284+ 让我们定义这个函数
291285
292286``` {code-cell} ipython3
293287def Dg(k, params):
294288 A, s, α, δ = params
295289 return α * A * s * k**(α-1) + (1 - δ)
296290```
297291
298- 这里有一个函数 $q$ 表示 [ ] ( newtons_method ) 。
292+ 下面的函数 $q$ 表示 [ ] ( newtons_method ) 。
299293
300294``` {code-cell} ipython3
301295def q(k, params):
@@ -345,14 +339,13 @@ plot_trajectories(params)
345339我们可以看到牛顿法比连续逼近法收敛得更快。
346340
347341
348- ## 一维寻根
342+ ## 一维求根
349343
350344在上一节中我们计算了不动点。
351345
352346事实上,牛顿法更常与寻找函数零点的问题相关联。
353347
354- 让我们讨论这个"寻根"问题,然后说明它与寻找不动点的问题是如何联系的。
355-
348+ 让我们讨论这个"求根"问题,然后说明它与寻找不动点的问题是如何联系的。
356349
357350
358351### 牛顿法求零点
@@ -386,8 +379,6 @@ x_{t+1} = x_t - \frac{ f(x_t) }{ f'(x_t) },
386379
387380以下代码实现了迭代公式 [ ] ( oneD-newton )
388381
389- (first_newton_attempt)=
390-
391382``` {code-cell} ipython3
392383def newton(f, Df, x_0, tol=1e-7, max_iter=100_000):
393384 x = x_0
@@ -437,17 +428,15 @@ k_star_approx_newton
437428结果证实了我们在上面图表中看到的收敛情况:仅需5次迭代就达到了非常精确的结果。
438429
439430
440-
441431## 多元牛顿法
442432
443- 在本节中,我们将介绍一个双商品问题,展示问题的可视化 ,并使用` SciPy ` 中的零点查找器和牛顿法来求解这个双商品市场的均衡。
433+ 在本节中,我们将介绍一个双商品问题,可视化问题 ,并使用` SciPy ` 中的零点查找器和牛顿法来求解这个双商品市场的均衡。
444434
445435然后,我们将这个概念扩展到一个包含5,000种商品的更大市场,并再次比较这两种方法的性能。
446436
447437我们将看到使用牛顿法时能获得显著的性能提升。
448438
449439
450- (two_goods_market)=
451440### 双商品市场均衡
452441
453442让我们从计算双商品问题的市场均衡开始。
@@ -558,14 +547,14 @@ print(f'商品0的超额需求为 {ex_demand[0]:.3f} \n'
558547 f'商品1的超额需求为 {ex_demand[1]:.3f}')
559548```
560549
561- 接下来我们在$(p_0, p_1)$值的网格上绘制两个函数$e_0$和$e_1$的等高线图和曲面 。
550+ 接下来我们在$(p_0, p_1)$值的网格上绘制两个函数$e_0$和$e_1$的等高线图和曲面图 。
562551
563552我们将使用以下函数来构建等高线图
564553
565554``` {code-cell} ipython3
566555def plot_excess_demand(ax, good=0, grid_size=100, grid_max=4, surface=True):
567556
568- # Create a 100x100 grid
557+ # 创建一个100x100的网格
569558 p_grid = np.linspace(0, grid_max, grid_size)
570559 z = np.empty((100, 100))
571560
@@ -580,19 +569,19 @@ def plot_excess_demand(ax, good=0, grid_size=100, grid_max=4, surface=True):
580569 ctr1 = ax.contour(p_grid, p_grid, z.T, levels=[0.0])
581570 ax.set_xlabel("$p_0$")
582571 ax.set_ylabel("$p_1$")
583- ax.set_title(f'Excess Demand for Good {good}')
572+ ax.set_title(f'超额需求函数 {good}')
584573 plt.clabel(ctr1, inline=1, fontsize=13)
585574```
586575
587- 这是我们对 $e_0$ 的绘图:
576+ 这是 $e_0$ 的图
588577
589578``` {code-cell} ipython3
590579fig, ax = plt.subplots()
591580plot_excess_demand(ax, good=0)
592581plt.show()
593582```
594583
595- 这是我们对 $e_1$ 的绘图:
584+ 这是 $e_1$ 的图
596585
597586``` {code-cell} ipython3
598587fig, ax = plt.subplots()
@@ -625,21 +614,21 @@ plt.show()
625614init_p = np.ones(2)
626615```
627616
628- 这使用 [ 改进的Powell方法] ( https://docs.scipy.org/doc/scipy/reference/optimize.root-hybr.html#optimize-root-hybr ) 来寻找零点
617+ 这个算法使用 [ 改进的Powell方法] ( https://docs.scipy.org/doc/scipy/reference/optimize.root-hybr.html#optimize-root-hybr ) 来寻找零点
629618
630619``` {code-cell} ipython3
631620%%time
632621solution = root(lambda p: e(p, A, b, c), init_p, method='hybr')
633622```
634623
635- 这是得到的值:
624+ 这是得到的值
636625
637626``` {code-cell} ipython3
638627p = solution.x
639628p
640629```
641630
642- 这个结果看起来和我们从图中观察到的猜测很接近。我们可以把它代回到 $e$ 中验证 $e(p) \approx 0$:
631+ 这个结果看起来和我们从图中观察到的猜测很接近。我们可以把它代回到 $e$ 中验证 $e(p) \approx 0$
643632
644633``` {code-cell} ipython3
645634np.max(np.abs(e(p, A, b, c)))
@@ -650,7 +639,7 @@ np.max(np.abs(e(p, A, b, c)))
650639
651640#### 添加梯度信息
652641
653- 在许多情况下,对于应用于光滑函数的零点查找算法,提供函数的[ 雅可比矩阵] ( https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant ) 可以带来更好的收敛性质。
642+ 在许多情况下,对于应用于光滑函数的零点查找算法,提供函数的[ 雅可比矩阵] ( https://baike.baidu.com/item/%E9%9B%85%E5%8F%AF%E6%AF%94%E7%9F%A9%E9%98%B5?fromModule=lemma_search-box ) 可以带来更好的收敛性质。
654643
655644这里我们手动计算雅可比矩阵的元素
656645
@@ -749,8 +738,6 @@ np.max(np.abs(e(p, A, b, c)))
749738
750739结果非常准确。
751740
752- 由于较大的开销,速度并不比优化后的 ` scipy ` 函数更好。
753-
754741### 高维问题
755742
756743我们的下一步是研究一个有3,000种商品的大型市场。
@@ -948,7 +935,7 @@ init = np.repeat(1.0, 3)
948935 tol=1e-7)
949936```
950937
951- 我们可以看到它正在朝着更精确的解决方案迈进 。
938+ 我们可以看到它正在朝着更精确的解迈进 。
952939
953940``` {solution-end}
954941```
0 commit comments