Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .translate/state/linear_algebra.md.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
source-sha: a1cd90c5ef6d6f05277318f47fe21eda60fa5e6b
synced-at: "2026-07-18"
model: claude-sonnet-5
mode: RESYNC
section-count: 7
tool-version: 0.17.0
114 changes: 74 additions & 40 deletions lectures/linear_algebra.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,39 @@ kernelspec:
display_name: Python 3
language: python
name: python3
translation:
title: 线性代数
headings:
Overview: 概述
Vectors: 向量
Vectors::Vector Operations: 向量运算
Vectors::Inner Product and Norm: 内积和范数
Vectors::Span: 张成空间
Vectors::Span::Examples: 示例
Vectors::Linear Independence: 线性无关
Vectors::Unique Representations: 唯一表示
Matrices: 矩阵
Matrices::Matrix Operations: 矩阵运算
Matrices::Matrices in NumPy: NumPy中的矩阵
Matrices::Matrices as Maps: 矩阵作为映射
Solving Systems of Equations: 求解方程组
Solving Systems of Equations::The Square Matrix Case: 方阵的情况
Solving Systems of Equations::The Square Matrix Case::Inverse Matrices: 逆矩阵
Solving Systems of Equations::The Square Matrix Case::Determinants: 行列式
Solving Systems of Equations::More Rows than Columns: 行数多于列数
Solving Systems of Equations::More Columns than Rows: 列数多于行数
Solving Systems of Equations::Linear Equations with SciPy: 使用SciPy求解线性方程
Eigenvalues and Eigenvectors: 特征值和特征向量
Eigenvalues and Eigenvectors::Generalized Eigenvalues: 广义特征值
Further Topics: 进阶概念
Further Topics::Series Expansions: 级数展开
Further Topics::Series Expansions::Matrix Norms: 矩阵范数
Further Topics::Series Expansions::Neumann's Theorem: 诺伊曼定理
Further Topics::Series Expansions::Spectral Radius: 谱半径
Further Topics::Positive Definite Matrices: 正定矩阵
Further Topics::Differentiating Linear and Quadratic Forms: 线性和二次型的求导
Further Topics::Further Reading: 延伸阅读
Exercises: 练习
---

(linear_algebra)=
Expand Down Expand Up @@ -69,7 +102,9 @@ $$

