线代学习笔记

First Post:

Last Update:

Word Count:
5.6k

Read Time:
22 min

课程:线性代数 MIT 18.06 Linear Algebra

课本:Introduction to Linear Algebra 线性代数(原书第6版) (Gilbert Strang 吉尔伯特·斯特朗著)

一.消元法

以下讨论的矩阵为 阶矩阵。

1.引入

我们从前经常接触线性方程组,例如

常见解法为:

1.用式子 (1) 减去式子 (2) 的 2 倍:

2.式子 (2) × 2:

3.(1) 减上式:,得 ,解得

4.代回 (2):,解得

可以发现:整个过程中, 只是占位符,真正被操作的是系数右边的数

上述消元中的每一步,无非是三种基本操作:

  1. 把一个方程乘以一个非零常数
  2. 两个方程相加减
  3. 交换两个方程的顺序

可以发现:消元法的每一步,都是对矩阵的行做线性组合。而任何对行的线性组合,都等价于在矩阵左边乘一个特定的矩阵。

由此可以得到线性方程组的一个通用解法:先通过线性变换 ,使得 ,从而将 化为上三角矩阵,这样就可以从下往上依次回代解出所有未知量。

2.解的情况

将上例方程写成矩阵形式,为:

即为:

可以发现: 本质是用系数矩阵的每个列向量进行线性组合,看是否能得到

1.如果矩阵满秩,说明列空间内含有所有这个维度的向量,类似平面向量基本定理,可以证明这种线性组合是唯一的。

2.如果矩阵不满秩,则b可能不在列空间中,则无解;如果在,那么有无数解,且解的形式为:特解+零空间内的任一向量

关于唯一性的证明:

法一:

已知 的列向量线性无关。
等价于 的零空间里只有零向量。即, 的唯一解是

证明

  1. 假设有两个解:设 都是方程 的解。
    这意味着:

  2. 相减,利用线性性质
    把两个等式相减:

    因为是线性变换,所以可以提取公因子:

  3. 引入零空间
    这个等式说明,向量 被变换 作用后,结果是零向量。
    因此,(它属于 的零空间)。

  4. 利用已知条件(列线性无关 零空间只有零向量)
    我们已知 的列向量线性无关,这意味着

  5. 得出唯一性
    所以,,即

证毕。

法二:

已知,且列向量 线性无关。

证明

  1. 用列向量写出方程
    方程 可以写成列向量的线性组合形式:

    这里 是未知的比例系数。

  2. 反证法(假设解不唯一)
    假设存在两组不同的系数 ,都能组合出 。即:

  3. 相减,重组
    两式相减:

  4. 触发线性无关的定义
    因为向量 是线性无关的,根据定义,只有所有系数全为零时,它们的线性组合才能是零向量

  5. 得出矛盾
    所以,必然有:

    这意味着 。两组系数完全相同。

证毕。

3.初等矩阵 E 和置换矩阵 P

我们希望将 化为上三角矩阵,那么就需要对 进行线性变换。

想快速写出 ,我们不能再使用矩阵乘法的列表示,而应用行,因为我们在对 进行行变换。

例如:

初等行变换 将第二行减去第一行的两倍,则

可以得到:

为什么是这样?

可以发现,行向量 的意思是:取 份旧第一行 + 份旧第二行 + 份旧第三行,混合成新的一行。

,左乘

新第一行:

新第二行:,完全不变。
新第三行:,完全不变。

结果就是只有第一行被乘了 2,其他行原样不动。

当然,我们需要进行若干次这种操作,所以变换是复合变换。

但在一些情况下,0可能出现在主元的位置,我们需要进行行交换,这样的矩阵叫置换矩阵。

原理是类似的,不再赘述,仅举一例。

例如:

可以得到:

虽然与消元无关,不过还是提一下:关于行交换与列交换

同一个置换矩阵,左乘就是行交换,右乘就是列交换。

可以从几何意义上理解

左乘 是在输出空间做变换

当左乘置换矩阵 时:

这相当于 变换,然后在输出空间里把坐标轴交换。

