Skip to content

Commit ae518ef

Browse files
committed
update lecture
1 parent 30bf98e commit ae518ef

File tree

1 file changed

+65
-60
lines changed

1 file changed

+65
-60
lines changed

lectures/linear_algebra.md

Lines changed: 65 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,22 @@ y_1 = a_{11} x_1 + a_{12} x_2 + \cdots + a_{1k} x_k \\
5555

5656
这里的目标是在已知 $a_{11}, \ldots, a_{nk}$ 和 $y_1, \ldots, y_n$ 的情况下,求解"未知数" $x_1, \ldots, x_k$。
5757

58-
在考虑这类问题时,我们首先必须考虑以下至少一些问题:
58+
在研究这类问题时,我们需要考虑以下几个基本问题:
5959

60-
* 解是否真的存在?
61-
* 是否实际上存在多个解,如果是,我们应该如何解释它们?
62-
* 如果不存在解,是否存在最佳的"近似"解?
63-
* 如果解存在,我们应该如何计算它?
60+
* 这个方程组是否有解?
61+
* 如果有解,解是唯一的吗?如果有多个解,这意味着什么?
62+
* 如果没有精确解,是否可以找到一个最优的近似解?
63+
* 如果解存在,有什么有效的方法可以求出它?
6464

6565
这些都是线性代数所要解决的问题。
6666

67-
在本讲中,我们将介绍线性和矩阵代数的基础知识,包括理论和计算两个方面
67+
本讲将介绍线性代数和矩阵运算的基础知识
6868

