@@ -55,22 +55,22 @@ y_1 = a_{11} x_1 + a_{12} x_2 + \cdots + a_{1k} x_k \\
55
55
56
56
这里的目标是在已知 $a_ {11}, \ldots, a_ {nk}$ 和 $y_1, \ldots, y_n$ 的情况下,求解"未知数" $x_1, \ldots, x_k$。
57
57
58
- 在考虑这类问题时,我们首先必须考虑以下至少一些问题:
58
+ 在研究这类问题时,我们需要考虑以下几个基本问题:
59
59
60
- * 解是否真的存在?
61
- * 是否实际上存在多个解,如果是,我们应该如何解释它们?
62
- * 如果不存在解,是否存在最佳的"近似"解?
63
- * 如果解存在,我们应该如何计算它?
60
+ * 这个方程组是否有解?
61
+ * 如果有解,解是唯一的吗?如果有多个解,这意味着什么?
62
+ * 如果没有精确解,是否可以找到一个最优的近似解?
63
+ * 如果解存在,有什么有效的方法可以求出它?
64
64
65
65
这些都是线性代数所要解决的问题。
66
66
67
- 在本讲中,我们将介绍线性和矩阵代数的基础知识,包括理论和计算两个方面 。
67
+ 本讲将介绍线性代数和矩阵运算的基础知识 。
68
68
69
- 我们承认这与 [ 这篇讲座 ] ( https://python-programming.quantecon.org/numpy.html ) 有一些重叠,那里首次解释了NumPy数组的操作 。
69
+ 我们将同时关注理论基础和实际计算 。
70
70
71
- 请注意,这节课比大多数课程更偏重理论,包含了我们在后续应用中将会用到的背景知识 。
71
+ 虽然本讲与我们在 [ 之前的讲座 ] ( https://python-programming.quantecon.org/numpy.html ) 中已经介绍过NumPy数组的基本操作有所重合,但这里我们将从更理论的角度来探讨线性代数 。
72
72
73
- 让我们先从一些导入语句开始:
73
+ 这些理论知识将为我们后续的应用打下重要基础。
74
74
75
75
``` {code-cell} ipython
76
76
import matplotlib.pyplot as plt
@@ -95,19 +95,19 @@ from scipy.linalg import inv, solve, det, eig
95
95
96
96
我们可以根据需要将这些序列横向或纵向书写。
97
97
98
- (稍后,当我们需要执行某些矩阵运算时,区分这两种写法将变得必要 )
98
+ (在后面讨论矩阵运算时,区分横向和纵向表示将变得很重要 )
99
99
100
- 所有$n$维向量的集合用$ \mathbb R^n$表示 。
100
+ 我们用$ \mathbb R^n$表示所有$n$维向量的集合 。
101
101
102
- 例如, $\mathbb R^2$是平面,而$\mathbb R^2$中的向量就是平面上的一个点 。
102
+ 以 $\mathbb R^2$为例,它代表二维平面,其中的每个向量都对应平面上的一个点 。
103
103
104
- 传统上,向量在视觉上被表示为从原点指向某点的箭头 。
104
+ 在几何上,我们通常将向量画成一个从原点出发的箭头 。
105
105
106
- 下图以这种方式表示了三个向量
106
+ 让我们看看下面这个例子,其中画出了三个不同的向量:
107
107
108
108
``` {code-cell} ipython
109
109
fig, ax = plt.subplots(figsize=(10, 8))
110
- # Set the axes through the origin
110
+ # 设置通过原点的轴
111
111
for spine in ['left', 'bottom']:
112
112
ax.spines[spine].set_position('zero')
113
113
for spine in ['right', 'top']:
@@ -306,26 +306,26 @@ ax.plot(z, x, y, 'k-', lw=2, alpha=0.5)
306
306
ax.plot(y, z, x, 'k-', lw=2, alpha=0.5)
307
307
308
308
309
- # Fixed linear function, to generate a plane
309
+ # 固定线性函数,生成平面
310
310
def f(x, y):
311
311
return α * x + β * y
312
312
313
- # Vector locations, by coordinate
313
+ # 向量位置,按坐标
314
314
x_coords = np.array((3, 3))
315
315
y_coords = np.array((4, -4))
316
316
z = f(x_coords, y_coords)
317
317
for i in (0, 1):
318
318
ax.text(x_coords[i], y_coords[i], z[i], f'$a_{i+1}$', fontsize=14)
319
319
320
- # Lines to vectors
320
+ # 连接向量的线
321
321
for i in (0, 1):
322
322
x = (0, x_coords[i])
323
323
y = (0, y_coords[i])
324
324
z = (0, f(x_coords[i], y_coords[i]))
325
325
ax.plot(x, y, z, 'b-', lw=1.5, alpha=0.6)
326
326
327
327
328
- # Draw the plane
328
+ # 绘制平面
329
329
grid_size = 20
330
330
xr2 = np.linspace(x_min, x_max, grid_size)
331
331
yr2 = np.linspace(y_min, y_max, grid_size)
@@ -338,7 +338,7 @@ plt.show()
338
338
339
339
#### 示例
340
340
341
- 如果 $A$ 只包含一个向量 $a_1 \in \mathbb R ^2$,那么它的张成只是 $a_1$ 的标量倍数,即通过 $a_1$ 和原点的唯一直线。
341
+ 如果 $A$ 只包含一个向量 $a_1 \in \mathbb R ^2$,那么它的张成空间只是 $a_1$ 的标量倍数,即通过 $a_1$ 和原点的唯一直线。
342
342
343
343
如果 $A = \{ e_1, e_2, e_3\} $ 由 $\mathbb R ^3$ 的* 标准基向量* 组成,即
344
344
@@ -365,7 +365,7 @@ e_3 :=
365
365
\end{bmatrix}
366
366
$$
367
367
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$,我们可以写成
369
369
370
370
$$
371
371
x = x_1 e_1 + x_2 e_2 + x_3 e_3
383
383
``` {index} single: Vectors; Linear Independence
384
384
```
385
385
386
- 正如我们将看到的,找到具有相对较大张成空间的向量族通常是很有必要的,这样许多向量就可以通过对少数向量进行线性运算来描述 。
386
+ 在实际应用中,我们经常需要找到一组能够张成较大空间的向量。这样做的好处是,我们可以用这少数几个向量的线性组合来表示更多的向量 。
387
387
388
- 对于一组向量要具有较大的张成空间,我们需要的条件就是所谓的线性无关 。
388
+ 要使一组向量能张成较大的空间,这组向量需要满足一个重要条件 -- 线性无关 。
389
389
390
390
具体来说,在$\mathbb R ^n$中的一组向量$A := \{ a_1, \ldots, a_k\} $被称为
391
391
392
- * * 线性相关的* ,如果$A$的某个真子集与$A$具有相同的张成空间 。
393
- * * 线性无关的* ,如果它不是线性相关的 。
392
+ * * 线性相关的* ,如果集合中至少有一个向量可以表示为其他向量的线性组合 。
393
+ * * 线性无关的* ,如果集合中任何一个向量都不能表示为其他向量的线性组合 。
394
394
395
- 换句话说,如果没有向量对张成空间是多余的,那么这组向量就是线性无关的,否则就是线性相关的 。
395
+ 这个概念可以通过一个简单的例子来理解 。
396
396
397
- 为了说明这个概念,回想 {ref}` 图示<la_3dvec> ` 展示了 $\mathbb R ^3$中向量 $\{ a_1, a_2\} $的张成空间是一个经过原点的平面 。
397
+ 让我们回到 {ref}` 图示<la_3dvec> ` 中的例子,其中 $\mathbb R ^3$中的两个向量 $\{ a_1, a_2\} $张成了一个经过原点的平面 。
398
398
399
- 如果我们再取第三个向量 $a_3$并形成集合 $\{ a_1, a_2, a_3\} $,这个集合将会是
399
+ 如果我们添加第三个向量 $a_3$,那么新的集合 $\{ a_1, a_2, a_3\} $的性质将取决于$a_3$的位置:
400
400
401
- * 如果$a_3$位于该平面内,则线性相关
402
- * 否则线性无关
401
+ * 如果$a_3$落在$a_1$和$a_2$张成的平面上,那么$a_3$可以表示为$a_1$和$a_2$的线性组合,因此这三个向量是线性相关的
402
+ * 如果$a_3$不在该平面上,那么它不能表示为$a_1$和$a_2$的线性组合,因此这三个向量是线性无关的
403
403
404
- 作为这个概念的另一个说明,由于 $\mathbb R ^n$可以由 $n$个向量张成(参见上文关于标准基向量的讨论),在 $\mathbb R ^n$中任何包含$m > n$个向量的集合必定线性相关 。
404
+ 一个重要的性质是:在 $\mathbb R ^n$中,任何超过 $n$个向量的集合必定是线性相关的。这是因为 $\mathbb R ^n$最多需要$n$个向量就能完全张成(就像我们之前看到的标准基向量那样) 。
405
405
406
- 以下陈述等价于 $A := \{ a_1, \ldots, a_k\} \subset \mathbb R ^n$的线性独立性 :
406
+ 数学上,向量集合 $A := \{ a_1, \ldots, a_k\} \subset \mathbb R ^n$的线性无关性可以用以下两种等价方式来表述 :
407
407
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$等于零向量 。
410
410
411
- (第一个表达式中的零是 $\mathbb R ^n$的原点 )
411
+ (这里的零向量指的是 $\mathbb R ^n$中所有分量都是0的向量 )
412
412
413
413
(la_unique_reps)=
414
414
### 唯一表示
415
415
416
- 关于线性独立向量集合的另一个优点是,其张成空间中的每个元素都可以唯一地表示为这些向量的线性组合 。
416
+ 线性独立向量集合的一个重要性质是唯一表示性:其张成空间中的每个向量都可以用唯一的一组系数来表示 。
417
417
418
- 换句话说,如果 $A := \{ a_1, \ldots, a_k\} \subset \mathbb R ^n$是线性独立的,且
418
+ 具体来说,假设 $A := \{ a_1, \ldots, a_k\} \subset \mathbb R ^n$是线性独立的,且向量$y$可以表示为:
419
419
420
420
$$
421
- y = \beta_1 a_1 + \cdots \beta_k a_k
421
+ y = \beta_1 a_1 + \cdots + \beta_k a_k
422
422
$$
423
423
424
- 那么其他任何系数序列 $\gamma_1 , \ldots, \gamma_k$ 都不会产生相同的向量 $y$ 。
424
+ 那么这组系数$\beta_1 , \ldots, \beta_k$是唯一的 。
425
425
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
+ 这一点可以通过反证法证明。如果存在这样两组不同的系数,那么:
428
433
429
434
$$
430
435
(\beta_1 - \gamma_1) a_1 + \cdots + (\beta_k - \gamma_k) a_k = 0
431
436
$$
432
437
433
- 线性独立性现在意味着对所有 $i$ 都有 $\gamma_i = \beta_i$。
438
+ 由线性独立性可知,这种情况只可能在$\beta_i = \gamma_i$ $(i=1,\ldots,k)$时发生。
439
+
440
+ 这与我们假设两组系数不同相矛盾。
434
441
435
442
## 矩阵
436
443
525
532
526
533
如果$A$和$B$是两个矩阵,那么它们的乘积$A B$的第$i,j$个元素是由$A$的第$i$行与$B$的第$j$列的内积得到的。
527
534
528
- 有许多教程可以帮助你理解这个运算,比如[ 这个] ( https://www.mathsisfun.com/algebra/matrix-multiplying.html ) ,或者[ 维基百科页面] ( https://en.wikipedia.org/wiki/Matrix_multiplication ) 上的讨论。
529
-
530
535
如果$A$是$n \times k$矩阵,$B$是$j \times m$矩阵,那么要使$A$和$B$可以相乘,我们需要$k = j$,且得到的矩阵$A B$是$n \times m$的。
531
536
532
537
作为可能最重要的特例,考虑将$n \times k$矩阵$A$与$k \times 1$列向量$x$相乘。
@@ -556,7 +561,7 @@ A x =
556
561
```
557
562
558
563
``` {note}
559
- $A B$ 和 $B A$ 通常不是同一个东西 。
564
+ 矩阵乘法不满足交换律,也就是说, $A B$ 和 $B A$ 的结果通常是不同的 。
560
565
```
561
566
562
567
另一个重要的特殊情况是单位矩阵。
@@ -597,7 +602,7 @@ A.shape
597
602
598
603
有许多便捷的函数可用于创建常见矩阵(零矩阵、全1矩阵等)--- 参见[ 这里] ( https://python-programming.quantecon.org/numpy.html#creating-arrays ) 。
599
604
600
- 由于运算默认按元素执行,标量乘法和加法具有非常自然的语法
605
+ 由于运算默认按元素执行,标量乘法和加法的语法具有非常自然
601
606
602
607
``` {code-cell} ipython3
603
608
A = np.identity(3)
635
640
636
641
你可以验证,当$b$为零向量时,函数$f(x) = A x + b$满足这个性质,而当$b$非零时则不满足。
637
642
638
- 事实上,已 [ 知 ] ( https://en.wikipedia.org/wiki/Linear_map#Matrices ) $f$是线性的,当且 * 仅当 * 存在矩阵 $A$使得对所有的$x$都有$f(x) = Ax$。
643
+ 事实上我们知道, $f$是线性的当且仅当存在矩阵 $A$使得对所有的$x$都有$f(x) = Ax$。
639
644
640
645
## 求解方程组
641
646
@@ -689,7 +694,7 @@ for ax in axes:
689
694
690
695
ax.plot(x, y, 'k-', lw=2, label='$f$')
691
696
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$的值域 ')
693
698
ax.text(0.04, -0.3, '$0$', fontsize=16)
694
699
695
700
ax = axes[0]
777
782
``` {index} single: Matrix; Determinants
778
783
```
779
784
780
- 关于方阵的另一个简短说明是,每个这样的矩阵都有一个唯一的数,称为矩阵的 * 行列式* ——你可以在 [ 这里] ( https://en.wikipedia.org/wiki/Determinant ) 找到它的表达式 。
785
+ 每个方阵都有一个与之唯一对应的数值,这个数值被称为矩阵的 * 行列式* 。行列式的具体计算方法可以在 [ 这里] ( https://baike.baidu.com/item/%E8%A1%8C%E5%88%97%E5%BC%8F/2010180 ) 找到 。
781
786
782
787
如果矩阵$A$的行列式不为零,我们就说$A$是* 非奇异的* 。
783
788
@@ -875,11 +880,14 @@ A @ x # 应该等于y
875
880
solve(A, y) # 产生相同的解
876
881
```
877
882
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) ` 直接求解方程
879
887
880
- 后一种方法使用不同的算法(LU分解),在数值上更稳定,因此几乎总是应该优先选择 。
888
+ 第二种方法基于LU分解,数值稳定性更好,是更推荐的方法 。
881
889
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) ` 。
883
891
884
892
(la_eigen)=
885
893
## {index}` 特征值 <single: Eigenvalues> ` 和{index}` 特征向量 <single: Eigenvectors> `
900
908
901
909
则我们称$\lambda$是$A$的* 特征值* ,而$v$是* 特征向量* 。
902
910
903
- 因此,$A$的特征向量是指当应用映射$ f(x) = Ax$时,$v$仅仅被缩放的向量 。
911
+ 换句话说,特征向量是那些经过线性变换$ f(x) = Ax$后,方向保持不变、只是长度发生变化的向量 。
904
912
905
- 下图显示了两个特征向量(蓝色箭头)及其在$A$下的像(红色箭头) 。
913
+ 下图中,蓝色箭头表示两个特征向量,红色箭头表示它们经过变换后的结果 。
906
914
907
- 正如预期的那样,每个向量 $v$ 的像 $Av$ 只是原向量的缩放版本
915
+ 可以看到,每个特征向量 $v$经过变换后得到的 $Av$都与原向量指向相同的方向,只是长度改变了
908
916
909
917
``` {code-cell} ipython3
910
918
---
@@ -917,6 +925,7 @@ evals, evecs = eig(A)
917
925
evecs = evecs[:, 0], evecs[:, 1]
918
926
919
927
fig, ax = plt.subplots(figsize=(10, 8))
928
+
920
929
# 设置通过原点的坐标轴
921
930
for spine in ['left', 'bottom']:
922
931
ax.spines[spine].set_position('zero')
@@ -969,7 +978,6 @@ plt.show()
969
978
1 . $A$ 的行列式等于所有特征值的乘积。
970
979
1 . $A$ 的迹(主对角线上元素的和)等于所有特征值的和。
971
980
1 . 如果 $A$ 是对称矩阵,那么它的所有特征值都是实数。
972
-
973
981
1 . 如果$A$是可逆的,且$\lambda_1, \ldots, \lambda_n$是它的特征值,那么$A^{-1}$的特征值是$1/\lambda_1, \ldots, 1/\lambda_n$。
974
982
975
983
第一个陈述的一个推论是:矩阵可逆当且仅当它的所有特征值都不为零。
@@ -1310,10 +1318,7 @@ $$
1310
1318
\begin{aligned}
1311
1319
v(x) &= - x'A'PAx - 2u'B'PAx - u'(Q + B'PB) u\\
1312
1320
&= - 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
1317
1322
\end{aligned}
1318
1323
$$
1319
1324
0 commit comments