Skip to content

Commit ad0b9a6

Browse files
committed
updates
1 parent e05e310 commit ad0b9a6

File tree

1 file changed

+24
-29
lines changed

1 file changed

+24
-29
lines changed

lectures/newton_method.md

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ 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
## 概述
@@ -40,25 +40,25 @@ kernelspec:
4040

4141
换句话说,均衡是超额需求函数的零点。
4242

43-
有各种计算技术可用于求解不动点和零点
43+
有各种算法可用于求解不动点和零点
4444

4545
在本讲中,我们将学习一种重要的基于梯度的技术,称为[牛顿法](https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95?fromModule=lemma_search-box)
4646

4747
牛顿法并非总是有效,但在适用的情况下,其收敛速度通常比其他方法更快。
4848

49-
本讲将在一维和多维环境中应用牛顿法来解决不动点和零点查找问题
49+
本讲将在一维和多维环境中应用牛顿法来解决不动点和零点计算问题
5050

51-
* 在寻找函数$f$的不动点时,牛顿法通过求解一个函数 $f$ 的线性近似。
51+
牛顿法的基本思路是:
5252

53-
* 在寻找函数 $f$ 的零点时,牛顿法通过求解函数 $f$ 的线性近似的零点来更新
54-
现有的猜测值。
53+
* 对于不动点问题,通过对函数 $f$ 进行线性近似来寻找不动点。
5554

56-
为了建立直观认识,我们首先考虑一个简单的一维不动点问题,其中我们已知解,并使用连续
57-
近似和牛顿法来求解。
55+
* 对于零点问题,通过求解函数 $f$ 的线性近似的零点,不断更新当前的估计值,直到收敛到真实的零点。
5856

59-
然后我们将牛顿法应用到多维环境中,求解多种商品的市场均衡
57+
为了建立直观认识,我们首先考虑一个简单的一维不动点问题,其中我们已知解,并使用连续近似和牛顿法来求解
6058