69-
我们承认这与[这篇讲座](https://python-programming.quantecon.org/numpy.html)有一些重叠,那里首次解释了NumPy数组的操作
69+
我们将同时关注理论基础和实际计算
7070

71-
请注意,这节课比大多数课程更偏重理论,包含了我们在后续应用中将会用到的背景知识
71+
虽然本讲与我们在[之前的讲座](https://python-programming.quantecon.org/numpy.html)中已经介绍过NumPy数组的基本操作有所重合,但这里我们将从更理论的角度来探讨线性代数
7272

73-
让我们先从一些导入语句开始:
73+
这些理论知识将为我们后续的应用打下重要基础。
7474

7575
```{code-cell} ipython
7676
import matplotlib.pyplot as plt
@@ -95,19 +95,19 @@ from scipy.linalg import inv, solve, det, eig
9595

9696
我们可以根据需要将这些序列横向或纵向书写。
9797

98-
稍后,当我们需要执行某些矩阵运算时,区分这两种写法将变得必要
98+
在后面讨论矩阵运算时,区分横向和纵向表示将变得很重要
9999

100-
所有$n$维向量的集合用$\mathbb R^n$表示
100+
我们用$\mathbb R^n$表示所有$n$维向量的集合
101101

102-
例如,$\mathbb R^2$是平面,而$\mathbb R^2$中的向量就是平面上的一个点
102+
$\mathbb R^2$为例,它代表二维平面,其中的每个向量都对应平面上的一个点
103103

104-
传统上,向量在视觉上被表示为从原点指向某点的箭头
104+
在几何上,我们通常将向量画成一个从原点出发的箭头
105105

106-
下图以这种方式表示了三个向量
106+
让我们看看下面这个例子,其中画出了三个不同的向量:
107107

108108
```{code-cell} ipython
109109
fig, ax = plt.subplots(figsize=(10, 8))
110-
# Set the axes through the origin
110+
# 设置通过原点的轴
111111
for spine in ['left', 'bottom']:
112112
ax.spines[spine].set_position('zero')
113113
for spine in ['right', 'top']:
@@ -306,26 +306,26 @@ ax.plot(z, x, y, 'k-', lw=2, alpha=0.5)
306306
ax.plot(y, z, x, 'k-', lw=2, alpha=0.5)
307307
308308
309-
# Fixed linear function, to generate a plane
309+
# 固定线性函数,生成平面
310310
def f(x, y):
311311
return α * x + β * y
312312
313-
# Vector locations, by coordinate
313+
# 向量位置,按坐标
314314
x_coords = np.array((3, 3))
315315
y_coords = np.array((4, -4))
316316
z = f(x_coords, y_coords)
317317
for i in (0, 1):
318318
ax.text(x_coords[i], y_coords[i], z[i], f'$a_{i+1}$', fontsize=14)
319319
320-
# Lines to vectors
320+
# 连接向量的线
321321
for i in (0, 1):
322322
x = (0, x_coords[i])
323323
y = (0, y_coords[i])
324324
z = (0, f(x_coords[i], y_coords[i]))
325325
ax.plot(x, y, z, 'b-', lw=1.5, alpha=0.6)
326326
327327
328-
# Draw the plane
328+
# 绘制平面
329329
grid_size = 20
330330
xr2 = np.linspace(x_min, x_max, grid_size)
331331
yr2 = np.linspace(y_min, y_max, grid_size)
@@ -338,7 +338,7 @@ plt.show()
338338

339339
#### 示例
340340

341-
如果 $A$ 只包含一个向量 $a_1 \in \mathbb R ^2$,那么它的张成只是 $a_1$ 的标量倍数,即通过 $a_1$ 和原点的唯一直线。
341+
如果 $A$ 只包含一个向量 $a_1 \in \mathbb R ^2$,那么它的张成空间只是 $a_1$ 的标量倍数,即通过 $a_1$ 和原点的唯一直线。
342342

343343
如果 $A = \{e_1, e_2, e_3\}$ 由 $\mathbb R ^3$ 的*标准基向量*组成,即
344344

@@ -365,7 +365,7 @@ e_3 :=
365365
\end{bmatrix}
366366
$$
367367

368-
那么 $A$ 的张成就是整个 $\mathbb R ^3$,因为对于任意的 $x = (x_1, x_2, x_3) \in \mathbb R ^3$,我们可以写成
368+
那么 $A$ 的张成就是整个 $\mathbb R^3$,因为对于任意的 $x = (x_1, x_2, x_3) \in \mathbb R^3$,我们可以写成
369369

370370
$$
371371
x = x_1 e_1 + x_2 e_2 + x_3 e_3
@@ -383,54 +383,61 @@ $$
383383
```{index} single: Vectors; Linear Independence
384384
```
385385

386-
正如我们将看到的,找到具有相对较大张成空间的向量族通常是很有必要的,这样许多向量就可以通过对少数向量进行线性运算来描述
386+
在实际应用中,我们经常需要找到一组能够张成较大空间的向量。这样做的好处是,我们可以用这少数几个向量的线性组合来表示更多的向量
387387

388-
对于一组向量要具有较大的张成空间,我们需要的条件就是所谓的线性无关
388+
要使一组向量能张成较大的空间,这组向量需要满足一个重要条件 -- 线性无关
389389

390390
具体来说,在$\mathbb R ^n$中的一组向量$A := \{a_1, \ldots, a_k\}$被称为
391391

392-
* *线性相关的*如果$A$的某个真子集与$A$具有相同的张成空间
393-
* *线性无关的*如果它不是线性相关的
392+
* *线性相关的*如果集合中至少有一个向量可以表示为其他向量的线性组合
393+
* *线性无关的*如果集合中任何一个向量都不能表示为其他向量的线性组合
394394

395-
换句话说,如果没有向量对张成空间是多余的,那么这组向量就是线性无关的,否则就是线性相关的
395+
这个概念可以通过一个简单的例子来理解
396396

397-
为了说明这个概念,回想{ref}`图示<la_3dvec>`展示了$\mathbb R ^3$中向量$\{a_1, a_2\}$的张成空间是一个经过原点的平面
397+
让我们回到{ref}`图示<la_3dvec>`中的例子,其中$\mathbb R ^3$中的两个向量$\{a_1, a_2\}$张成了一个经过原点的平面
398398

399-
如果我们再取第三个向量$a_3$并形成集合$\{a_1, a_2, a_3\}$,这个集合将会是
399+
如果我们添加第三个向量$a_3$,那么新的集合$\{a_1, a_2, a_3\}$的性质将取决于$a_3$的位置:
400400

401-
* 如果$a_3$位于该平面内,则线性相关
402-
* 否则线性无关
401+
* 如果$a_3$落在$a_1$和$a_2$张成的平面上,那么$a_3$可以表示为$a_1$和$a_2$的线性组合,因此这三个向量是线性相关的
402+
* 如果$a_3$不在该平面上,那么它不能表示为$a_1$和$a_2$的线性组合,因此这三个向量是线性无关的
403403

404-
作为这个概念的另一个说明,由于$\mathbb R ^n$可以由$n$个向量张成(参见上文关于标准基向量的讨论),在$\mathbb R ^n$中任何包含$m > n$个向量的集合必定线性相关
404+
一个重要的性质是:在$\mathbb R ^n$中,任何超过$n$个向量的集合必定是线性相关的。这是因为$\mathbb R ^n$最多需要$n$个向量就能完全张成(就像我们之前看到的标准基向量那样)
405405

406-
以下陈述等价于$A := \{a_1, \ldots, a_k\} \subset \mathbb R ^n$的线性独立性
406+
数学上,向量集合$A := \{a_1, \ldots, a_k\} \subset \mathbb R ^n$的线性无关性可以用以下两种等价方式来表述
407407

408-
1. $A$中的任何向量都不能由其他元素的线性组合表示
409-
1. 如果对于标量$\beta_1, \ldots, \beta_k$,有$\beta_1 a_1 + \cdots \beta_k a_k = 0$,那么$\beta_1 = \cdots = \beta_k = 0$
408+
1. 集合中的任何向量都不能写成其他向量的线性组合
409+
2. 当且仅当所有系数$\beta_1, \ldots, \beta_k$都为零时,线性组合$\beta_1 a_1 + \cdots + \beta_k a_k$等于零向量
410410

411-
第一个表达式中的零是$\mathbb R ^n$的原点
411+
这里的零向量指的是$\mathbb R ^n$中所有分量都是0的向量
412412

413413
(la_unique_reps)=
414414
### 唯一表示
415415

416-
关于线性独立向量集合的另一个优点是,其张成空间中的每个元素都可以唯一地表示为这些向量的线性组合
416+
线性独立向量集合的一个重要性质是唯一表示性:其张成空间中的每个向量都可以用唯一的一组系数来表示
417417

418-
换句话说,如果$A := \{a_1, \ldots, a_k\} \subset \mathbb R ^n$是线性独立的,
418+
具体来说,假设$A := \{a_1, \ldots, a_k\} \subset \mathbb R ^n$是线性独立的,且向量$y$可以表示为:
419419

420420
$$
421-
y = \beta_1 a_1 + \cdots \beta_k a_k
421+
y = \beta_1 a_1 + \cdots + \beta_k a_k
422422
$$
423423

424-
那么其他任何系数序列 $\gamma_1, \ldots, \gamma_k$ 都不会产生相同的向量 $y$
424+
那么这组系数$\beta_1, \ldots, \beta_k$是唯一的
425425

426-
事实上,如果我们也有 $y = \gamma_1 a_1 + \cdots \gamma_k a_k$,
427-
那么
426+
也就是说,不存在另一组不同的系数$\gamma_1, \ldots, \gamma_k$使得:
427+
428+
$$
429+
y = \gamma_1 a_1 + \cdots + \gamma_k a_k
430+
$$
431+
432+
这一点可以通过反证法证明。如果存在这样两组不同的系数,那么:
428433

429434
$$
430435
(\beta_1 - \gamma_1) a_1 + \cdots + (\beta_k - \gamma_k) a_k = 0
431436
$$
432437

433-
线性独立性现在意味着对所有 $i$ 都有 $\gamma_i = \beta_i$。
438+
由线性独立性可知,这种情况只可能在$\beta_i = \gamma_i$ $(i=1,\ldots,k)$时发生。
439+
440+
这与我们假设两组系数不同相矛盾。
434441

435442
## 矩阵
436443

@@ -525,8 +532,6 @@ $$
525532

526533
如果$A$和$B$是两个矩阵,那么它们的乘积$A B$的第$i,j$个元素是由$A$的第$i$行与$B$的第$j$列的内积得到的。
527534

528-
有许多教程可以帮助你理解这个运算,比如[这个](https://www.mathsisfun.com/algebra/matrix-multiplying.html),或者[维基百科页面](https://en.wikipedia.org/wiki/Matrix_multiplication)上的讨论。
529-
530535
如果$A$是$n \times k$矩阵,$B$是$j \times m$矩阵,那么要使$A$和$B$可以相乘,我们需要$k = j$,且得到的矩阵$A B$是$n \times m$的。
531536

532537
作为可能最重要的特例,考虑将$n \times k$矩阵$A$与$k \times 1$列向量$x$相乘。
@@ -556,7 +561,7 @@ A x =
556561
```
557562

558563
```{note}
559-
$A B$ 和 $B A$ 通常不是同一个东西
564+
矩阵乘法不满足交换律,也就是说,$A B$ 和 $B A$ 的结果通常是不同的
560565
```
561566

562567
另一个重要的特殊情况是单位矩阵。
@@ -597,7 +602,7 @@ A.shape
597602

598603
有许多便捷的函数可用于创建常见矩阵(零矩阵、全1矩阵等)--- 参见[这里](https://python-programming.quantecon.org/numpy.html#creating-arrays)
599604

600-
由于运算默认按元素执行,标量乘法和加法具有非常自然的语法
605+
由于运算默认按元素执行,标量乘法和加法的语法具有非常自然
601606

602607
```{code-cell} ipython3
603608
A = np.identity(3)
@@ -635,7 +640,7 @@ $$
635640

636641
你可以验证,当$b$为零向量时,函数$f(x) = A x + b$满足这个性质,而当$b$非零时则不满足。
637642

638-
事实上,已[](https://en.wikipedia.org/wiki/Linear_map#Matrices)$f$是线性的,当且*仅当*存在矩阵$A$使得对所有的$x$都有$f(x) = Ax$。
643+
事实上我们知道,$f$是线性的当且仅当存在矩阵$A$使得对所有的$x$都有$f(x) = Ax$。
639644

640645
## 求解方程组
641646

@@ -689,7 +694,7 @@ for ax in axes:
689694
690695
ax.plot(x, y, 'k-', lw=2, label='$f$')
691696
ax.fill_between(x, ya, yb, facecolor='blue', alpha=0.05)
692-
ax.vlines([0], ya, yb, lw=3, color='blue', label='range of $f$')
697+
ax.vlines([0], ya, yb, lw=3, color='blue', label='$f$的值域')
693698
ax.text(0.04, -0.3, '$0$', fontsize=16)
694699
695700
ax = axes[0]
@@ -777,7 +782,7 @@ $$
777782
```{index} single: Matrix; Determinants
778783
```
779784

780-
关于方阵的另一个简短说明是,每个这样的矩阵都有一个唯一的数,称为矩阵的*行列式*——你可以在[这里](https://en.wikipedia.org/wiki/Determinant)找到它的表达式
785+
每个方阵都有一个与之唯一对应的数值,这个数值被称为矩阵的*行列式*。行列式的具体计算方法可以在[这里](https://baike.baidu.com/item/%E8%A1%8C%E5%88%97%E5%BC%8F/2010180)找到
781786

782787
如果矩阵$A$的行列式不为零,我们就说$A$是*非奇异的*
783788

@@ -875,11 +880,14 @@ A @ x # 应该等于y
875880
solve(A, y) # 产生相同的解
876881
```
877882

878-
观察我们如何通过`inv(A) @ y`或使用`solve(A, y)`来求解$x = A^{-1} y$。
883+
我们可以通过两种方式求解线性方程$x = A^{-1}y$:
884+
885+
1. 使用`inv(A) @ y`显式计算逆矩阵
886+
2. 使用`solve(A, y)`直接求解方程
879887

880-
后一种方法使用不同的算法(LU分解),在数值上更稳定,因此几乎总是应该优先选择
888+
第二种方法基于LU分解,数值稳定性更好,是更推荐的方法
881889

882-
要获得最小二乘解$\hat x = (A'A)^{-1}A'y$,使用`scipy.linalg.lstsq(A, y)`
890+
如果需要求解最小二乘问题$\hat x = (A'A)^{-1}A'y$,可以使用`scipy.linalg.lstsq(A, y)`
883891

884892
(la_eigen)=
885893
## {index}`特征值 <single: Eigenvalues>`和{index}`特征向量 <single: Eigenvectors>`
@@ -900,11 +908,11 @@ $$
900908

901909
则我们称$\lambda$是$A$的*特征值*,而$v$是*特征向量*
902910

903-
因此,$A$的特征向量是指当应用映射$f(x) = Ax$时,$v$仅仅被缩放的向量
911+
换句话说,特征向量是那些经过线性变换$f(x) = Ax$后,方向保持不变、只是长度发生变化的向量
904912

905-
下图显示了两个特征向量(蓝色箭头)及其在$A$下的像(红色箭头)
913+
下图中,蓝色箭头表示两个特征向量,红色箭头表示它们经过变换后的结果
906914

907-
正如预期的那样,每个向量 $v$ 的像 $Av$ 只是原向量的缩放版本
915+
可以看到,每个特征向量$v$经过变换后得到的$Av$都与原向量指向相同的方向,只是长度改变了
908916

909917
```{code-cell} ipython3
910918
---
@@ -917,6 +925,7 @@ evals, evecs = eig(A)
917925
evecs = evecs[:, 0], evecs[:, 1]
918926
919927
fig, ax = plt.subplots(figsize=(10, 8))
928+
920929
# 设置通过原点的坐标轴
921930
for spine in ['left', 'bottom']:
922931
ax.spines[spine].set_position('zero')
@@ -969,7 +978,6 @@ plt.show()
969978
1. $A$ 的行列式等于所有特征值的乘积。
970979
1. $A$ 的迹(主对角线上元素的和)等于所有特征值的和。
971980
1. 如果 $A$ 是对称矩阵,那么它的所有特征值都是实数。
972-
973981
1. 如果$A$是可逆的,且$\lambda_1, \ldots, \lambda_n$是它的特征值,那么$A^{-1}$的特征值是$1/\lambda_1, \ldots, 1/\lambda_n$。
974982

975983
第一个陈述的一个推论是:矩阵可逆当且仅当它的所有特征值都不为零。
@@ -1310,10 +1318,7 @@ $$
13101318
\begin{aligned}
13111319
v(x) &= - x'A'PAx - 2u'B'PAx - u'(Q + B'PB) u\\
13121320
&= - x'A'PAx + x'A'PB(Q + B'PB)^{-1}B'PAx \\
1313-
1314-
$$
1315-
\begin{aligned}
1316-
&= -x'[A'PA - A'PB(Q + B'PB)^{-1}B'PA] x
1321+
&= -x'[A'PA - A'PB(Q + B'PB)^{-1}B'PA] x
13171322
\end{aligned}
13181323
$$
13191324

0 commit comments

Comments
 (0)