例如 ,左乘 得到的新矩阵

  • 几何意义:把 的每个像向量 ,再进行一次关于直线 的反射(交换两个坐标)。原来在 的点,现在变成

因此,行交换 = 重新排列输出空间的坐标轴顺序

右乘 是在输入空间做变换

当右乘置换矩阵 时:

这相当于在输入空间交换基向量,然后 变换。

同样用 ,右乘 得到

  • 几何意义:把输入的标准基 先对调(),再被 映射。原来的第一列( 的像)现在跑到第二列,第二列跑到第一列。

因此,列交换 = 重新排列输入空间的基向量顺序

二.矩阵乘法和逆矩阵

1.矩阵乘法

定义:设矩阵 矩阵,矩阵 矩阵,则

理解一:向量点积

操作: 的元素 = 的第 行 · 的第 列(行点乘列)。

这是最基础的计算方式,适合手算具体元素。但它只关注“数字”,看不到矩阵整体的变换。

理解二:列线性组合

操作: 的第 列 = 的各列以 的第 列为系数的线性组合。

这是你之前理解的“ = 的各列以 为系数的线性组合”的直接推广。它告诉你, 的每一列都是 的列向量的某种“调配”。

理解三:行线性组合

操作: 的第 行 = 的各行以 的第 行为系数的线性组合。

和上一种理解是对称的。 的每一行给了“配方系数”,去混合 的各行,产生 的新行。

这是从“约束”视角看问题。左乘 等价于对 做行变换,而 的每一行就是变换的“配方”。

理解四:列乘行

操作: =

任何矩阵乘法都可以拆成一组若干个秩1矩阵之和。这是矩阵乘法的“微观”视角,揭示了任意矩阵的“秩分解”本质。

代数意义:

已知有

可以发现:每一项 ,恰好是 的第 列的第 个元素 的第 行的第 个元素 的乘积。

而“ 的第 列 × 的第 行”这个矩阵,它的第 行第 列元素,正是

因此,这等价于:把所有“第 列 × 第 行”矩阵的对应元素加起来。

既然每个元素都相等,整个矩阵自然就相等。

这不是一个新发明,而是把标准定义的“先乘后加”换了个顺序:原来是对每个 的贡献加总;现在是固定每个 ,先算出它贡献的整个矩阵,再把所有矩阵加起来。 因为加法满足交换律和结合律,两种顺序结果必然相同。

几何意义:

A的第一列乘B的第一行,得到的矩阵,是这个复合变换中,负责‘把输入向量按 B 的第一行规矩压缩,然后送到 A 的第一列方向’的那个独立变换。把所有这样的独立变换加起来,就得到了完整的复合变换。

任何线性变换都可以看作是一组“投影—拉伸”变换的叠加。每一个“列乘行” 负责输入空间的第 个坐标维度:它把整个空间先投影到那个坐标轴上,然后把投影得到的数值沿 方向拉伸。所有坐标维度的这种作用叠加起来,就恢复了完整的线性变换。

这种分解严格依赖于我们选定的输入基(标准基)。如果换一组基,分解的形式就会变化,但本质思想一样:线性变换是由它在各个基向量上的作用线性组合而成的,而“列乘行”正是这个线性组合的几何实现。

有个问题:行和输入向量的点积,为什么就成了“坐标值/权重”?

我们从复合变换 的角度看,把 写成行向量, 写成列向量:

当这个复合变换作用在 上时:

这里,括号里的 —— 也就是 B 的第 k 行与输入向量的点积 —— 给出了一个标量
而原式就变成了:

这不就是“用 作为 A 的第 k 列的系数”吗?
所以,每一个 就是在 A 的第 k 列方向上的坐标值(权重)

为什么偏偏是点积?

因为任何一个从向量到标量的线性函数,都可以且只能写成“与某个固定向量的点积”。
B 的每一行恰好就是那个固定向量。它提取信息的方式必须是线性的,所以必定是点积。

理解五:分块乘法

操作:把 切成小块,把每个小块当成“标量”,按标准内积法相乘。前提是切出来的小块尺寸能合法相乘。

我不知道在干啥。

2.逆矩阵

定义:对于一个方阵 ,如果存在矩阵 ,使得:

