Skip to content

Commit 21d0cde

Browse files
authored
Merge pull request #43 from QuantEcon/qr_decomp-translate
[qr_decomp.md] Translation Updates
2 parents 122b46f + 9955733 commit 21d0cde

File tree

1 file changed

+29
-36
lines changed

1 file changed

+29
-36
lines changed

lectures/qr_decomp.md

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ kernelspec:
1919

2020
* 正交投影和最小二乘法
2121

22-
* Gram-Schmidt正交化过程
22+
* 格拉姆-施密特(Gram-Schmidt)正交化
2323

2424
* 特征值和特征向量
2525

@@ -41,23 +41,23 @@ $$
4141

4242
* $R$是上三角矩阵
4343

44-
我们将使用**Gram-Schmidt正交化过程**来计算QR分解
44+
我们将使用**格拉姆-施密特正交化**来计算QR分解
4545

46-
由于这个过程很有教育意义,我们将编写自己的Python代码来完成这项工作
46+
由于这个过程很有意思,我们将编写自己的Python代码来完成这项工作
4747

48-
## 格拉姆-施密特正交化过程
48+
## 格拉姆-施密特正交化
4949

5050
我们从一个**方阵**$A$开始。
5151

5252
如果方阵$A$是非奇异的,那么$QR$分解是唯一的。
5353

54-
我们稍后会处理矩形矩阵$A$。
55-
5654
实际上,我们的算法也适用于非方阵的矩形矩阵$A$。
5755

58-
### 方阵$A$的格拉姆-施密特过程
56+
我们稍后会处理矩形矩阵$A$
5957

60-
这里我们对矩阵$A$的****应用格拉姆-施密特过程。
58+
### 方阵$A$的格拉姆-施密特正交化
59+
60+
这里我们对矩阵$A$的****运用格拉姆-施密特正交化。
6161

6262
具体来说,令
6363

@@ -87,7 +87,7 @@ $$
8787

8888
我们邀请读者通过验证 $e_1 \cdot e_2 = 0$ 来确认 $e_1$ 与 $e_2$ 正交。
8989

90-
Gram-Schmidt过程继续迭代
90+
格拉姆-施密特算法过程迭代这个过程
9191

9292
因此,对于 $k= 2, \ldots, n-1$,我们构造
9393

@@ -97,8 +97,7 @@ $$
9797

9898
这里的 $(a_j \cdot e_i)$ 可以被解释为 $a_j$ 在 $e_i$ 上的线性最小二乘**回归系数**
9999

100-
* 它是 $a_j$ 和 $e_i$ 的内积除以 $e_i$ 的内积,其中
101-
由于*标准化*,我们知道 $e_i \cdot e_i = 1$
100+
* 它是 $a_j$ 和 $e_i$ 的内积除以 $e_i$ 的内积,其中由于*标准化*,我们知道 $e_i \cdot e_i = 1$
102101

103102
* 这个回归系数可以解释为**协方差**除以**方差**
104103

@@ -108,11 +107,10 @@ $$
108107
A= \left[ \begin{array}{c|c|c|c} a_1 & a_2 & \cdots & a_n \end{array} \right]=
109108
\left[ \begin{array}{c|c|c|c} e_1 & e_2 & \cdots & e_n \end{array} \right]
110109
\left[ \begin{matrix} a_1·e_1 & a_2·e_1 & \cdots & a_n·e_1\\ 0 & a_2·e_2 & \cdots & a_n·e_2
111-
112110
\\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_n·e_n \end{matrix} \right]
113111
$$
114112

115-
因此,我们构造了分解
113+
因此,我们构造了矩阵分解
116114

117115
$$
118116
A = Q R
@@ -128,8 +126,8 @@ $$
128126
129127

130128
$$
131-
R = \left[ \begin{matrix} a_1·e_1 & a_2·e_1 & \cdots & a_n·e_1\\ 0 & a_2·e_2 & \cdots & a_n·e_2
132-
\\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_n·e_n \end{matrix} \right]
129+
R = \left[ \begin{matrix} a_1·e_1 & a_2·e_1 & \cdots & a_n·e_1\\ 0 & a_2·e_2 & \cdots & a_n·e_2 \\
130+
\vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & a_n·e_n \end{matrix} \right]
133131
$$
134132

