线代学习笔记
Last Update:
Word Count:
Read Time:
课程:线性代数 MIT 18.06 Linear Algebra
课本:Introduction to Linear Algebra 线性代数(原书第6版) (Gilbert Strang 吉尔伯特·斯特朗著)
一.消元法
以下讨论的矩阵为 阶矩阵。
1.引入
我们从前经常接触线性方程组,例如
常见解法为:
1.用式子 (1) 减去式子 (2) 的 2 倍:
2.式子 (2) × 2:
3.(1) 减上式:,得 ,解得
4.代回 (2):,解得
可以发现:整个过程中, 和 只是占位符,真正被操作的是系数和右边的数。
上述消元中的每一步,无非是三种基本操作:
- 把一个方程乘以一个非零常数
- 两个方程相加减
- 交换两个方程的顺序
可以发现:消元法的每一步,都是对矩阵的行做线性组合。而任何对行的线性组合,都等价于在矩阵左边乘一个特定的矩阵。
由此可以得到线性方程组的一个通用解法:先通过线性变换 ,使得 ,从而将 化为上三角矩阵,这样就可以从下往上依次回代解出所有未知量。
2.解的情况
将上例方程写成矩阵形式,为:
即为:
可以发现: 本质是用系数矩阵的每个列向量进行线性组合,看是否能得到 。
1.如果矩阵满秩,说明列空间内含有所有这个维度的向量,类似平面向量基本定理,可以证明这种线性组合是唯一的。
2.如果矩阵不满秩,则b可能不在列空间中,则无解;如果在,那么有无数解,且解的形式为:特解+零空间内的任一向量
关于唯一性的证明:
法一:
已知: 的列向量线性无关。
等价于: 的零空间里只有零向量。即, 的唯一解是 。
证明:
假设有两个解:设 和 都是方程 的解。
这意味着:相减,利用线性性质:
把两个等式相减:因为是线性变换,所以可以提取公因子:
引入零空间:
这个等式说明,向量 被变换 作用后,结果是零向量。
因此,(它属于 的零空间)。利用已知条件(列线性无关 零空间只有零向量):
我们已知 的列向量线性无关,这意味着 。得出唯一性:
所以,,即 。
证毕。
法二:
已知:,且列向量 线性无关。
证明:
用列向量写出方程:
方程 可以写成列向量的线性组合形式:这里 是未知的比例系数。
反证法(假设解不唯一):
假设存在两组不同的系数 和 ,都能组合出 。即:相减,重组:
两式相减:触发线性无关的定义:
因为向量 是线性无关的,根据定义,只有所有系数全为零时,它们的线性组合才能是零向量。得出矛盾:
所以,必然有:这意味着 。两组系数完全相同。
证毕。
3.初等矩阵 E 和置换矩阵 P
我们希望将 化为上三角矩阵,那么就需要对 进行线性变换。
想快速写出 ,我们不能再使用矩阵乘法的列表示,而应用行,因为我们在对 进行行变换。
例如:
初等行变换 将第二行减去第一行的两倍,则
可以得到:
为什么是这样?
可以发现,行向量 的意思是:取 份旧第一行 + 份旧第二行 + 份旧第三行,混合成新的一行。
设 ,左乘 :
新第一行:
新第二行:,完全不变。
新第三行:,完全不变。
结果就是只有第一行被乘了 2,其他行原样不动。
当然,我们需要进行若干次这种操作,所以变换是复合变换。
但在一些情况下,0可能出现在主元的位置,我们需要进行行交换,这样的矩阵叫置换矩阵。
原理是类似的,不再赘述,仅举一例。
例如:
可以得到:
虽然与消元无关,不过还是提一下:关于行交换与列交换
同一个置换矩阵,左乘就是行交换,右乘就是列交换。
可以从几何意义上理解
左乘 是在输出空间做变换
当左乘置换矩阵 时:
这相当于先用 变换,然后在输出空间里把坐标轴交换。
例如 ,左乘 得到的新矩阵 :
- 几何意义:把 的每个像向量 ,再进行一次关于直线 的反射(交换两个坐标)。原来在 的点,现在变成 。
因此,行交换 = 重新排列输出空间的坐标轴顺序。
右乘 是在输入空间做变换
当右乘置换矩阵 时:
这相当于先在输入空间交换基向量,然后用 变换。
同样用 ,右乘 得到 :
- 几何意义:把输入的标准基 先对调(),再被 映射。原来的第一列( 的像)现在跑到第二列,第二列跑到第一列。
因此,列交换 = 重新排列输入空间的基向量顺序。
二.矩阵乘法和逆矩阵
1.矩阵乘法
定义:设矩阵 为 矩阵,矩阵 为 矩阵,则
理解一:向量点积
操作: 的元素 = 的第 行 · 的第 列(行点乘列)。
这是最基础的计算方式,适合手算具体元素。但它只关注“数字”,看不到矩阵整体的变换。
理解二:列线性组合
操作: 的第 列 = 的各列以 的第 列为系数的线性组合。
这是你之前理解的“ = 的各列以 为系数的线性组合”的直接推广。它告诉你, 的每一列都是 的列向量的某种“调配”。
理解三:行线性组合
操作: 的第 行 = 的各行以 的第 行为系数的线性组合。
和上一种理解是对称的。 的每一行给了“配方系数”,去混合 的各行,产生 的新行。
这是从“约束”视角看问题。左乘 等价于对 做行变换,而 的每一行就是变换的“配方”。
理解四:列乘行
操作: =
任何矩阵乘法都可以拆成一组若干个秩1矩阵之和。这是矩阵乘法的“微观”视角,揭示了任意矩阵的“秩分解”本质。
代数意义:
已知有
可以发现:每一项 ,恰好是 的第 列的第 个元素 与 的第 行的第 个元素 的乘积。
而“ 的第 列 × 的第 行”这个矩阵,它的第 行第 列元素,正是 。
因此,这等价于:把所有“第 列 × 第 行”矩阵的对应元素加起来。
既然每个元素都相等,整个矩阵自然就相等。
这不是一个新发明,而是把标准定义的“先乘后加”换了个顺序:原来是对每个 把 的贡献加总;现在是固定每个 ,先算出它贡献的整个矩阵,再把所有矩阵加起来。 因为加法满足交换律和结合律,两种顺序结果必然相同。
几何意义:
A的第一列乘B的第一行,得到的矩阵,是这个复合变换中,负责‘把输入向量按 B 的第一行规矩压缩,然后送到 A 的第一列方向’的那个独立变换。把所有这样的独立变换加起来,就得到了完整的复合变换。
任何线性变换都可以看作是一组“投影—拉伸”变换的叠加。每一个“列乘行” 负责输入空间的第 个坐标维度:它把整个空间先投影到那个坐标轴上,然后把投影得到的数值沿 方向拉伸。所有坐标维度的这种作用叠加起来,就恢复了完整的线性变换。
这种分解严格依赖于我们选定的输入基(标准基)。如果换一组基,分解的形式就会变化,但本质思想一样:线性变换是由它在各个基向量上的作用线性组合而成的,而“列乘行”正是这个线性组合的几何实现。
有个问题:行和输入向量的点积,为什么就成了“坐标值/权重”?
我们从复合变换 的角度看,把 写成行向量, 写成列向量:
当这个复合变换作用在 上时:
这里,括号里的 —— 也就是 B 的第 k 行与输入向量的点积 —— 给出了一个标量 。
而原式就变成了:
这不就是“用 作为 A 的第 k 列的系数”吗?
所以,每一个 就是在 A 的第 k 列方向上的坐标值(权重)。
为什么偏偏是点积?
因为任何一个从向量到标量的线性函数,都可以且只能写成“与某个固定向量的点积”。
B 的每一行恰好就是那个固定向量。它提取信息的方式必须是线性的,所以必定是点积。
理解五:分块乘法
操作:把 和 切成小块,把每个小块当成“标量”,按标准内积法相乘。前提是切出来的小块尺寸能合法相乘。
我不知道在干啥。
2.逆矩阵
定义:对于一个方阵 ,如果存在矩阵 ,使得:
则称 可逆(非奇异), 是 的逆矩阵。
几何翻译:先做 ,再做 ,等于什么都没做。 把 对空间做的拉伸、旋转,原样拉回去。
重要事实:左逆 = 右逆。如果 满足 ,那么 也一定满足 。逆矩阵是唯一的。
对于非方阵,没有通常意义上的逆,因为非方阵改变空间维数,无法完美“倒回去”。不过在后面可能会拓展广义上的逆。
对于一个 的方阵 ,以下条件全部等价。只要其中一个成立,其他所有条件也自动成立,它们都意味着 可逆(非奇异)。
行列式非零:。
(几何意义:变换后空间体积不为零,没有压扁。)满秩:。
(列空间维数 = 行空间维数 = ,变换后的输出空间仍是 维。)列向量线性无关:矩阵的所有列向量构成一组线性无关的向量组。
(没有冗余列,每一个列都提供了独立的新方向。)行向量线性无关:矩阵的所有行向量构成一组线性无关的向量组。
(没有冗余方程/规矩,每一行都是一条独立的约束。)列(行)向量构成 的一组基:列向量(或行向量)不仅线性无关,还能张成整个 。
零空间只有零向量:,即 只有平凡解 。
(没有非零向量被变换拍扁到原点。)有唯一解:对任意 ,方程组有且仅有一个解 。
是单射(一对一):不同的输入产生不同的输出。
(由零空间只有零向量保证。)是满射(到上):输出空间 中的每一个向量都被覆盖到。
(由列满秩保证。)是双射:既是单射又是满射,即线性变换是 到自身的同构。
所有特征值均不为零: 不是 的特征值。
(没有特征方向被完全压缩到零。)行列式可写成特征值的乘积:,因此所有 。
可写成初等矩阵的乘积:,其中每个 是初等矩阵(对应一次行操作或列操作)。
(消元法可以将 完全化为单位矩阵,每一步都是可逆的初等变换。)行等价于单位矩阵:,即可以通过一系列初等行变换将 化为单位矩阵 。
存在左逆:存在矩阵 使得 。
存在右逆:存在矩阵 使得 。
(左逆和右逆如果存在,它们一定相等,且唯一地等于 。)转置也可逆: 也是可逆的,且 。
行列式倒数:,所以行列式非零是前提。
的列空间是整个 :。
- 的行空间是整个 :。
- 没有零奇异值:所有奇异值均大于零(奇异值分解中)。
- 二次型非退化: 可逆意味着由 定义的二次型是满秩的(在实对称矩阵时可对角化且无零特征值)。
我们通常使用高斯-约当消元法求逆。
以二阶矩阵为例,设
因为
所以
这本质上是两个线性方程组,我们只需要两次高斯消元即可。
但这两个线性方程组非常有特点:它们的系数矩阵相同。
那我们为什么不能一块解这两个方程组?(这一步是我感觉这个方法里最帅的一步)
你这种感觉太对了。高斯-约当消元法确实“帅”,它把解方程组和求逆统一成了一个机械流程。
下面从你熟悉的高斯消元出发,一步步推出高斯-约当。
我们直接把所有右端项一起放进增广矩阵:
然后对 做消元,同时对所有右端列做相同的行变换。
当 被消成 时,每一列右端项就自动变成了对应方程组的解。这 个解堆起来,恰好就是 。
所以增广矩阵变成了:
一个消元过程,同时解了 个方程组。
这个方法在运算过程上的区别是他不是消成上三角然后回代,而是直接消成单位矩阵,这样解自动就出来了。
其实普通解方程也能这样,可能代码难度不一样?
三.A的LU分解
1.两个性质
这个比较显然。几何意义上理解非常直观。
这个不显然。不会证。
2.怎么快速算矩阵乘法
对于一些操作意义明显的矩阵,是没必要计算的,可以直接执行操作。例如初等矩阵,置换矩阵等。
例如,假设消元过程是:
- 第一步:第2行减去第1行的 2 倍 →
- 第二步:第3行减去新第2行的 3 倍 →
现在我们来乘 :
从操作视角一步步推:
- 作用:第二行变成了 (原第2行 - 2×原第1行)。
- 作用:第三行要减去新第二行的 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就会出现填充。