虽然本讲与我们在[之前的讲座](https://python-programming.quantecon.org/numpy.html)中已经介绍过NumPy数组的基本操作有所重合,但这里我们将从更理论的角度来探讨线性代数。

这些理论知识将为我们后续的应用打下重要基础。
请注意,本讲比大多数讲座更偏重理论,其中包含的背景知识将在我们后续的应用中逐步用到。

让我们从一些导入开始:

```{code-cell} ipython
import matplotlib.pyplot as plt
Expand Down Expand Up @@ -100,9 +135,9 @@ from scipy.linalg import inv, solve, det, eig

以$\mathbb R^2$为例,它代表二维平面,其中的每个向量都对应平面上的一个点。

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

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

```{code-cell} ipython
fig, ax = plt.subplots(figsize=(10, 8))
Expand Down Expand Up @@ -246,15 +281,25 @@ $$
继续前面的例子,内积和范数可以按如下方式计算

```{code-cell} ipython3
np.sum(x * y) # x和y的内积
np.sum(x * y) # x和y的内积,方法1
```

```{code-cell} ipython3
np.sqrt(np.sum(x**2)) # x的范数,第一种方法
x @ y # x和y的内积,方法2(推荐)
```

推荐使用`@`运算符,因为它使用了经过优化的BLAS库来实现乘加融合运算,相比分别进行乘法和求和运算,具有更好的性能和数值精度。

```{code-cell} ipython3
np.sqrt(np.sum(x**2)) # x的范数,方法1
```

```{code-cell} ipython3
np.linalg.norm(x) # x的范数,第二次计算
np.sqrt(x @ x) # x的范数,方法2(推荐)
```

```{code-cell} ipython3
np.linalg.norm(x) # x的范数,方法3
```

### 张成空间
Expand Down Expand Up @@ -388,55 +433,47 @@ $$

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

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

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

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

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

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

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

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

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

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

(la_unique_reps)=
### 唯一表示

线性独立向量集合的一个重要性质是唯一表示性:其张成空间中的每个向量都可以用唯一的一组系数来表示。

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

$$
y = \beta_1 a_1 + \cdots + \beta_k a_k
y = \beta_1 a_1 + \cdots \beta_k a_k
$$

那么这组系数$\beta_1, \ldots, \beta_k$是唯一的
那么不存在其他系数序列$\gamma_1, \ldots, \gamma_k$能够得到相同的向量$y$

也就是说,不存在另一组不同的系数$\gamma_1, \ldots, \gamma_k$使得:

$$
y = \gamma_1 a_1 + \cdots + \gamma_k a_k
$$

这一点可以通过反证法证明。如果存在这样两组不同的系数,那么:
事实上,如果我们同时有$y = \gamma_1 a_1 + \cdots \gamma_k a_k$,那么

$$
(\beta_1 - \gamma_1) a_1 + \cdots + (\beta_k - \gamma_k) a_k = 0
$$

由线性独立性可知,这种情况只可能在$\beta_i = \gamma_i$ $(i=1,\ldots,k)$时发生。

这与我们假设两组系数不同相矛盾。
由线性无关性可知,对所有的$i$都有$\gamma_i = \beta_i$。

## 矩阵

Expand Down Expand Up @@ -530,6 +567,8 @@ $$

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

有许多教程可以帮助你理解这个运算,比如[这个](https://www.mathsisfun.com/algebra/matrix-multiplying.html),或者[维基百科页面](https://en.wikipedia.org/wiki/Matrix_multiplication)上的讨论。

如果$A$是$n \times k$矩阵,$B$是$j \times m$矩阵,那么要使$A$和$B$可以相乘,我们需要$k = j$,且得到的矩阵$A B$是$n \times m$的。

作为可能最重要的特例,考虑将$n \times k$矩阵$A$与$k \times 1$列向量$x$相乘。
Expand Down Expand Up @@ -637,7 +676,7 @@ $$

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

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

## 求解方程组

Expand Down Expand Up @@ -779,7 +818,7 @@ $$
```{index} single: Matrix; Determinants
```

每个方阵都有一个与之唯一对应的数值,这个数值被称为矩阵的*行列式*。行列式的具体计算方法可以在[这里](https://baike.baidu.com/item/%E8%A1%8C%E5%88%97%E5%BC%8F/2010180)找到。
每个方阵都有一个与之唯一对应的数值,这个数值被称为矩阵的*行列式*。行列式的具体计算方法可以在[这里](https://en.wikipedia.org/wiki/Determinant)找到。

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

Expand Down Expand Up @@ -877,14 +916,11 @@ A @ x # 应该等于y
solve(A, y) # 产生相同的解
```

我们可以通过两种方式求解线性方程$x = A^{-1}y$:

1. 使用`inv(A) @ y`显式计算逆矩阵
2. 使用`solve(A, y)`直接求解方程
请注意我们可以通过`inv(A) @ y`或使用`solve(A, y)`来求解$x = A^{-1} y$。

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

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

(la_eigen)=
## {index}`特征值 <single: Eigenvalues>`和{index}`特征向量 <single: Eigenvectors>`
Expand Down Expand Up @@ -1114,7 +1150,6 @@ $$
1. $\frac{\partial A x}{\partial x} = A'$
1. $\frac{\partial x'A x}{\partial x} = (A + A') x$
1. $\frac{\partial y'B z}{\partial y} = B z$

1. $\frac{\partial y'B z}{\partial B} = y z'$

下面的{ref}`la_ex1`要求你应用这些公式。
Expand Down Expand Up @@ -1330,4 +1365,3 @@ $\tilde{P} := A'PA - A'PB(Q + B'PB)^{-1}B'PA$
参见[此讨论](https://python-programming.quantecon.org/numpy.html#matrix-multiplication)。

[^cfn]: 假设 $\|S \| < 1$。取任意非零向量 $x$,令 $r := \|x\|$。我们有 $\| Sx \| = r \| S (x/r) \| \leq r \| S \| < r = \| x\|$。因此每个点都被拉向原点。

Loading