135133
### $A$ 非方阵
@@ -141,7 +139,6 @@ $$
141139
$$
142140
A= \left[ \begin{array}{c|c|c|c} a_1 & a_2 & \cdots & a_m \end{array} \right]=\left[ \begin{array}{c|c|c|c} e_1 & e_2 & \cdots & e_n \end{array} \right]
143141
\left[ \begin{matrix} a_1·e_1 & a_2·e_1 & \cdots & a_n·e_1 & a_{n+1}\cdot e_1 & \cdots & a_{m}\cdot e_1 \\
144-
145142
0 & a_2·e_2 & \cdots & a_n·e_2 & a_{n+1}\cdot e_2 & \cdots & a_{m}\cdot e_2 \\ \vdots & \vdots & \ddots & \quad \vdots & \vdots & \ddots & \vdots
146143
\\ 0 & 0 & \cdots & a_n·e_n & a_{n+1}\cdot e_n & \cdots & a_{m}\cdot e_n \end{matrix} \right]
147144
$$
@@ -160,7 +157,7 @@ a_m & = (a_m\cdot e_1) e_1 + (a_m\cdot e_2) e_2 + \cdots + (a_m \cdot e_n) e_n
160157

161158
## 一些代码
162159

163-
现在让我们编写一些自制的Python代码,通过部署上述的Gram-Schmidt过程来实现QR分解
160+
现在让我们编写一些自制的Python代码,通过部署上述的格拉姆-施密特正交化来实现QR分解
164161

165162
```{code-cell} ipython3
166163
import numpy as np
@@ -193,19 +190,19 @@ def QR_Decomposition(A):
193190
return Q, R
194191
```
195192

196-
前面的代码没问题,但可以进行一些进一步的整理
193+
前面的代码没问题,但可以进一步进行整理
197194

198-
我们这样做是因为在本notebook后面部分,我们想要比较使用上面的自制代码与Python `scipy`包提供的QR代码所得到的结果
195+
这样做的目的是为了后续能够将我们自制的QR分解代码与`scipy`包中的QR分解函数进行对比
199196

200197
不同的数值算法产生的$Q$和$R$矩阵之间可能存在符号差异。
201198

202199
由于在计算$QR$时这些符号差异会相互抵消,所以这些都是有效的QR分解。
203200

204-
但是,为了使我们自制函数和`scipy`中的QR模块的结果具有可比性,让我们要求$Q$具有正对角线元素。
201+
但是,为了使我们自制函数和`scipy`中QR模块的结果具有可比性,让我们要求$Q$具有正对角线元素。
205202

206203
我们通过适当调整$Q$中列的符号和$R$中行的符号来实现这一点。
207204

208-
为了实现这个目标,我们将定义一对函数
205+
我们将定义一对函数来完成上述要求
209206