则称 可逆(非奇异), 的逆矩阵。

几何翻译:先做 ,再做 ,等于什么都没做。 对空间做的拉伸、旋转,原样拉回去。

重要事实:左逆 = 右逆。如果 满足 ,那么 也一定满足 。逆矩阵是唯一的。

对于非方阵,没有通常意义上的逆,因为非方阵改变空间维数,无法完美“倒回去”。不过在后面可能会拓展广义上的逆。

对于一个 的方阵 ,以下条件全部等价。只要其中一个成立,其他所有条件也自动成立,它们都意味着 可逆(非奇异)。

  1. 行列式非零
    (几何意义:变换后空间体积不为零,没有压扁。)

  2. 满秩
    (列空间维数 = 行空间维数 = ,变换后的输出空间仍是 维。)

  3. 列向量线性无关:矩阵的所有列向量构成一组线性无关的向量组。
    (没有冗余列,每一个列都提供了独立的新方向。)

  4. 行向量线性无关:矩阵的所有行向量构成一组线性无关的向量组。
    (没有冗余方程/规矩,每一行都是一条独立的约束。)

  5. 列(行)向量构成 的一组基:列向量(或行向量)不仅线性无关,还能张成整个

  6. 零空间只有零向量,即 只有平凡解
    (没有非零向量被变换拍扁到原点。)

  7. 有唯一解:对任意 ,方程组有且仅有一个解

  8. 是单射(一对一):不同的输入产生不同的输出。
    (由零空间只有零向量保证。)

  9. 是满射(到上):输出空间 中的每一个向量都被覆盖到。
    (由列满秩保证。)

  10. 是双射:既是单射又是满射,即线性变换是 到自身的同构。

  11. 所有特征值均不为零 不是 的特征值。
    (没有特征方向被完全压缩到零。)

  12. 行列式可写成特征值的乘积,因此所有

  13. 可写成初等矩阵的乘积,其中每个 是初等矩阵(对应一次行操作或列操作)。
    (消元法可以将 完全化为单位矩阵,每一步都是可逆的初等变换。)

  14. 行等价于单位矩阵,即可以通过一系列初等行变换将 化为单位矩阵

  15. 存在左逆:存在矩阵 使得

  16. 存在右逆:存在矩阵 使得
    (左逆和右逆如果存在,它们一定相等,且唯一地等于 。)

  17. 转置也可逆 也是可逆的,且

  18. 行列式倒数,所以行列式非零是前提。

  19. 的列空间是整个

  20. 的行空间是整个
  21. 没有零奇异值:所有奇异值均大于零(奇异值分解中)。
  22. 二次型非退化 可逆意味着由 定义的二次型是满秩的(在实对称矩阵时可对角化且无零特征值)。

我们通常使用高斯-约当消元法求逆。

以二阶矩阵为例,设

因为

所以

这本质上是两个线性方程组,我们只需要两次高斯消元即可。

但这两个线性方程组非常有特点:它们的系数矩阵相同。

那我们为什么不能一块解这两个方程组?(这一步是我感觉这个方法里最帅的一步)

你这种感觉太对了。高斯-约当消元法确实“帅”,它把解方程组和求逆统一成了一个机械流程。

下面从你熟悉的高斯消元出发,一步步推出高斯-约当。

我们直接把所有右端项一起放进增广矩阵:

然后对 做消元,同时对所有右端列做相同的行变换。

被消成 时,每一列右端项就自动变成了对应方程组的解。这 个解堆起来,恰好就是

所以增广矩阵变成了:

一个消元过程,同时解了 个方程组。

这个方法在运算过程上的区别是他不是消成上三角然后回代,而是直接消成单位矩阵,这样解自动就出来了。

其实普通解方程也能这样,可能代码难度不一样?

三.A的LU分解

1.两个性质

这个比较显然。几何意义上理解非常直观。

这个不显然。不会证。

2.怎么快速算矩阵乘法

对于一些操作意义明显的矩阵,是没必要计算的,可以直接执行操作。例如初等矩阵,置换矩阵等。

例如,假设消元过程是:

  • 第一步:第2行减去第1行的 2 倍 →
  • 第二步:第3行减去第2行的 3 倍 →

