Skip to content

Commit 2ee8fba

Browse files
authored
Merge pull request #40 from QuantEcon/newton_method
[newton_method] Translation Updates
2 parents 75ac53a + ad0b9a6 commit 2ee8fba

File tree

1 file changed

+31
-44
lines changed

1 file changed

+31
-44
lines changed

lectures/newton_method.md

Lines changed: 31 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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
215211
def 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
251245
k_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
293287
def 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
301295
def 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
392383
def 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
566555
def 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
590579
fig, ax = plt.subplots()
591580
plot_excess_demand(ax, good=0)
592581
plt.show()
593582
```
594583

595-
这是我们对 $e_1$ 的绘图:
584+
这是 $e_1$ 的图
596585

597586
```{code-cell} ipython3
598587
fig, ax = plt.subplots()
@@ -625,21 +614,21 @@ plt.show()
625614
init_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
632621
solution = root(lambda p: e(p, A, b, c), init_p, method='hybr')
633622
```
634623

635-
这是得到的值
624+
这是得到的值
636625

637626
```{code-cell} ipython3
638627
p = solution.x
639628
p
640629
```
641630

642-
这个结果看起来和我们从图中观察到的猜测很接近。我们可以把它代回到 $e$ 中验证 $e(p) \approx 0$
631+
这个结果看起来和我们从图中观察到的猜测很接近。我们可以把它代回到 $e$ 中验证 $e(p) \approx 0$
643632

644633
```{code-cell} ipython3
645634
np.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

Comments
 (0)