210207
```{code-cell} ipython3
211208
def diag_sign(A):
@@ -218,7 +215,7 @@ def diag_sign(A):
218215
def adjust_sign(Q, R):
219216
"""
220217
调整Q中列的符号和R中行的符号,
221-
以确保Q的对角线为正
218+
以确保Q的正对角线属性
222219
"""
223220
224221
D = diag_sign(Q)
@@ -231,13 +228,10 @@ def adjust_sign(Q, R):
231228

232229
## 示例
233230

234-
现在让我们做一个例子
231+
现在让我们举一个例子
235232

236233
```{code-cell} ipython3
237234
A = np.array([[1.0, 1.0, 0.0], [1.0, 0.0, 1.0], [0.0, 1.0, 1.0]])
238-
# A = np.array([[1.0, 0.5, 0.2], [0.5, 0.5, 1.0], [0.0, 1.0, 1.0]])
239-
# A = np.array([[1.0, 0.5, 0.2], [0.5, 0.5, 1.0]])
240-
241235
A
242236
```
243237

@@ -297,13 +291,13 @@ Q_scipy, R_scipy
297291

298292
算法如下:
299293

300-
1. 设 $A_0 = A$ 并形成 $A_0 = Q_0 R_0$
294+
1. 设 $A_0 = A$ 并构建 $A_0 = Q_0 R_0$
301295

302-
2. 形成 $A_1 = R_0 Q_0$。注意 $A_1$ 与 $A_0$ 相似(易于验证),因此具有相同的特征值。
296+
2. 构建 $A_1 = R_0 Q_0$。注意 $A_1$ 与 $A_0$ 相似(易于验证),因此具有相同的特征值。
303297

304-
3. 形成 $A_1 = Q_1 R_1$ (即,形成 $A_1$ 的 $QR$ 分解)。
298+
3. 构建 $A_1 = Q_1 R_1$ (即构建 $A_1$ 的 $QR$ 分解)。
305299

306-
4. 形成 $A_2 = R_1 Q_1$ 然后 $A_2 = Q_2 R_2$。
300+
4. 构建 $A_2 = R_1 Q_1$ 然后构建 $A_2 = Q_2 R_2$。
307301

308302
5. 迭代直至收敛。
309303

@@ -312,8 +306,7 @@ Q_scipy, R_scipy
312306
```{todo}
313307
@mmcky to migrate this to use [sphinx-proof](https://sphinx-proof.readthedocs.io/en/latest/syntax.html#algorithms)
314308
```
315-
316-
**注意:** 这个算法接近于计算特征值最有效的方法之一!
309+
**注意:** 这个算法实际上非常接近计算特征值最高效的方法!
317310

318311
让我们编写一些Python代码来尝试这个算法
319312

@@ -345,7 +338,7 @@ def QR_eigvals(A, tol=1e-12, maxiter=1000):
345338
开始吧
346339

347340
```{code-cell} ipython3
348-
# 用一个随机A矩阵做实验
341+
# 用一个随机矩阵A做实验
349342
A = np.random.random((3, 3))
350343
```
351344

@@ -365,15 +358,15 @@ $QR$ 分解与主成分分析(PCA)之间存在一些有趣的联系。
365358

366359
以下是一些联系:
367360

368-
1. 设 $X'$ 是一个 $k \times n$ 的随机矩阵,其中第 $j$ 列是从 ${\mathcal N}(\mu, \Sigma)$ 分布中随机抽取的样本,这里 $\mu$ 是 $k \times 1$ 的均值向量,$\Sigma$ 是 $k \times k$ 的协方差矩阵。我们需要 $n > > k$ —— 这是一个"计量经济学的例子"
361+
1. 设 $X'$ 是一个 $k \times n$ 的随机矩阵,其中第 $j$ 列是从 ${\mathcal N}(\mu, \Sigma)$ 分布中随机抽取的样本,这里 $\mu$ 是 $k \times 1$ 的均值向量,$\Sigma$ 是 $k \times k$ 的协方差矩阵。我们需要 $n > > k$ —— 这是一个"计量经济学"的例子
369362

370363
2. 将 $X'$ 分解为 $X' = Q R$,其中 $Q$ 是 $k \times k$ 矩阵,$R$ 是 $k \times n$ 矩阵。
371364

372365
3. 计算 $R R'$ 的特征值,即我们将计算 $R R' = \tilde P \Lambda \tilde P'$。
373366

374367
4. 构造 $X' X = Q \tilde P \Lambda \tilde P' Q'$ 并与特征分解 $X'X = P \hat \Lambda P'$ 进行比较。
375368

376-
5. 我们将发现 $\Lambda = \hat \Lambda$ 且 $P = Q \tilde P$。
369+
5. 我们应该会发现 $\Lambda = \hat \Lambda$ 且 $P = Q \tilde P$。
377370

378371
让我们用Python代码来验证推测5。
379372

@@ -411,7 +404,7 @@ Q.shape, R.shape
411404
```
412405

413406

414-
现在我们可以构造 $R R^{\prime}=\tilde{P} \Lambda \tilde{P}^{\prime}$ 并形成特征分解
407+
现在我们可以构造 $R R^{\prime}=\tilde{P} \Lambda \tilde{P}^{\prime}$ 并构建特征分解
415408

416409
```{code-cell} ipython3
417410
RR = R @ R.T

0 commit comments

Comments
 (0)