现在我们来乘

从操作视角一步步推:

  1. 作用:第二行变成了 (原第2行 - 2×原第1行)。
  2. 作用:第三行要减去新第二行的 3 倍。新第二行 = 原第2行 - 2×原第1行。所以,新第三行 = 原第3行 - 3×(原第2行 - 2×原第1行) = 原第3行 - 3×原第2行 + 6×原第1行

所以结果矩阵 的第三行第一列会冒出 6!矩阵变成:

3.A的LU分解

这到底怎么发现的???

L指下三角矩阵,U指上三角矩阵。

我们先不考虑需要行交换的情况。

这种情况下,消元过程可写为 ,然后再回代即可。

但可以发现,要算出这个 还是计算量很大的,而且长的也不好。

但我们将这个式子写成 ,设 ,发现这个 只需要把每个 的数填进去就行了。

为什么?

这是L的优美核心。我们来模拟L的生成过程。

L的定义:(L = E_1^{-1} E_2^{-1} E_3^{-1} \dots),其中 (E_k) 是第k步消元的初等矩阵。

我们以三维为例,按消元顺序写:

  • (E_1^{-1}):把第2行加回第1行的 l₂₁ 倍
  • (E_2^{-1}):把第3行加回第1行的 l₃₁ 倍
  • (E_3^{-1}):把第3行加回第2行的 l₃₂ 倍

这些 (E^{-1}) 都是初等矩阵,代表一个简单的行操作。现在我们要计算它们的乘积 (L)。

关键来了:当我们从右往左依次施加这些操作到单位矩阵 (I) 上时,它们修改行的顺序和方式,保证了互不干扰

我们一步步看:

  • 初始状态:单位矩阵 (I) 的三行:
    Row1 = (1,0,0)
    Row2 = (0,1,0)
    Row3 = (0,0,1)

  • 第一步,施加 (E_3^{-1})(最右边,先作用):把第3行加上第2行的 l₃₂ 倍。
    Row3 变成 (0, l₃₂, 1)。Row2 不变。
    此时,(E_3^{-1}) 只修改了 Row3,且它读的源行 Row2 还是原始的状态

  • 第二步,施加 (E_2^{-1}):把第3行加上第1行的 l₃₁ 倍。
    Row3 再累加上 l₃₁ Row1 = (l₃₁, 0, 0),变成 (l₃₁, l₃₂, 1)。Row1 不变。
    *(E_2^{-1}) 只修改了 Row3,源行 Row1 还是原始的状态

  • 第三步,施加 (E_1^{-1}):把第2行加上第1行的 l₂₁ 倍。
    Row2 变成 (l₂₁, 1, 0)。Row1 不变。
    (E_1^{-1}) 只修改了 Row2,源行 Row1 还是原始的状态

最终得到的矩阵就是:
Row1: (1, 0, 0)
Row2: (l₂₁, 1, 0)
Row3: (l₃₁, l₃₂, 1)

恰好每个倍数都落到了自己独一无二的格子,没有任何交叉污染。

为什么这个顺序这么完美?

因为消元顺序是“从上到下、从左到右”的,这保证了在计算逆操作乘积时,每次操作所用的“源行”都还没有被后续操作修改过

具体来说:

  • 计算逆乘积时,操作的顺序是原消元顺序的逆序
  • 原消元顺序:先(2,1),再(3,1),再(3,2)。
  • 逆乘积顺序:先(3,2)⁻¹,再(3,1)⁻¹,再(2,1)⁻¹。
  • 在(3,2)⁻¹操作时,它需要读第2行。此时第2行还没被任何操作动过(因为修改第2行的(2,1)⁻¹是最后才做的)。
  • 在(3,1)⁻¹操作时,它需要读第1行,同样没被动过。
  • 在(2,1)⁻¹操作时,它需要读第1行,还是没被动过。

所以,每一个逆操作,读取的“源行”都是纯净的原始单位矩阵的行。这导致每个倍数只影响目标行的一个位置,不会产生连环的依赖和填充。

如果消元顺序不是这样严格的先左后右、先上后下,这种优美性就会消失,L就会出现填充。