61-
在讲座最后,我们利用 [`autograd`](https://github.com/HIPS/autograd) 中自动微分的强大功能来求解一个非常高维的均衡问题。
59+
然后我们将牛顿法应用到多维环境中,求解多种商品的市场均衡问题。
60+
61+
最后,我们将使用 [`autograd`](https://github.com/HIPS/autograd) 包提供的自动微分功能来处理一个高维均衡问题。
6262

6363
```{code-cell} ipython3
6464
:tags: [hide-output]
@@ -113,7 +113,7 @@ plt.rcParams["figure.figsize"] = (10, 5.7)
113113
换句话说,我们要寻找一个 $k^* > 0$ 使得 $g(k^*)=k^*$。
114114

115115
* 这样的 $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^*$。
116+
因为当 $k_t = k^*$ 时,$k_{t+1} = k^*$。
117117

118118
用纸笔解方程 $g(k)=k$,你可以验证
119119

@@ -205,7 +205,7 @@ plt.show()
205205

206206
在这种情况下,连续近似法意味着从某个初始状态 $k_0$ 开始,使用运动规律反复更新资本。
207207

208-
这里是从特定选择的 $k_0$ 得到的时间序列
208+
这里是以特定的 $k_0$ 为初始值得到的时间序列
209209

210210
```{code-cell} ipython3
211211
def compute_iterates(k_0, f, params, n=25):
@@ -241,7 +241,6 @@ k_star_approx
241241

242242
这接近真实值。
243243

244-
245244
```{code-cell} ipython3
246245
k_star
247246
```
@@ -282,15 +281,15 @@ g'(k) = \alpha s A k^{\alpha-1} + (1-\delta)
282281
283282
```
284283

285-
让我们定义这个:
284+
让我们定义这个函数
286285

287286
```{code-cell} ipython3
288287
def Dg(k, params):
289288
A, s, α, δ = params
290289
return α * A * s * k**(α-1) + (1 - δ)
291290
```
292291

293-
这里有一个函数 $q$ 表示 [](newtons_method)
292+
下面的函数 $q$ 表示 [](newtons_method)
294293

295294
```{code-cell} ipython3
296295
def q(k, params):
@@ -349,7 +348,6 @@ plot_trajectories(params)
349348
让我们讨论这个"求根"问题,然后说明它与寻找不动点的问题是如何联系的。
350349

351350

352-
353351
### 牛顿法求零点
354352

355353
假设我们想要找到一个 $x$ 使得对某个光滑函数 $f$ (从实数映射到实数)有 $f(x)=0$。
@@ -430,10 +428,9 @@ k_star_approx_newton
430428
结果证实了我们在上面图表中看到的收敛情况:仅需5次迭代就达到了非常精确的结果。
431429

432430

433-
434431
## 多元牛顿法
435432

436-
在本节中,我们将介绍一个双商品问题,展示问题的可视化,并使用`SciPy`中的零点查找器和牛顿法来求解这个双商品市场的均衡。
433+
在本节中,我们将介绍一个双商品问题,可视化问题,并使用`SciPy`中的零点查找器和牛顿法来求解这个双商品市场的均衡。
437434

438435
然后,我们将这个概念扩展到一个包含5,000种商品的更大市场,并再次比较这两种方法的性能。
439436

@@ -550,14 +547,14 @@ print(f'商品0的超额需求为 {ex_demand[0]:.3f} \n'
550547
f'商品1的超额需求为 {ex_demand[1]:.3f}')
551548
```
552549

553-
接下来我们在$(p_0, p_1)$值的网格上绘制两个函数$e_0$和$e_1$的等高线图和曲面
550+
接下来我们在$(p_0, p_1)$值的网格上绘制两个函数$e_0$和$e_1$的等高线图和曲面图
554551

555552
我们将使用以下函数来构建等高线图
556553

557554
```{code-cell} ipython3
558555
def plot_excess_demand(ax, good=0, grid_size=100, grid_max=4, surface=True):
559556
560-
# Create a 100x100 grid
557+
# 创建一个100x100的网格
561558
p_grid = np.linspace(0, grid_max, grid_size)
562559
z = np.empty((100, 100))
563560
@@ -572,19 +569,19 @@ def plot_excess_demand(ax, good=0, grid_size=100, grid_max=4, surface=True):
572569
ctr1 = ax.contour(p_grid, p_grid, z.T, levels=[0.0])
573570
ax.set_xlabel("$p_0$")
574571
ax.set_ylabel("$p_1$")
575-
ax.set_title(f'Excess Demand for Good {good}')
572+
ax.set_title(f'超额需求函数 {good}')
576573
plt.clabel(ctr1, inline=1, fontsize=13)
577574
```
578575

579-
这是我们对 $e_0$ 的绘图:
576+
这是 $e_0$ 的图
580577

581578
```{code-cell} ipython3
582579
fig, ax = plt.subplots()
583580
plot_excess_demand(ax, good=0)
584581
plt.show()
585582
```
586583

587-
这是我们对 $e_1$ 的绘图:
584+
这是 $e_1$ 的图
588585

589586
```{code-cell} ipython3
590587
fig, ax = plt.subplots()
@@ -617,21 +614,21 @@ plt.show()
617614
init_p = np.ones(2)
618615
```
619616

620-
这使用[改进的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)来寻找零点
621618

622619
```{code-cell} ipython3
623620
%%time
624621
solution = root(lambda p: e(p, A, b, c), init_p, method='hybr')
625622
```
626623

627-
这是得到的值
624+
这是得到的值
628625

629626
```{code-cell} ipython3
630627
p = solution.x
631628
p
632629
```
633630

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

636633
```{code-cell} ipython3
637634
np.max(np.abs(e(p, A, b, c)))
@@ -741,8 +738,6 @@ np.max(np.abs(e(p, A, b, c)))
741738

742739
结果非常准确。
743740

744-
由于较大的开销,速度并不比优化后的 `scipy` 函数更好。
745-
746741
### 高维问题
747742

748743
我们的下一步是研究一个有3,000种商品的大型市场。
@@ -940,7 +935,7 @@ init = np.repeat(1.0, 3)
940935
tol=1e-7)
941936
```
942937

943-
我们可以看到它正在朝着更精确的解决方案迈进
938+
我们可以看到它正在朝着更精确的解迈进
944939

945940
```{solution-end}
946941
```

0 commit comments

Comments
 (0)