线性代数
线性代数
1. 群、环、域
1. 群: 集合 \(G\) 上的二元运算 \(*\):\(G\times G \rightarrow G\) 满足
- 封闭性:\(\forall a,b\in G, a*b\in G\)
- 结合律:\(\forall a,b,c\in G,(a*b)*c=a*(b*c)\)
- 存在单位元:\(\exists e\in G,\forall a\in G \text{ s.t. } e * a = a\)
- 存在逆元:\(\forall a\in G,\exists a^{-1}\in G \text{ s.t. } a^{-1} * a = e\)
则称 \((G,*)\) 为群,一般写作 \(G\)
存在单位元的等价定义有 \(\exists e\in G,\forall a\in G \text{ s.t. } a * e = a\)
存在逆元的等价定义有 \(\exists e\in G,\forall a\in G \text{ s.t. } a * a^{-1} = e\)
若群 \((G,*)\) 还满足:
- 交换律:\(\forall a,b\in G, a*b=b*a\)
则称群 \((G, *)\) 为交换群或 \(\text{Abel}\) 群。
基本性质:一个群中的每个元素逆元唯一;一个群的单位元唯一。
2. 环: 集合 \(R\) 上的二元运算 \(+:R\times R\rightarrow R\) 和 \(*:R\times R\rightarrow R\) 满足
- \((R, +)\) 是交换群。
- \(*\) 封闭:\(\forall a,b \in R,a*b\in R\)
- \(*\) 满足结合律:\(\forall a,b,c\in R, (a*b)*c=a*(b*c)\)
- \(*\) 存在单位元:\(\exists 1_R\in R, \forall a\in R \text{ s.t. } 1_R * a = a\)
- \(*\) 对于 \(+\) 满足分配律:\(\forall a,b,c\in R,a*(b+c)=a*c+b*c,(a+b)*c=a*c+b*c\)
则称 \((R,+,*)\) 为环,一般写作 \(R\)
3. 域: 集合 \(F\) 上的二元运算 \(+:R\times R\rightarrow R\) 和 \(*:R\times R\rightarrow R\) 满足
- \((F, +)\) 为交换群,其单位元为 \(0_F\)
- \((F - \{0_F\}, *)\) 为交换群。
- \(*\) 对于 \(+\) 满足分配律:\(\forall a,b,c\in F,a*(b+c)=a*c+b*c,(a+b)*c=a*c+b*c\)
则称 \((F, +, *)\) 为域,一般写作 \(F\)
2. 向量空间、向量、标量
域 \((F,+,*)\) 和集合 \(V\) 有二元运算:
- 向量加法 \(\oplus:V \times V \rightarrow V\)
- 标量乘法 \(\cdot: F \times V \rightarrow V\)
且满足
- \((V, \oplus)\) 为交换群。
- \(\cdot\) 单位元:\(1_F \in F\) 且 \(1_F\) 是 \(F\) 的 \(*\) 的单位元,\(\forall v\in V,1_F \cdot v = v\)
- \(\cdot\) 对 \(\oplus\) 满足分配律:\(\forall x\in F, u,v\in V \text{ s.t. } x \cdot (u \oplus v)=x\cdot u \oplus x \cdot v\)
- \(\cdot\) 对 \(+\) 满足分配律:\(\forall x,y\in F, v\in V \text{ s.t. } (x + y) \cdot v = x \cdot v \oplus y \cdot v\)
- \(\cdot\) 和 \(*\):\(\forall x,y\in F, v\in V \text{ s.t. } x \cdot (y \cdot v) = (x * y) \cdot v\)
则称 \(V\) 为定义在域 \(F\) 上的向量空间,也称线性空间。对于 \(v\in V\),称 \(v\) 为向量。对于 \(x \in F\),称 \(x\) 为标量。
若将 \(+\) 和 \(\oplus\) 统一简写为 \(+\),将 \(\cdot\) 和 \(*\) 省略,则上叙条件为
- \((V, \oplus)\) 为交换群。
- \(1_F \in F\) 且 \(1_F\) 是 \(F\) 的 \(*\) 的单位元,\(\forall v\in V,1_F \cdot v = v\)
- \(\forall x\in F, u,v\in V \text{ s.t. } x(u+v)=xu+xv\)
- \(\forall x,y\in F, v\in V \text{ s.t. } (x + y)v = xv + yv\)
- \(\forall x,y\in F, v\in V \text{ s.t. } x(yv) = (xy)v\)
基本性质:
- \(0_F \cdot v_V = x_F\cdot 0_V =0_V\)
- \(-1_F \cdot v_V = -v_V\)
3. 有限维向量空间
3.1. 基本概念
设 \(V\) 为定义在域 \(F\) 的向量空间。
1. 线性组合: 对于向量组 \(\{\mathbf{v_1,v_2,\cdots, v_n}\} \subseteq V\),任取一组 \(\{a_1,a_2,\cdots,a_n\} \subseteq F\),\(\mathbf{u} = a_1\mathbf{v_1} + a_2\mathbf{v_2} + \cdots + a_n\mathbf{v_n}\) 为该向量组的一个线性组合。
2. 张成空间: \(\text{span}\{\mathbf{v_1,v_2,\cdots,v_n}\} = \{a_1\mathbf{v_1} + a_2\mathbf{v_2} + \cdots + a_n\mathbf{v_n} | \{a_1,a_2,\cdots,a_3\}\subseteq F\}\) 为该向量组的张成空间。
3. 线性相关、线性无关
有向量组 \(S = \{\mathbf{v_1, v_2, \cdots, v_n}\} \subseteq V\)
若 \(\exists \mathbf{v_i}\in S,\mathbf{v_i}\in \text{span}(S - \{\mathbf{v_i}\})\),则 \(S\) 是线性相关的。
若 \(\forall \mathbf{v_i}\in S,\mathbf{v_i}\notin \text{span}(S - \{\mathbf{v_i}\})\),则 \(S\) 是线性无关的。
4. 线性映射
设 \(V\) 和 \(W\) 都是定义在域 \(F\) 上的向量空间,映射 \(f:V\rightarrow W\) 满足:
- \(\forall \mathbf{x,y}\in V,f(\mathbf{x+y})=f(\mathbf{x})+f(\mathbf{y})\)
- \(\forall \mathbf{x} \in V, a\in F,f(a\cdot \mathbf{x}) = a\cdot f(\mathbf{x})\)
则称 \(f\) 是一个 \(K\)-线性映射,简称线性映射。
5. 基
若向量组 \(S = \{\mathbf{v_1,v_2,\cdots, v_n}\} \subseteq V\) 为 \(V\) 的基,当且仅当以下两个条件均成立:
- \(\text{span}(S) = V\)
- \(S\) 线性无关
记 \(\dim V = |S|\) 为 \(V\) 的维度。
性质:
- \(V\) 的基总是存在。
- \(V\) 有多种基,每组基的大小一样。
- \(V\) 的基是 \(V\) 的极大线性无关集。
- \(V\) 的基是 \(V\) 的最小张成空间。
- \(V\) 中每个向量可被一组基唯一表示。
6. 基表示
选定 \(V\) 的一组基 \(\mathbf{\{e_1,e_2,\cdots,e_n\}}\),对于任意一个 \(\mathbf{v}\in V\),有 \(\mathbf{v} = a_1\mathbf{e_1} + a_2\mathbf{e_2} + \cdots + a_n\mathbf{e_n}\),根据基的最后一条性质可得 \((a_1, a_2, \cdots, a_n)\) 唯一,则 \((a_1, a_2, \cdots, a_n)\) 为 \(\mathbf v\) 的基表示。
3.2. 内积、角度、正交性
考虑内积时,一般考虑 \(F = \mathbb R\) 或 \(F = \mathbb C\),其余情况都极为少见。
对于高维,先定义内积 \(\cdot:V \times V \rightarrow F\),之后根据内积得出以下定义:
- 向量的模长:\(||\mathbf{v}|| = \sqrt{\mathbf{v \cdot v}}\)
- 向量的夹角:\(\left<\mathbf{a,b}\right> =\arccos\left(\mathbf{\frac{a\cdot b}{||a|| \cdot ||b||}}\right)\)
- 向量 \(\mathbf{a, b}\) 正交(垂直)当且仅当 \(\mathbf{a \cdot b} = 0\)
内积需满足:
- 正定性:\(\forall \mathbf{v}\in V, \mathbf{v\cdot v}\ge0\),当且仅当 \(\mathbf{v = 0}\) 时 \(\mathbf{v \cdot v} = 0\)
- (共轭)对称性
- 若 \(F = \mathbb{C}\),则需满足共轭对称性:\(\forall \mathbf{x,y}\in V, \mathbf{x \cdot y}=\overline{\mathbf{y \cdot x}}\)
- 若 \(F = \mathbb{R}\),则需满足对称性:\(\forall \mathbf{x,y}\in V, \mathbf{x \cdot y}=\mathbf{y \cdot x}\)
- 半/双线性性映射
- 若 \(F =\mathbb{C}\),则需满足半线性性映射:
- \(\forall a,b\in\mathbb{C},\mathbf{x,y,z}\in V \text{ s.t. } (a\mathbf{x}+b\mathbf{y}) \cdot \mathbf{z} = \overline{a}(\mathbf{x}\cdot \mathbf{z})+\overline{b}(\mathbf{y \cdot z})\)
- \(\forall a,b\in\mathbb{C},\mathbf{x,y,z}\in V \text{ s.t. } \mathbf{x} \cdot (a\mathbf{y}+b\mathbf{z}) = a(\mathbf{x}\cdot \mathbf{y})+b(\mathbf{x \cdot z})\)
- 若 \(F =\mathbb{R}\),则需满足双线性性映射:
- \(\forall a,b\in\mathbb{R},\mathbf{x,y,z}\in V \text{ s.t. } (a\mathbf{x}+b\mathbf{y}) \cdot \mathbf{z} = a(\mathbf{x}\cdot \mathbf{z})+b(\mathbf{y \cdot z})\)
- \(\forall a,b\in\mathbb{R},\mathbf{x,y,z}\in V \text{ s.t. } \mathbf{x} \cdot (a\mathbf{y}+b\mathbf{z}) = a(\mathbf{x}\cdot \mathbf{y})+b(\mathbf{x \cdot z})\)
- 若 \(F =\mathbb{C}\),则需满足半线性性映射:
并非所有线性空间都有内积。
内积的定义并不唯一,常见的定义有:
设 \((a_1,a_2,\cdots,a_n),(b_1,b_2,\cdots,b_n)\) 分别为 \(\mathbf{a,b}\) 的基表示,定义 \(\mathbf{a\cdot b} = \sum\limits_{i=1}^{n}a_ib_i\)。
在这个定义下,基为单位正交基:\(V\) 中任意一组基 \(\{\mathbf{e_1,e_2,\cdots,e_n}\}\),满足
\(
\mathbf{e_i \cdot e_j}=
\begin{cases}
0 &,i \neq j\\
1 &,i = j
\end{cases}
\)
3.3. 矩阵
3.3.1. 基本概念
1. 定义
设 \(n\) 和 \(m\) 是非负整数,\(F\) 是域,映射 \(A:\{1,2,\cdots,n\}\times\{1,2,\cdots,m\} \rightarrow F\) 被称为定义在 \(F\) 上的矩阵。
一般写做:
其中 \(A_{x,y} = A(x,y)\)
2. 特殊的矩阵
若 \(n = m\) 则称 \(A\) 为方阵。
记 \((F,+)\) 的单位元为 \(0\),\((F,*)\) 的单位元为 \(1\)。
- \(n\) 阶单位矩阵:\(E_{n\times n}\) 为方阵,且主对角线为 \(1\),其余全为 \(0\),简称单位矩阵(\(0\) 一般不写)
-
零矩阵:矩阵 \(O_{n\times m}\) 的元素全为 \(0\)
-
上三角矩阵:方阵 \(A_n\) 为上三角矩阵,满足对于 \(A_{i,j}\),若 \(i > j\),则 \(A_{i,j} = 0\)。下三角矩阵同理。
-
行阶梯型矩阵:矩阵 \(A_{n\times m}\) 满足,对于第 \(i\) 行,其从此行第一个非 \(0\) 的下标 \(j\) 记为 \(p_i\),有 \(p_1<p_2<\cdots<p_n\)
-
逆矩阵:对于方阵 \(A_n\),若方阵 \(B_n\) 满足 \(BA=AB=E_n\),则称 \(B\) 为 \(A\) 的逆矩阵,记作 \(A^{-1}\)
-
行向量、列向量:对于矩阵 \(A_{n\times m}\),若 \(n = 1\) 则称为行向量。列向量同理。可以看做是向量的基表示。
3. 秩
行秩:将矩阵 \(A_{n\times m}\) 的每行看做行向量,得到 \(n\) 个向量,其基的大小为行秩。
列秩:与行秩同理。
秩:事实上总有 行秩 \(=\) 列秩,则行秩即为矩阵的秩。矩阵 \(A\) 的秩记作 \(\text{rank}(A)\)
3.3.2. 基本运算
1. 加法:
2. 数乘:
3. 乘法:
4. 幂:
5. 转置:
6. 性质:
- 加法有交换律:\(\forall A,B, \text{ s.t. } A+B=B+A\)
- 乘法无交换律:\(\exists A,B, \text{ s.t. } AB \neq BA\)
- 乘法有结合律:\(\forall A,B,C \text{ s.t. } (AB)C = A(BC)\)
- 乘法对加法有分配律:\(\forall A,B,C \text{ s.t. }, (A + B)C = AC + BC, A(B + C)=AB+AC\)
- 加法单位元:\(\forall A \text{ s.t. } O+A,A+O=A\)
- 乘法单位元:\(\forall A_{n\times n} \text{ s.t. } EA=AE=A\)
- \((AB)^T = B^TA^T\)
- \((A+B)^T = A^T + B^T\)
3.3.3. 初等变换
1. 将第 \(i\) 行的每个数乘以 \(k\)(\(k\neq0\))
2. 交换第 \(i\) 行和第 \(j\) 行(\(i \neq j\))
3. 将第 \(i\) 行的每个数的 \(k\) 倍加到第 \(j\) 行(\(i\neq j\))
以上三条为初等行变换,初等列变换同理。
性质:
- 初等变换不改变矩阵的秩。
- 初等变换不改变矩阵的行列式的值。
- 初等变换后的矩阵与原矩阵等价,即初等变换后的矩阵每行(列)视为行(列)向量的张成空间与原矩阵的相同。
矩阵乘法实现初等变换:(以下是初等行变换,初等列变换同理)
对矩阵 \(A_{n\times m}\) 做一次初等行变换,\(F_{n\times n} A_{n\times m}\) 为一次初等行变换后的矩阵。
令 \(F_n = E_n\)
对于 1.
,令 \(F_{i,i} = k\)
对于 2.
,交换 \(F\) 的第 \(i\) 行和第 \(j\) 行。
对于 3.
,令 \(F_{j,i} = k\)
3.3.4. 高斯消元法
对于 \(n\) 个 \(n\) 元一次方程组成的方程组,可用高斯消元法求其解。
1.将方程
记作
其被称之为增广矩阵。
2.重复操作 \(n\) 次:现已进行到第 \(i\) 次,若 \(a_{p,i} \neq 0\),则运用第 \(p\) 行和初等行变换将 \(a_{q,i}(q\neq p)\) 变为 \(0\),将 \(a_{p,i}\) 变为 \(1\)
3.交换行使矩阵变为行阶梯形矩阵:
此时 \(x_i = c_i, i = 1,2,\cdots,n\)
最终矩阵也可能为:
则
称 \(x_1,x_3,x_6\) 为主元,\(x_2,x_4,x_5\) 为自由元。
若矩阵的某行最后一个数非 \(0\),且此行其余数都为 \(0\),则此方程组无解。
代码实现:时间复杂度 \(O(n^3)\)、空间复杂度 \(O(n^2)\)
int gauss() {
int r = 0;
rep(i, 1, n)
{
int t = i;
rep(j, r + 1, n)
if(fabsl(a[j][i]) > fabsl(a[t][i])) // 找 abs 最大的数,减少误差
t = j;
if(fabsl(a[t][i]) <= eps) continue;
r++;
rep(j, i, n + 1) ::std::swap(a[t][j], a[r][j]);
per(j, i, n + 1) a[r][j] /= a[r][i];
rep(j, r + 1, n)
per(k, i, n + 1)
a[j][k] -= a[j][i] * a[r][k];
}
if(r < n) {
rep(i, r + 1, n) if(fabsl(a[i][n + 1]) > eps) return -1; // 无解
return 0; // 有自由元
}
per(i, 1, n)
rep(j, 1, i - 1)
a[j][n + 1] -= a[j][i] * a[i][n + 1], a[j][i] = 0;
return 1; // 有解
}
线性基:因为高斯消元只用到了线性变换,再结合线性变换的性质,则所求出的非 \(0\) 行为此矩阵行向量的线性空间的基。可以借此求一组向量基,称之为线性基算法。一般求的是异或线性基,异或可以看做是不进位的加法,可以一边插入一个向量一边求出基。代码实现:时间复杂度 \(O(qn^2)\),\(q\) 是插入的向量的个数。
const int N = 50;
ll s[N + 1];
void add(ll x) {
per(i, 0, N) if((x >> i) & 1)
{
if(s[i]) x ^= s[i];
else {
rep(j, i + 1, N) if((s[j] >> i) & 1) s[j] ^= x;
rep(j, 0, i - 1) if((x >> j) & 1) x ^= s[j];
s[i] = x;
return;
}
}
}
求逆矩阵:将方阵 \(A_n\) 和单位矩阵 \(E_n\) 拼接一起得到一个新矩阵 \([A_n \space E_n]\),对左边进行高斯消元得到 \([E_n \space B_n]\),\(B_n\) 即为 \(A^{-1}_n\),若无法将 \(A_n\) 变为 \(E_n\),则 \(A_n\) 行向量线性相关,则 \(A_n\) 无逆矩阵。
3.3.5. 广义矩阵乘法
\((\circ, \oplus)\) 的矩阵乘法:
若要 \(*\) 运算满足结合律 \((A_{n\times m} * B_{m \times p}) * C_{p\times q} = A_{n\times m} * (B_{m \times p} * C_{p\times q})\),则需以下条件:
- \(\oplus\) 交换律:\(a \oplus b = b \oplus a\)
- \(\circ\) 结合律:\((a \circ b) \circ c = a \circ (b \circ c)\)
- \(\circ\) 对 \(\oplus\) 的左分配律:\((a \oplus b) \circ c = (a \circ c) \oplus (b \circ c)\)
- \(\circ\) 对 \(\oplus\) 的右分配律:\(c \circ (a \oplus b) = (c\circ a) \oplus (c\circ b)\)
证明:
设
则
则原命题得证。
常见的满足结合律的有 \((+,min),(+,max),(\times, +)\)。
对于矩阵,也满足上述 \(4\) 个条件,所以元素是矩阵的矩阵也满足普通矩阵乘法的结合律!也就是矩阵套矩阵符合乘法结合律!
一旦满足乘法结合律,就可用快速幂在 \(O(n^3\log m)\) 时间复杂度内求出类似 \(A_{1,n}\cdot B_{n,n}^m\) 的值。
广义矩阵乘法可以用来做动态 DP(DDP)。
3.4. 行列式
3.4.1 基本概念
方阵
的行列式为
其中 \(S_n\) 表示 \(1,2,\cdots, n\) 的全排列。
若排列 \(\sigma\) 的逆序对个数为奇数,则 \(\text{sgn}(\sigma) = -1\)
若排列 \(\sigma\) 的逆序对个数为偶数,则 \(\text{sgn}(\sigma) = 1\)
行列式是一个线性变换后的“体积”伸缩比。
3.4.2. 性质
- \(\det(A_n) = 0 \Leftrightarrow \text{rank}(A_n) < n\)
- \(\det(A) = \det(A^T)\)
- \(\det(kA_n)=k^n\det(A_n)\)
- \(\det(AB)=\det(A)\det(B)\)
- 令 \(A'\) 为 \(A\) 交换某两行(列)后的矩阵,\(\det(A)+\det(A')=0\)
- 令 \(A'\) 为 \(A\) 某行(列)乘以 \(k\) 后的矩阵,\(\det(A')=k\det(A)\)
- 令 \(A'\) 为 \(A\) 某行(列)乘以 \(k\) 加到另一行(列)后的矩阵,\(\det(A')=\det(A)\)
- 上三角矩阵的行列式为主对角线的乘积。
最后一条性质可以结合高斯消元在 \(O(n^3)\) 的时间复杂度内求出 \(n \times n\) 的行列式。
3.4.3. 应用
3.4.3.1. 叉积
设 \(V\) 为定义在 \(\mathbb{R}\) 上的线性空间。
1. 二维叉积
设 \((x_1,y_1),(x_2,y_2)\) 为二维向量 \(\mathbf{v_1,v_2}\in V\) 的基表示。
定义点积 \(\mathbf{v_1 \cdot v_2} = x_1x_2+y_1y_2\)
定义叉积 \(\times:V\times V\rightarrow \mathbb{R}, \mathbf{v_1 \times v_2} = x_1y_2-x_2y_1= \begin{vmatrix} x_1 & y_1\\ x_2 & y_2 \end{vmatrix}\)
根据定义,\(\mathbf{v_1} \times \mathbf{v_2}\) 为 \(\mathbf{v_1, v_2}\) 张成的有向面积,则
- \(\forall \mathbf{v_1, v_2} \in V,|\mathbf{v_1 \times v_2}| = ||\mathbf{v_1}||\cdot ||\mathbf{v_2}||\cdot \sin\left<\mathbf{v_1,v_2}\right>\)
- \(\forall \mathbf{v_1, v_2} \in V,\mathbf{v_1\times v_2 = -(v_2\times v_1)}\)
应用:计算面积;判断向量的相对位置;获得向量夹角大小
2. 三维叉积
设 \((x_1,y_1,z_1),(x_2,y_2,z_2)\) 为三维向量 \(\mathbf{v_1,v_2}\in V\) 的基表示。
定义点积 \(\mathbf{v_1 \cdot v_2} = x_1x_2+y_1y_2+z_1z_2\)
定义叉积 \(\times:V\times V\rightarrow V\):
- \(||\mathbf{v_1 \times v_2}|| = ||\mathbf{v_1}|| \cdot ||\mathbf{v_2}|| \cdot \sin\left<\mathbf{v_1,v_2}\right>\)
- \(\mathbf{v_1 \times v_2}\) 垂直于 \(\mathbf{v1, v2}\),且指向遵循右手定则
\(\mathbf{a\times b}\) 可以看做是,\(\mathbf{a}\) 在 \(\mathbf{b}\) 的垂直面的投影,从 \(\mathbf{b}\) 的角度看将 \(\mathbf{a}\) 的投影顺时针旋转 \(90\) 度后的向量。
叉积有以下性质
- 线性性:\(\forall n,m\in\mathbb R, \mathbf{a,b,c} \in V, (n\mathbf{a}+m\mathbf{b})\times \mathbf{c}=n(\mathbf{a\times c}) + m(\mathbf{b\times c}),\mathbf{a}\times(n\mathbf{b} + m\mathbf{c})=n(\mathbf{a \times b}) + m(\mathbf{a\times c})\)
- \(\forall \mathbf{v_1, v_2} \in V,\mathbf{v_1 \times v_2 = -(v_2\times v_1)}\)
- 三个单位向量的运算结果如下:
- \(\mathbf{i\times j = k}\)
- \(\mathbf{j\times k = i}\)
- \(\mathbf{k\times i = j}\)
根据线性性可得:
应用:求面积、夹角、法向量
3.4.3.2. 矩阵树定理(基尔霍夫定理)
定义有向图 \(G\) 的拉普拉斯矩阵 \(L = D − A\),其中
而 \(A\) 为 \(G\) 的邻接矩阵(\(A\) 为 \(01\) 矩阵且 \(A_{i,j}\) 为 \(1\) 当且仅当 \(G\) 中存在一条从 \(i\) 到 \(j\) 的边)。
设 \(L_r\) 为去掉 \(L\) 的第 \(r\) 行、第 \(r\) 列之后得到的 \((n − 1)\times(n − 1)\) 的矩阵。
矩阵树定理:\(G\) 的以 \(r\) 为根的内向生成树个数为 \(\det(L_r)\)
求一个 \(\det(L_r)\) 的时间复杂度为 \(O(n^3)\)
证明:略。
3.4.3.3. BEST 定理
一个有向图的本质不同的欧拉回路个数为
其中 \(T\) 为图中一任一点为根的内向生成树的个数。
时间复杂度 \(O(n^3)\)
证明:略。