量化交易中文教材

第 00 章 矩阵基础复习

对应原书:Horn & Johnson《Matrix Analysis》第 2 版,第 0 章 Review and Miscellanea(书 p.1–42,PDF p.21–62)。

原书第 0 章是全书的"记号与基础事实汇编",作者说明它主要供查阅,没有习题。本章按量化学习者的需要重新组织:线性代数的基本概念快速过一遍;分块矩阵、Schur 补、Sherman–Morrison–Woodbury 公式、行列式求导这几样在协方差建模、回归和优化里天天用到的工具则讲透。复合矩阵、Plücker 关系、Dodgson 恒等式这类偏理论的内容只作简介,需要时回查原书。

学习目标

读完本章,你应当能够:

  1. 熟练使用原书的记号体系:\(M_{m,n}(\mathbf F)\)、子矩阵 \(A[\alpha,\beta]\)、\(A^T\)、\(A^*\)、\(\operatorname{diag}\)、直和 \(\oplus\)、全 1 向量 \(e\) 等,并能用"列的线性组合""外积和"等四种视角理解矩阵乘法。
  2. 掌握秩的多种等价刻画与常用秩不等式,理解为什么数值秩要用 SVD 而不是行化简来判断。
  3. 掌握行列式的三种定义与乘法性,会用伴随矩阵、Cramer 法则,知道 \(\partial\log\det\Sigma/\partial\Sigma=\Sigma^{-1}\) 的来历。
  4. 熟练推导并使用 Schur 补:分块消元、分块求逆、\(\det A=\det A_{11}\det(A/A_{11})\),并把它对应到多元正态的条件协方差、偏相关和最小方差对冲。
  5. 推导并使用 Sherman–Morrison–Woodbury 公式与矩阵行列式引理,用于因子模型协方差求逆和滚动回归的快速更新。
  6. 认识常见的特殊矩阵(三角、置换、Toeplitz、Hankel、循环、Vandermonde 等),知道它们在量化中出现的位置;理解"基变换 → 相似 → 标准形"这条全书主线。

读前导读

这一章在解决什么问题

这一章是整本矩阵分析的"词汇表 + 工具箱"。你在 CFA 里其实已经天天在用矩阵,只是没写成矩阵:组合方差 \(\sigma_p^2=\sum_i\sum_jw_iw_j\sigma_{ij}\) 就是 \(w^T\Sigma w\);多元回归的系数 \(\hat\beta=(X^TX)^{-1}X^Ty\) 就是一串矩阵运算;"最小方差对冲比率 \(h=\rho\,\sigma_S/\sigma_F\)"就是本章 Schur 补在 \(1\times1\) 时的样子。本章把这些熟悉的东西放进统一的矩阵语言,让后面的特征值、谱分解、SVD 有共同的出发点。

对量化最有用的是三样工具。Schur 补:把一组变量"消掉"之后剩下的部分,在协方差上就是对冲后的残差风险、条件协方差。Sherman–Morrison–Woodbury 公式:矩阵被一个低秩修正后,逆矩阵怎么快速更新,用于几千只股票的因子模型协方差求逆、滚动回归。\(\log\det\) 的导数:协方差最大似然估计的核心。其余内容(复合矩阵、Plücker 关系等)第一遍知道名字即可。

这本书沿用 Horn & Johnson 的写法,默认数可以是复数。读者平时只碰实数矩阵,所以请记住一条贯穿全书的翻译规则:凡是看到 \(A^*\)(共轭转置)、"Hermitian"、"酉",把复数换成实数后它们分别就是 \(A^T\)、"对称"、"正交"。本章会在第一次出现时把复数讲清楚。

需要先想起来的数学

1. 矩阵乘法、转置与逆。 \(A\) 是 \(m\times n\)、\(B\) 是 \(n\times p\) 时 \(AB\) 是 \(m\times p\),第 \((i,j)\) 元是 \(A\) 的第 \(i\) 行与 \(B\) 的第 \(j\) 列的内积。转置 \(A^T\) 把行变列。逆 \(A^{-1}\) 满足 \(AA^{-1}=I\)。小例子:\(\begin{bmatrix}a&b\\c&d\end{bmatrix}^{-1}=\dfrac1{ad-bc}\begin{bmatrix}d&-b\\-c&a\end{bmatrix}\)。乘法一般不交换,\(AB\ne BA\)。见 第 00 册第 06 章 线性代数速成。

2. 行列式与秩。 \(2\times2\) 行列式 \(ad-bc\);它为零说明两列成比例、矩阵不可逆。秩是"线性无关的列有几个",例如 \(\begin{bmatrix}1&2\\2&4\end{bmatrix}\) 第二列是第一列的 2 倍,秩为 1。金融上,秩就是"真正独立的风险来源有几个"。见同一章。

3. 复数。 复数 \(z=a+bi\),\(i^2=-1\)。共轭 \(\bar z=a-bi\),模 \(|z|=\sqrt{a^2+b^2}=\sqrt{z\bar z}\)。例:\(z=3+4i\),\(\bar z=3-4i\),\(z\bar z=9+16=25\),\(|z|=5\)。注意 \(z^2=-7+24i\) 不是正数,所以复数的"长度平方"必须用 \(z\bar z\) 而不是 \(z^2\)。这正是后面 \(A^*\) 要取共轭的原因。

4. 偏导数与链式法则(只用于 0.8.2)。 多变量函数对其中一个变量求导、其余看作常数,就是偏导数。链式法则:\(\dfrac{\partial\log f}{\partial x}=\dfrac1f\dfrac{\partial f}{\partial x}\)。见 第 00 册第 02 章 导数与泰勒展开 与 第 00 册第 05 章 多元微积分与优化。

5. 记号。 \(\iff\) 读作"当且仅当"(两边互为充分必要条件);\(\subseteq\) 是"包含于";\(\varnothing\) 是空集;\(O(N^3)\) 表示"计算量大约与 \(N^3\) 成正比",\(N\) 翻 10 倍、耗时约翻 1000 倍;\(\varepsilon_{\text{mach}}\) 是机器精度,双精度浮点约 \(2.2\times10^{-16}\)。见 第 00 册第 08 章 读懂数学证明与符号。

怎么读这一章

核心必读是 0.2(乘法的四种看法、共轭转置)、0.4.1(秩的含义)、0.6(Schur 补,全章重点)、0.7(Woodbury 公式)、0.8.2(行列式求导)和 0.10.1(基变换与相似,第 01 章的起点)。0.1 与 0.3、0.5 是复习,扫一遍知道记号即可。0.4.2 的各种秩不等式、0.6.4、0.8.3–0.8.4 的复合矩阵与各类恒等式、0.9 的特殊矩阵词典,第一遍可以只看结论,用到时回查。

建议顺序:先读 0.2 → 0.6.5(先看 Schur 补的金融含义建立动机)→ 回头读 0.6.1–0.6.3 的推导 → 0.7 → 0.8.2 → 量化实战 1、2。量化实战的代码建议真的运行一遍,对照数值理解公式。


0.1 向量空间、基与维数

0.1.1 标量域与向量空间

线性代数里的"数"来自一个域(field)\(\mathbf F\):对加减乘除(除数非零)封闭、满足通常运算律的集合。本书几乎只用实数域 \(\mathbf R\) 和复数域 \(\mathbf C\);不特别说明时记为 \(\mathbf F\)。

向量空间(vector space) \(V\) 是对加法构成交换群、对数乘封闭并满足分配律等公理的集合。原书有一个贯穿全书的约定:\(\mathbf F^n\) 中的元素一律是列向量,称为 \(n\)-向量。注意 \(\mathbf C^n\) 既可看成复向量空间(维数 \(n\)),也可看成实向量空间(维数 \(2n\))。

0.1.2 子空间、张成与线性无关

  • 子空间(subspace):对加法和数乘封闭的子集。子空间的交仍是子空间,但并一般不是。
  • 张成(span):\(\operatorname{span}S\) 是 \(S\) 中有限个向量的全部线性组合(约定 \(\operatorname{span}\varnothing=\{0\}\))。两子空间之和 \(S_1+S_2=\{x+y:x\in S_1,y\in S_2\}\);若 \(S_1\cap S_2=\{0\}\),称为直和(direct sum)\(S_1\oplus S_2\),此时每个元素的分解唯一。
  • 线性相关(linearly dependent):存在不全为零的系数使 \(\sum a_iv_i=0\)。含零向量或含重复向量的列表必相关;空列表线性无关。
  • 基(basis):张成 \(V\) 的线性无关列表,等价于"极大无关组"或"极小张成组"。任一无关列表都能扩充成基。所有基的长度相同,即维数(dimension)\(\dim V\)。

0.1.3 子空间交引理

这是一个看似平凡、后面却很关键的计数结论:

\[\dim(S_1\cap S_2)+\dim(S_1+S_2)=\dim S_1+\dim S_2,\qquad \dim(S_1\cap S_2)\ge\dim S_1+\dim S_2-\dim V.\]

直观地说:在 \(n\) 维空间里,两个子空间维数加起来超过 \(n\),它们就必然有非零交集。推广到 \(k\) 个子空间:若 \(\delta=\sum_i\dim S_i-(k-1)\dim V\ge1\),则 \(\dim(S_1\cap\cdots\cap S_k)\ge\delta\)。

白话解释:在三维空间 \(\mathbf R^3\) 里取两个过原点的平面(各 2 维)。\(2+2=4>3\),所以第二个不等式给出 \(\dim(S_1\cap S_2)\ge1\):两张平面至少交出一条直线。你确实找不到两张过原点却只在原点相交的平面。金融上可以这样想:10 只股票的组合权重构成 10 维空间;"对因子 1–4 中性"的组合是 6 维子空间,"对另外 5 个风格因子中性"的组合是 5 维子空间,\(6+5>10\),所以一定存在同时满足这 9 个中性约束的非零组合。 记号:\(\dim\) 是维数(独立方向的个数);\(S_1+S_2\) 是"两边各取一个向量相加能得到的全部向量";\(\cap\) 是交集。

为什么要记住它:第 04a 章证明 Courant–Fischer 极小极大定理和 Weyl 特征值不等式时,核心一步就是"两个子空间维数够大,必有公共非零向量"。这些不等式在量化中用来估计协方差矩阵被扰动(如加入噪声、收缩)后特征值能变多少。

同构:任何 \(n\) 维 \(\mathbf F\)-空间都和 \(\mathbf F^n\) 同构。取定基 \(\mathcal B\) 后,坐标映射 \(x\mapsto[x]_{\mathcal B}\) 就是这个同构。这就是为什么我们可以放心地只研究 \(\mathbf F^n\) 和矩阵。


0.2 矩阵:数表与线性变换

0.2.1 两种视角

矩阵 \(A\in M_{m,n}(\mathbf F)\) 既是一张 \(m\times n\) 的数表,又是(在选定基下)一个线性变换 \(\mathbf F^n\to\mathbf F^m\)。\(\mathbf F=\mathbf C\) 时简写为 \(M_{m,n}\)、\(M_n\)。全书的很多结论都来自这两种视角的相互转换。

与 \(A\) 相关的两个子空间:

  • 值域(range,列空间) \(\operatorname{range}A=\{Ax\}\subseteq\mathbf F^m\),其维数是秩 \(\operatorname{rank}A\);
  • 零空间(null space) \(\operatorname{nullspace}A=\{x:Ax=0\}\subseteq\mathbf F^n\),其维数是零度 \(\operatorname{nullity}A\)。

秩–零度定理(rank–nullity theorem):

\[\operatorname{rank}A+\operatorname{nullity}A=n.\]

0.2.2 矩阵乘法的四种看法

原书称之为乘法的"元机制"(metamechanics),熟练切换这四种看法比背公式更有用:

  1. \(Ax\) 是 \(A\) 的列以 \(x\) 的元素为系数的线性组合;\(y^TA\) 是 \(A\) 的行的线性组合。
  2. \(AB\) 的第 \(j\) 列是 \(Ab_j\),第 \(i\) 行是 \(a_i^TB\)。口诀:左乘作用于列,右乘作用于行。
  3. \(A^TB=[a_i^Tb_j]\) 是"内积表"——\(X^TX\)(Gram 矩阵)、样本协方差 \(\frac1{T-1}X_c^TX_c\) 都是这种形式。
  4. \(AB^T=\sum_k a_kb_k^T\) 是外积和——协方差矩阵 \(\frac1{T-1}\sum_t r_tr_t^T\) 就是逐日收益外积之和,因子模型 \(BFB^T\) 也是外积和。

金融直觉:看法 1 最值得先掌握。设 \(A\) 的三列是三只股票在两个情景下的收益,\(A=\begin{bmatrix}0.10&0.02&-0.05\\-0.08&0.01&0.06\end{bmatrix}\),持仓权重 \(x=[0.5,\,0.3,\,0.2]^T\)。\(Ax=0.5\cdot\text{第1列}+0.3\cdot\text{第2列}+0.2\cdot\text{第3列}=[0.046,\,-0.025]^T\),正是组合在两个情景下的收益。"矩阵乘向量 = 用权重把各列加权求和",这就是组合收益的计算方式。 看法 3 和 4 的区别:\(a_i^Tb_j\)(行乘列)得到一个数,叫内积;\(a_kb_k^T\)(列乘行)得到一个矩阵,叫外积。例如 \(r=[0.01,\,-0.02]^T\) 时 \(rr^T=\begin{bmatrix}0.0001&-0.0002\\-0.0002&0.0004\end{bmatrix}\),它就是"这一天"对协方差矩阵的贡献;把每天的外积加起来再除以 \(T-1\),就是样本协方差。

两个有用的推论:\(\operatorname{range}A\subseteq\operatorname{range}B\iff\) 存在 \(X\) 使 \(A=BX\);以及

\[\operatorname{range}A+\operatorname{range}B=\operatorname{range}[A\ B],\qquad\operatorname{nullspace}A\cap\operatorname{nullspace}B=\operatorname{nullspace}\begin{bmatrix}A\\B\end{bmatrix}.\]

矩阵乘法满足结合律但一般不交换,例如

\[\begin{bmatrix}1&0\\0&2\end{bmatrix}\begin{bmatrix}1&2\\3&4\end{bmatrix}=\begin{bmatrix}1&2\\6&8\end{bmatrix}\ne\begin{bmatrix}1&4\\3&8\end{bmatrix}=\begin{bmatrix}1&2\\3&4\end{bmatrix}\begin{bmatrix}1&0\\0&2\end{bmatrix}.\]

与所有 \(n\) 阶矩阵都交换的矩阵只有标量矩阵 \(cI\)。

0.2.3 转置、共轭转置与常见矩阵类

\(A^T\) 是转置,\(A^*=\bar A^T\) 是共轭转置(conjugate transpose,又称 Hermitian adjoint)。反序律 \((AB)^T=B^TA^T\)、\((AB)^*=B^*A^*\)。实矩阵情形 \(A^*=A^T\)。

白话解释:\(\bar A\) 是把 \(A\) 的每个元素取复共轭(\(a+bi\mapsto a-bi\)),\(A^*\) 是"先取共轭、再转置"。例:\(A=\begin{bmatrix}1&2+i\\3i&4\end{bmatrix}\),则 \(A^T=\begin{bmatrix}1&3i\\2+i&4\end{bmatrix}\),\(A^*=\begin{bmatrix}1&-3i\\2-i&4\end{bmatrix}\)。实数的共轭就是它自己,所以实矩阵的 \(A^*\) 与 \(A^T\) 完全相同。 为什么复数情形要多取一次共轭?因为要让"长度平方"非负。实向量 \(x\) 的长度平方是 \(x^Tx=\sum x_i^2\ge0\)。复向量若照搬 \(x^Tx\),\(x=[1,\,i]^T\) 会得到 \(1+i^2=0\),一个非零向量长度为零,显然荒谬(下文"迷向向量"讲的就是这件事)。改用 \(x^*x=\sum\bar x_ix_i=\sum|x_i|^2\) 就恢复了正常。所以下表的规律很简单:复数世界里凡是用 \(T\) 的地方都换成 \(*\),回到实数时再换回来。Hermitian ↔ 对称,酉 ↔ 正交,就是这条规则的产物。

由转置定义的矩阵类:

名称 条件 实数情形对应
对称(symmetric) \(A^T=A\) 协方差、相关矩阵
斜对称(skew symmetric) \(A^T=-A\)
Hermitian \(A^*=A\) 实对称
斜 Hermitian \(A^*=-A\) 实斜对称
正交(orthogonal) \(A^TA=I\) 旋转、PCA 的载荷矩阵
酉(unitary) \(A^*A=I\) 实正交
正规(normal) \(A^*A=AA^*\) 对称、正交都是正规的

任一方阵可唯一分解为对称部分加斜对称部分 \(A=\tfrac12(A+A^T)+\tfrac12(A-A^T)\)。复矩阵还有 Toeplitz 分解 \(A=H(A)+iK(A)\),\(H(A)=\tfrac12(A+A^*)\)、\(K(A)=\tfrac1{2i}(A-A^*)\) 都是 Hermitian。

量化提示:二次型 \(x^TAx\) 只依赖 \(A\) 的对称部分(\(x^TCx=0\) 对斜对称 \(C\) 恒成立)。所以组合方差 \(w^T\Sigma w\) 里若 \(\Sigma\) 因数值误差略不对称,先做 \(\tfrac12(\Sigma+\Sigma^T)\) 不会改变任何组合的方差,却能让特征分解等算法稳定。

迹(trace) \(\operatorname{tr}A=\sum a_{ii}\)。重要恒等式 \(\operatorname{tr}AA^*=\sum_{i,j}|a_{ij}|^2\),因此 \(\operatorname{tr}AA^*=0\iff A=0\)。\(\sqrt{\operatorname{tr}AA^*}\) 就是 Frobenius 范数,衡量两个协方差估计的差距时常用。

迷向向量:复向量可能 \(x^Tx=0\) 而 \(x\ne0\)(例 \([1\ i]^T\)),所以复情形的"长度"必须用 \(x^*x\)。实向量没有这个问题。

另外两个记号:全 1 向量 \(e=e_1+\cdots+e_n\),全 1 矩阵 \(J_n=ee^T\)。组合的权重和就是 \(e^Tw\),等权组合是 \(w=e/n\)。


0.3 行列式

0.3.1 三种等价定义

行列式把一个方阵压缩成一个数,可以从三个角度定义:

  1. Laplace 展开(按第 \(i\) 行或第 \(j\) 列):记 \(A_{ij}\) 为删去第 \(i\) 行第 \(j\) 列的子矩阵,
    \[\det A=\sum_{k=1}^n(-1)^{i+k}a_{ik}\det A_{ik}=\sum_{k=1}^n(-1)^{k+j}a_{kj}\det A_{kj}.\]
  2. 置换和:
    \[\det A=\sum_{\sigma}\operatorname{sgn}\sigma\prod_{i=1}^na_{i\sigma(i)},\]
    对 \(n!\) 个置换求和,\(\operatorname{sgn}\sigma=\pm1\) 由置换的奇偶决定。把 \(\operatorname{sgn}\sigma\) 换成恒为 \(+1\) 得到积和式(permanent)。
  3. 公理化刻画:\(\det\) 是 \(M_n(\mathbf F)\to\mathbf F\) 上唯一满足"对每行多重线性、交换两行变号、\(\det I=1\)"的函数。

基本性质:\(\det A^T=\det A\),\(\det A^*=\overline{\det A}\),以及乘法性 \(\det AB=\det A\det B\)。

推导拆解:用 \(2\times2\) 矩阵 \(A=\begin{bmatrix}a&b\\c&d\end{bmatrix}\) 核对三种定义给出同一个 \(ad-bc\)。 (1)Laplace 按第 1 行展开:\(a_{11}\) 删去第 1 行第 1 列剩下 \([d]\),\(a_{12}\) 删去第 1 行第 2 列剩下 \([c]\),符号 \((-1)^{1+1}=+1\)、\((-1)^{1+2}=-1\),得 \(a\cdot d-b\cdot c\)。 (2)置换和:\(\{1,2\}\) 只有两个置换,恒等置换 \(\sigma=(1\to1,2\to2)\) 是偶置换,贡献 \(+a_{11}a_{22}=ad\);对换 \(\sigma=(1\to2,2\to1)\) 是奇置换,贡献 \(-a_{12}a_{21}=-bc\)。\(\prod_ia_{i\sigma(i)}\) 的意思是"每行挑一个元素、各在不同列,相乘"。 (3)公理:交换两行变号,所以有两行相同时 \(\det=-\det\),只能为 0;再用多重线性展开就能唯一算出 \(ad-bc\)。 \(n\) 阶时置换和有 \(n!\) 项(\(10\) 阶就有 362 万项),所以实际计算从不用定义,而是先化成三角阵再把对角元相乘。

0.3.2 初等变换与简化行阶梯形

三类初等行变换都可写成左乘一个初等矩阵(列变换则是右乘):

类型 操作 对行列式的影响
1 交换两行 变号
2 某行乘非零数 \(c\) 乘 \(c\)
3 某行的倍数加到另一行 不变

任何矩阵都可以用初等行变换化为唯一的简化行阶梯形(RREF,原书也称 Hermite normal form):\(R=EA\),\(E\) 非奇异。\(\det A\ne0\) 当且仅当 RREF 是 \(I_n\)。\(\det A=0\) 当且仅当某些行线性相关。

几何直觉:\(|\det A|\) 是 \(A\) 把单位立方体映成的平行多面体的体积。对协方差矩阵 \(\Sigma\),\(\det\Sigma\) 称为"广义方差",它为零意味着收益分布被压在一个低维子空间里——某个组合的方差为零,即存在完美的线性套利或冗余资产。


0.4 秩与非奇异性

0.4.1 秩的等价刻画

对 \(A\in M_{m,n}(\mathbf F)\),下列说法等价(原书 0.4.4):

  • \(\operatorname{rank}A=k\);
  • 线性无关的列(或行)最多 \(k\) 个——行秩 = 列秩;
  • 有 \(k\times k\) 子式非零,而所有 \((k+1)\times(k+1)\) 子式为零;
  • \(k=n-\dim\operatorname{nullspace}A\);
  • \(k\) 是把 \(A\) 写成 \(A=XY^T\)(\(X\in M_{m,p}\),\(Y\in M_{n,p}\))时最小的 \(p\);
  • \(k\) 是把 \(A\) 写成秩一矩阵之和 \(x_1y_1^T+\cdots+x_py_p^T\) 时最少的项数。

最后两条说明:秩就是"真正需要多少个因子"。\(N\) 只股票、\(K\) 个因子的因子模型中,系统性部分 \(BFB^T\) 的秩至多为 \(K\)。

金融直觉:\(xy^T\) 这样"一列乘一行"得到的矩阵叫秩一矩阵,每一行都是 \(y^T\) 的倍数。单因子模型(CAPM)的系统性协方差 \(\sigma_m^2\beta\beta^T\) 就是秩一矩阵:任意两只股票的系统性协方差是 \(\beta_i\beta_j\sigma_m^2\),整张表只由一列 \(\beta\) 决定。\(K\) 因子模型就是 \(K\) 个这样的秩一矩阵相加,秩至多为 \(K\)。反过来,如果一张 \(500\times500\) 的协方差矩阵"去掉噪声后"秩只有 5,就说明 500 只股票的共同波动本质上由 5 个因子驱动——这正是 PCA 找因子的思路(第 02b 章)。

线性方程组:\(Ax=b\) 有解(相容)当且仅当 \(\operatorname{rank}[A\ b]=\operatorname{rank}A\),即 \(b\) 在 \(A\) 的列空间中。

数值警告(原书 0.4.3):理论上秩等于 RREF 的非零行数,但用行化简求数值秩并不明智,舍入误差会让本应为零的行看起来非零。实务中用 SVD,把小于某个阈值(如 \(\sigma_{\max}\cdot\max(m,n)\cdot\varepsilon_{\text{mach}}\))的奇异值视为零。检查因子共线性、协方差矩阵是否满秩,都应该这么做。

0.4.2 秩不等式与秩等式

常用不等式:

  • \(\operatorname{rank}A\le\min\{m,n\}\);删去行或列不会增加秩。
  • Sylvester 不等式:\(A\in M_{m,k}\),\(B\in M_{k,n}\) 时
    \[\operatorname{rank}A+\operatorname{rank}B-k\le\operatorname{rank}AB\le\min\{\operatorname{rank}A,\operatorname{rank}B\}.\]
  • 秩和不等式:\(|\operatorname{rank}A-\operatorname{rank}B|\le\operatorname{rank}(A+B)\le\operatorname{rank}A+\operatorname{rank}B\)。特别地,加上一个秩一矩阵,秩至多变化 1;改变矩阵的一个元素,秩至多变化 1。
  • Frobenius 不等式:\(\operatorname{rank}AB+\operatorname{rank}BC\le\operatorname{rank}B+\operatorname{rank}ABC\)。

常用等式:

  • \(\operatorname{rank}A^*=\operatorname{rank}A^T=\operatorname{rank}\bar A=\operatorname{rank}A\)。
  • 左右乘非奇异矩阵不改变秩。
  • \(\operatorname{rank}A^*A=\operatorname{rank}A\)(实际上 \(\operatorname{nullspace}A^*A=\operatorname{nullspace}A\):若 \(A^*Ax=0\),则 \(\|Ax\|^2=x^*A^*Ax=0\))。量化含义:回归的正规方程矩阵 \(X^TX\) 与设计矩阵 \(X\) 同秩;\(X\) 列共线,\(X^TX\) 就奇异。同理,\(T\) 期 \(N\) 只股票的样本协方差秩至多 \(\min(T-1,N)\)。
  • 满秩分解:\(\operatorname{rank}A=k\iff A=XY^T\),\(X\in M_{m,k}\)、\(Y\in M_{n,k}\) 都列满秩。\(\operatorname{rank}A=1\iff A=xy^T\)。
  • 秩是"等价"关系的完全不变量:\(\operatorname{rank}A=\operatorname{rank}B\iff\) 存在非奇异 \(X,Y\) 使 \(B=XAY\);等价地 \(A=S\begin{bmatrix}I_k&0\\0&0\end{bmatrix}T\)。
  • Wedderburn 秩一约化公式:若 \(\omega=y^TAx\ne0\),则
    \[\operatorname{rank}\big(A-\omega^{-1}Axy^TA\big)=\operatorname{rank}A-1.\]
    反过来,任何能把秩降低的秩一修正都具有这种形式。这是 Gauss 消元、Lanczos 方法等"逐次降秩"算法的统一框架。

0.4.3 非奇异性

\(A\in M_n\) 非奇异(nonsingular) 指 \(Ax=0\) 只有零解。原书列出的等价条件很多,记住以下几条即可:

\[A\text{ 非奇异}\iff A^{-1}\text{ 存在}\iff\operatorname{rank}A=n\iff\det A\ne0\iff Ax=b\text{ 对任意 }b\text{ 有唯一解}\iff0\text{ 不是 }A\text{ 的特征值}.\]

方阵的左逆就是右逆。非奇异矩阵全体构成一般线性群 \(GL(n,\mathbf F)\)。记号 \(A^{-T}=(A^{-1})^T=(A^T)^{-1}\),\(A^{-*}\) 类似。


0.5 内积、正交与 Gram–Schmidt

欧氏内积 \(\langle x,y\rangle=y^*x\),欧氏范数 \(\|x\|_2=\sqrt{x^*x}\)。注意原书约定:内积对第一个变元线性、对第二个变元共轭线性。

白话解释:实向量时 \(\langle x,y\rangle=y^Tx=\sum x_iy_i\),就是熟悉的点积;\(\|x\|_2\) 就是长度。"共轭线性"指的是把第二个变元乘上复数 \(c\) 时,内积乘的是 \(\bar c\) 而不是 \(c\):\(\langle x,cy\rangle=(cy)^*x=\bar c\,y^*x\)。实数时 \(\bar c=c\),这个区别消失,所以实数读者可以忽略。复数小例子:\(x=[1,\,i]^T\),\(x^*x=\bar1\cdot1+\bar i\cdot i=1+(-i)(i)=1+1=2\),长度 \(\sqrt2\),合理。

Cauchy–Schwarz 不等式:\(|\langle x,y\rangle|\le\|x\|_2\|y\|_2\),等号当且仅当两向量成比例。实向量的夹角 \(\cos\theta=\dfrac{\langle x,y\rangle}{\|x\|_2\|y\|_2}\)。

量化含义:两只股票去均值后的收益序列看作 \(\mathbf R^T\) 中的两个向量,它们夹角的余弦就是样本相关系数。Cauchy–Schwarz 保证 \(|\rho|\le1\);\(\rho=\pm1\) 当且仅当两序列成比例。

Gram–Schmidt 正交化:对线性无关的 \(x_1,\dots,x_n\),

\[y_k=x_k-\sum_{j<k}\langle x_k,z_j\rangle z_j,\qquad z_k=y_k/\|y_k\|_2,\]

得到标准正交组,且对每个 \(k\) 都有 \(\operatorname{span}\{z_1..z_k\}=\operatorname{span}\{x_1..x_k\}\)。矩阵形式 \(X=ZR\),\(R\) 为非奇异上三角,这就是 QR 分解的雏形(第 02a 章详述)。若某个 \(x_k\) 能被前面的向量线性表示,算法会在这一步得到 \(y_k=0\)——这正好是检测共线性的方法。

量化含义:因子研究中的"因子正交化"——把新因子对已有因子做截面回归、取残差——就是 Gram–Schmidt 的一步。正交化的顺序会影响结果:先放进去的因子保留全部解释力,后进的只保留"增量"部分。

正交补:\(S^\perp=\{x:x^*y=0,\ \forall y\in S\}\)。关键关系

\[\operatorname{range}A=(\operatorname{nullspace}A^*)^\perp.\]

由此得到 Fredholm 二择一定理:\(Ax=b\) 有解,与"存在 \(y\) 使 \(A^*y=0\) 且 \(y^*b\ne0\)",两者恰有一个成立。这是线性规划对偶、无套利定价基本定理(Farkas 引理)的线性代数原型。


0.6 分块矩阵与 Schur 补(本章重点)

这一节是本章对量化最重要的内容。先给结论:Schur 补就是"消去一部分变量之后剩下的那部分"。在协方差矩阵上,它是条件协方差;在精度矩阵上,它给出边缘分布;在回归里,它是残差的协方差;在行列式与求逆里,它把大问题拆成两个小问题。

0.6.1 子矩阵记号与分块乘法

对指标集 \(\alpha\subseteq\{1..m\}\)、\(\beta\subseteq\{1..n\}\),\(A[\alpha,\beta]\) 表示取 \(\alpha\) 行、\(\beta\) 列构成的子矩阵(submatrix);\(A[\alpha]=A[\alpha,\alpha]\) 是主子矩阵(principal submatrix);\(\alpha^c\) 是补集。例:

\[\begin{bmatrix}1&2&3\\4&5&6\\7&8&9\end{bmatrix}[\{1,3\},\{1,2,3\}]=\begin{bmatrix}1&2&3\\7&8&9\end{bmatrix}.\]

子矩阵的行列式称为子式(minor),主子矩阵的行列式称为主子式;\(A[\{1..k\}]\) 称为顺序主子矩阵(leading principal submatrix)。约定 \(\det A[\varnothing]=1\)。

分块矩阵只要分划共形(conformal),乘法就和普通矩阵乘法一样逐块进行:

\[\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}\begin{bmatrix}B_{11}&B_{12}\\B_{21}&B_{22}\end{bmatrix}=\begin{bmatrix}A_{11}B_{11}+A_{12}B_{21}&A_{11}B_{12}+A_{12}B_{22}\\A_{21}B_{11}+A_{22}B_{21}&A_{21}B_{12}+A_{22}B_{22}\end{bmatrix},\]

只是要注意块之间一般不交换,乘积顺序不能换。

0.6.2 分块消元与 Schur 补的定义

设 \(A=\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}\),\(A_{11}\in M_k\) 非奇异。模仿 Gauss 消元,用前 \(k\) 行消去左下块、用前 \(k\) 列消去右上块:

\[\begin{bmatrix}I&0\\-A_{21}A_{11}^{-1}&I\end{bmatrix}\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}\begin{bmatrix}I&-A_{11}^{-1}A_{12}\\0&I\end{bmatrix}=\begin{bmatrix}A_{11}&0\\0&A_{22}-A_{21}A_{11}^{-1}A_{12}\end{bmatrix}.\tag{0.8.5.3}\]

右下角出现的矩阵称为 \(A_{11}\) 在 \(A\) 中的 Schur 补(Schur complement):

\[A/A_{11}=A_{22}-A_{21}A_{11}^{-1}A_{12}.\]

一般指标集写法:\(A/A[\alpha]=A[\alpha^c]-A[\alpha^c,\alpha]A[\alpha]^{-1}A[\alpha,\alpha^c]\)。同理可定义 \(A/A_{22}=A_{11}-A_{12}A_{22}^{-1}A_{21}\)。

推导拆解:先看所有块都是 \(1\times1\) 的情形,\(A=\begin{bmatrix}a&b\\c&d\end{bmatrix}\),\(a\ne0\)。 第一步,左乘 \(\begin{bmatrix}1&0\\-c/a&1\end{bmatrix}\):这是中学的消元"第 2 行减去第 1 行的 \(c/a\) 倍",得 \(\begin{bmatrix}a&b\\0&d-cb/a\end{bmatrix}\)。 第二步,右乘 \(\begin{bmatrix}1&-b/a\\0&1\end{bmatrix}\):对列做同样的事,"第 2 列减去第 1 列的 \(b/a\) 倍",得 \(\begin{bmatrix}a&0\\0&d-cb/a\end{bmatrix}\)。 右下角 \(d-cb/a\) 就是 Schur 补 \(A/a\)。取行列式:\(\det A=a\cdot(d-cb/a)=ad-bc\),这就是 (0.8.5.1)。 分块版本只是把数换成矩阵:\(c/a\) 变成 \(A_{21}A_{11}^{-1}\),\(b/a\) 变成 \(A_{11}^{-1}A_{12}\)。唯一要小心的是矩阵乘法不交换,\(A_{21}A_{11}^{-1}A_{12}\) 的顺序不能写反:左边是"行方向"的块 \(A_{21}\),右边是"列方向"的块 \(A_{12}\),中间夹着 \(A_{11}^{-1}\)。可以用维数检查:\(A_{21}\) 是 \((n-k)\times k\),\(A_{11}^{-1}\) 是 \(k\times k\),\(A_{12}\) 是 \(k\times(n-k)\),乘出来恰好是 \((n-k)\times(n-k)\),和 \(A_{22}\) 同型,才能相减。

两侧的消元矩阵都是单位三角阵,行列式为 1、秩不变。因此从 (0.8.5.3) 立即读出三条结论:

(a) 行列式分解:

\[\det A=\det A_{11}\cdot\det(A/A_{11}).\tag{0.8.5.1}\]

(b) 秩可加:\(\operatorname{rank}A=\operatorname{rank}A_{11}+\operatorname{rank}(A/A_{11})\)。特别地,\(\operatorname{rank}A=\operatorname{rank}A_{11}\iff A_{22}=A_{21}A_{11}^{-1}A_{12}\)。

(c) 非奇异性:\(A\) 非奇异 \(\iff A/A_{11}\) 非奇异。

更细致的是,Schur 补的每个元素都是 \(A\) 的两个子式之比:

\[(A/A_{11})_{ij}=\frac{\det A[\{1..k,k+i\},\{1..k,k+j\}]}{\det A_{11}}.\tag{0.8.5.5}\]

原因是分块消元不改变包含 \(A_{11}\) 的那些子矩阵的行列式。

0.6.3 分块求逆

对 (0.8.5.3) 两边求逆(两侧单位三角阵的逆只是把非对角块变号),记 \(S=A/A_{11}\):

\[A^{-1}=\begin{bmatrix}A_{11}^{-1}+A_{11}^{-1}A_{12}S^{-1}A_{21}A_{11}^{-1}&-A_{11}^{-1}A_{12}S^{-1}\\-S^{-1}A_{21}A_{11}^{-1}&S^{-1}\end{bmatrix}.\tag{0.8.5.6}\]

最需要记住的是右下块:

\[\boxed{(A^{-1})_{22}=(A/A_{11})^{-1}}\qquad\text{即}\qquad A^{-1}[\alpha^c]=\big(A/A[\alpha]\big)^{-1}.\]

逆的子块是 Schur 补的逆。务必区分 \(A^{-1}[\alpha]\)(逆的子矩阵)与 \(A[\alpha]^{-1}\)(子矩阵的逆),二者一般不同。

原书还给出另一种对称写法(在所需逆都存在时):

\[A^{-1}=\begin{bmatrix}(A_{11}-A_{12}A_{22}^{-1}A_{21})^{-1}&A_{11}^{-1}A_{12}(A_{21}A_{11}^{-1}A_{12}-A_{22})^{-1}\\A_{22}^{-1}A_{21}(A_{12}A_{22}^{-1}A_{21}-A_{11})^{-1}&(A_{22}-A_{21}A_{11}^{-1}A_{12})^{-1}\end{bmatrix}.\tag{0.7.3.1}\]

比较两种写法的 \((1,1)\) 块,就得到下一节的 Woodbury 公式。

取行列式:\(\det A^{-1}[\{k+1..n\}]=\det A_{11}/\det A\)。这是 Jacobi 恒等式的一个特例,一般形式为

\[\det A^{-1}[\alpha^c,\beta^c]=(-1)^{p(\alpha,\beta)}\frac{\det A[\beta,\alpha]}{\det A},\qquad p(\alpha,\beta)=\sum_{i\in\alpha}i+\sum_{j\in\beta}j.\]

主子式情形最常用:\(\det A^{-1}[\alpha^c]=\det A[\alpha]/\det A\)。

0.6.4 Schur 补的其他性质

  • 商性质(quotient property):把 \(A_{11}\) 再分块,左上角 \(\mathcal A_{11}\) 非奇异,则
    \[A/A_{11}=(A/\mathcal A_{11})/(A_{11}/\mathcal A_{11}).\]
    意思是"分两步消元"与"一步消元"结果相同。对应到概率上:先对一组变量取条件、再对另一组取条件,等于一次对两组取条件。
  • 加边矩阵的 Cauchy 展开:\(\alpha^c\) 是单点时 Schur 补是一个数,
    \[\det\begin{bmatrix}\tilde A&x\\y^T&a\end{bmatrix}=a\det\tilde A-y^T(\operatorname{adj}\tilde A)x,\]
    即使 \(\tilde A\) 奇异也成立。令 \(a=-1\) 并整理,得 Cauchy 秩一扰动行列式公式
    \[\det(\tilde A+xy^T)=\det\tilde A+y^T(\operatorname{adj}\tilde A)x,\]
    当 \(\tilde A\) 非奇异时就是矩阵行列式引理 \(\det(A+xy^T)=\det A\,(1+y^TA^{-1}x)\)。
  • 交换块的行列式:四块同阶,若 \(A_{11}\) 与 \(A_{21}\) 交换,则 \(\det A=\det(A_{11}A_{22}-A_{21}A_{12})\)(看起来像 \(2\times2\) 行列式公式,但前提是交换性)。
  • 互补零度(complementary nullities):\(A\) 非奇异时,\(\operatorname{nullity}A[\alpha,\beta]=\operatorname{nullity}A^{-1}[\beta^c,\alpha^c]\)。推论:非奇异 \(n\) 阶矩阵的任意 \(r\times s\) 子矩阵的秩至少为 \(r+s-n\)。这一结论在研究带状矩阵逆的结构(如三对角阵的逆是"半可分"矩阵)时有用。
  • 秩主矩阵:若 \(\operatorname{rank}A=\operatorname{rank}[A_{11}\ A_{12}]=\operatorname{rank}\begin{bmatrix}A_{11}\\A_{21}\end{bmatrix}=r\)(\(A_{11}\in M_r\)),则 \(A_{11}\) 必非奇异。对称、Hermitian、斜对称矩阵都是**秩主(rank principal)**的:秩为 \(r\) 时一定有一个 \(r\) 阶非奇异主子矩阵。实用含义:一个秩为 \(r\) 的协方差矩阵,总能挑出 \(r\) 个资产,它们的协方差子矩阵满秩,其余资产都是这 \(r\) 个的线性组合。

0.6.5 量化解读:Schur 补就是条件协方差

设收益向量分成两组 \(r=\begin{bmatrix}r_1\\r_2\end{bmatrix}\),协方差 \(\Sigma=\begin{bmatrix}\Sigma_{11}&\Sigma_{12}\\\Sigma_{21}&\Sigma_{22}\end{bmatrix}\)。

1. 最小方差对冲 / 线性回归。 用第一组资产对冲第二组:持有 \(r_2-H^Tr_1\),选 \(H\) 最小化残差协方差。展开

\[\operatorname{Cov}(r_2-H^Tr_1)=\Sigma_{22}-H^T\Sigma_{12}-\Sigma_{21}H+H^T\Sigma_{11}H,\]

配方得最优 \(H^\star=\Sigma_{11}^{-1}\Sigma_{12}\)(正是 \(r_2\) 对 \(r_1\) 的总体回归系数),最优残差协方差

\[\operatorname{Cov}(r_2-H^{\star T}r_1)=\Sigma_{22}-\Sigma_{21}\Sigma_{11}^{-1}\Sigma_{12}=\Sigma/\Sigma_{11}.\]

对冲后剩下的风险就是 Schur 补。 配方的过程本质上就是 (0.8.5.3) 的分块消元。

金融直觉:这就是 CFA 里的最小方差对冲比率。取单资产情形:持有现货 \(S\),用期货 \(F\) 对冲 \(h\) 份,组合方差

\[\operatorname{Var}(r_S-hr_F)=\sigma_S^2-2h\,\sigma_{SF}+h^2\sigma_F^2.\]
这是关于 \(h\) 的开口向上的抛物线,对 \(h\) 求导令其为零:\(-2\sigma_{SF}+2h\sigma_F^2=0\),得 \(h^\star=\sigma_{SF}/\sigma_F^2=\rho\,\sigma_S/\sigma_F\),正是 CFA 教的公式,也是 \(r_S\) 对 \(r_F\) 回归的斜率。代回去:
\[\operatorname{Var}_{\min}=\sigma_S^2-\frac{\sigma_{SF}^2}{\sigma_F^2}=\sigma_S^2(1-\rho^2).\]
中间那个 \(\sigma_S^2-\sigma_{SF}\,(\sigma_F^2)^{-1}\,\sigma_{FS}\) 就是 \(1\times1\) 的 Schur 补 \(\Sigma_{22}-\Sigma_{21}\Sigma_{11}^{-1}\Sigma_{12}\)。矩阵版本把"一个期货对冲一个现货"推广成"一篮子工具对冲一篮子持仓",\(h\) 变成矩阵 \(H\),\(\sigma_F^2\) 的倒数变成 \(\Sigma_{11}^{-1}\),其余一字不改。\(1-\rho^2\) 也就是回归里的 \(1-R^2\):对冲掉的是能被解释的部分,剩下的是残差。 矩阵版的"配方"可以这样写:\(\operatorname{Cov}(r_2-H^Tr_1)=\Sigma/\Sigma_{11}+(H-H^\star)^T\Sigma_{11}(H-H^\star)\),展开右边即可验证。第二项是半正定矩阵(任何组合在它上面的方差都 \(\ge0\)),只有 \(H=H^\star\) 时为零,所以 \(H^\star\) 最优。

2. 多元正态的条件分布。 若 \(r\sim N(\mu,\Sigma)\),则

\[r_2\mid r_1\sim N\big(\mu_2+\Sigma_{21}\Sigma_{11}^{-1}(r_1-\mu_1),\ \Sigma/\Sigma_{11}\big).\]

条件均值是回归预测,条件协方差是 Schur 补,与 \(r_1\) 的取值无关(多元正态分布的详细推导见第 02 册、第 03 册)。

3. 精度矩阵与偏相关。 精度矩阵 \(P=\Sigma^{-1}\) 的子块由 (0.8.5.6) 给出:\(P_{22}=(\Sigma/\Sigma_{11})^{-1}\)。取第二组为两个资产 \(\{i,j\}\)、第一组为其余全部,就得到"控制其余资产后 \(i,j\) 的条件协方差"的逆是 \(P\) 的 \(2\times2\) 子块。对一个 \(2\times2\) 矩阵求逆、再换算成相关系数,得到熟悉的**偏相关(partial correlation)**公式:

\[\rho_{ij\cdot\text{rest}}=-\frac{P_{ij}}{\sqrt{P_{ii}P_{jj}}}.\]

所以 \(P_{ij}=0\) 当且仅当控制其他变量后 \(i\) 与 \(j\) 条件不相关——这是 Graphical Lasso 等稀疏精度矩阵方法估计"资产关联网络"的理论基础。

推导拆解:负号从哪来?记条件协方差 \(C=\Sigma/\Sigma_{11}=\begin{bmatrix}c_{ii}&c_{ij}\\c_{ij}&c_{jj}\end{bmatrix}\)(第二组只有 \(i,j\) 两个资产)。 第一步,由分块求逆,\(P\) 的 \(2\times2\) 子块等于 \(C^{-1}\)。 第二步,用 \(2\times2\) 求逆公式:\(C^{-1}=\dfrac1{\det C}\begin{bmatrix}c_{jj}&-c_{ij}\\-c_{ij}&c_{ii}\end{bmatrix}\),即 \(P_{ii}=c_{jj}/\det C\),\(P_{jj}=c_{ii}/\det C\),\(P_{ij}=-c_{ij}/\det C\)。 第三步,代入:\(-\dfrac{P_{ij}}{\sqrt{P_{ii}P_{jj}}}=\dfrac{c_{ij}/\det C}{\sqrt{c_{ii}c_{jj}}/\det C}=\dfrac{c_{ij}}{\sqrt{c_{ii}c_{jj}}}\),正是条件协方差换算出的相关系数。负号来自 \(2\times2\) 求逆时非对角元要变号。

4. 似然的分解。 (0.8.5.1) 给出 \(\log\det\Sigma=\log\det\Sigma_{11}+\log\det(\Sigma/\Sigma_{11})\),对应联合密度 = 边缘密度 × 条件密度。


0.7 Sherman–Morrison–Woodbury 公式

0.7.1 公式与证明

定理(0.7.4):设 \(A\in M_n\) 非奇异,\(X\in M_{n,r}\),\(Y\in M_{r,n}\),\(R\in M_r\) 非奇异,\(B=A+XRY\)。若 \(R^{-1}+YA^{-1}X\) 非奇异,则

\[\boxed{B^{-1}=A^{-1}-A^{-1}X\big(R^{-1}+YA^{-1}X\big)^{-1}YA^{-1}}\tag{0.7.4.1}\]

直觉:\(B\) 是"容易求逆的 \(A\)"加上一个秩至多 \(r\) 的修正。公式说 \(B^{-1}\) 也只是 \(A^{-1}\) 加一个秩至多 \(r\) 的修正,而计算这个修正只需要求一个 \(r\times r\) 矩阵的逆。当 \(r\ll n\) 时节省巨大。

证明(直接验证):记 \(M=R^{-1}+YA^{-1}X\),

\[\begin{aligned} (A+XRY)\big(A^{-1}-A^{-1}XM^{-1}YA^{-1}\big) &=I+XRYA^{-1}-XM^{-1}YA^{-1}-XRYA^{-1}XM^{-1}YA^{-1}\\ &=I+XRYA^{-1}-XR\big(R^{-1}+YA^{-1}X\big)M^{-1}YA^{-1}\\ &=I+XRYA^{-1}-XRYA^{-1}=I. \end{aligned}\]

推导拆解:三行各用了什么。 第一行:把 \((A+XRY)\) 乘进括号,四项分别是 \(AA^{-1}=I\)、\(XRYA^{-1}\)、\(-AA^{-1}XM^{-1}YA^{-1}=-XM^{-1}YA^{-1}\)、\(-XRYA^{-1}XM^{-1}YA^{-1}\)。 第二行:把第三、四项合并。两项左边都有 \(X\)、右边都有 \(M^{-1}YA^{-1}\),中间分别是 \(I\) 和 \(RYA^{-1}X\)。为了提公因子,把 \(I\) 写成 \(RR^{-1}\),于是中间是 \(R(R^{-1}+YA^{-1}X)=RM\)。 第三行:\(RMM^{-1}=R\),第三、四项合起来变成 \(-XRYA^{-1}\),与第二项抵消。 方阵满足 \(BC=I\) 就自动有 \(CB=I\)(0.4.3 节"左逆就是右逆"),所以只验证一侧就够了。标量情形更好记:\(\dfrac1{a+xry}=\dfrac1a-\dfrac{x\,y/a^2}{1/r+xy/a}\),通分即可核对。

另一种看法:在 (0.7.3.1) 与 (0.8.5.6) 中取 \(A_{11}=A\),\(A_{12}=X\),\(A_{21}=Y\),\(A_{22}=-R^{-1}\),比较 \((1,1)\) 块:左边 \((A_{11}-A_{12}A_{22}^{-1}A_{21})^{-1}=(A+XRY)^{-1}\),右边 \(A^{-1}+A^{-1}X(-R^{-1}-YA^{-1}X)^{-1}YA^{-1}\),正是 Woodbury 公式。Woodbury 公式只是同一个分块矩阵的两种 Schur 补消元顺序给出的同一个结果。

秩一特例(Sherman–Morrison):\(X=x\),\(Y=y^T\),\(R=[1]\),\(1+y^TA^{-1}x\ne0\):

\[(A+xy^T)^{-1}=A^{-1}-\frac{A^{-1}xy^TA^{-1}}{1+y^TA^{-1}x}.\tag{0.7.4.2}\]

特别地 \((I+xy^T)^{-1}=I-\dfrac{xy^T}{1+y^Tx}\)。配套的行列式公式是 \(\det(A+xy^T)=\det A\,(1+y^TA^{-1}x)\),一般形式为

\[\det(A+XRY)=\det A\cdot\det R\cdot\det(R^{-1}+YA^{-1}X).\]

0.7.2 量化应用一:因子模型协方差的快速求逆

结构化风险模型(Barra 类)把 \(N\) 只股票的协方差写成

\[\Sigma=BFB^T+D,\]

\(B\in\mathbf R^{N\times K}\) 是因子暴露,\(F\) 是 \(K\times K\) 因子协方差,\(D\) 是对角的特质方差。\(N\) 常为几千,\(K\) 为几十。均值–方差优化需要 \(\Sigma^{-1}\mu\),最小方差组合需要 \(\Sigma^{-1}e\)。取 \(A=D\)、\(X=B\)、\(R=F\)、\(Y=B^T\):

\[\Sigma^{-1}=D^{-1}-D^{-1}B\big(F^{-1}+B^TD^{-1}B\big)^{-1}B^TD^{-1}.\]

\(D^{-1}\) 是对角阵,求逆免费;唯一要求逆的是 \(K\times K\) 矩阵。计算量从 \(O(N^3)\) 降到 \(O(NK^2)\),而且实务中连 \(N\times N\) 的 \(\Sigma^{-1}\) 都不必形成,直接算 \(\Sigma^{-1}v\) 即可。同样,高斯似然需要的

\[\log\det\Sigma=\log\det D+\log\det F+\log\det\big(F^{-1}+B^TD^{-1}B\big)\]

也只需 \(K\) 阶运算。

0.7.3 量化应用二:滚动回归与递推最小二乘

OLS 估计 \(\hat\beta=(X^TX)^{-1}X^Ty\)。滚动窗口每前进一天,\(X^TX\) 加上新样本的外积 \(x_{\text{new}}x_{\text{new}}^T\)、减去旧样本的外积 \(x_{\text{old}}x_{\text{old}}^T\)——都是秩一修正。用 Sherman–Morrison:

\[(A+xx^T)^{-1}=A^{-1}-\frac{uu^T}{1+x^Tu},\qquad(A-xx^T)^{-1}=A^{-1}+\frac{uu^T}{1-x^Tu},\qquad u=A^{-1}x,\]

每步只需 \(O(k^2)\) 运算(\(k\) 为回归元个数),不必每天重新 \(O(k^3)\) 求逆。只加不减、再乘一个遗忘因子 \(\lambda<1\),就是递推最小二乘(RLS);Kalman 滤波的增益更新也是同一结构(第 06 册时间序列部分会用到)。

实务要点:(1) 删除样本时分母 \(1-x^Tu\) 可能接近 0(该样本是窗口内的高杠杆点),会放大误差;(2) 长时间递推会累积舍入误差,通常每隔若干步用直接法重置一次。


0.8 行列式进阶:伴随、Cramer 法则、Cauchy–Binet 与求导

0.8.1 伴随矩阵与逆

伴随矩阵(adjugate,经典伴随) 是代数余子式矩阵的转置:

\[\operatorname{adj}A=\big[(-1)^{i+j}\det A[\{j\}^c,\{i\}^c]\big],\qquad\operatorname{adj}\begin{bmatrix}a&b\\c&d\end{bmatrix}=\begin{bmatrix}d&-b\\-c&a\end{bmatrix}.\]

基本关系(由 Laplace 展开得出):

\[(\operatorname{adj}A)A=A(\operatorname{adj}A)=(\det A)I,\qquad A^{-1}=\frac{\operatorname{adj}A}{\det A}\ (\det A\ne0).\]

伴随的秩只有三种可能:\(\operatorname{rank}A=n\) 时满秩;\(\operatorname{rank}A=n-1\) 时秩为 1,且 \(\operatorname{adj}A=\alpha xy^T\),其中 \(Ax=0\)、\(y^TA=0\);\(\operatorname{rank}A\le n-2\) 时 \(\operatorname{adj}A=0\)。第 01 章会用这一点"从伴随矩阵读出特征向量"。

连续性论证:原书反复使用的一个技巧。\(\operatorname{adj}\) 是矩阵元素的多项式,因而连续;非奇异矩阵在 \(M_n\) 中稠密(第 01 章定理 1.2.17:\(A+\varepsilon I\) 对充分小的 \(\varepsilon\ne0\) 非奇异)。所以先在非奇异情形用 \(\operatorname{adj}A=(\det A)A^{-1}\) 证明,再取极限推广到全部矩阵。用这个方法可得:

\[\operatorname{adj}(AB)=(\operatorname{adj}B)(\operatorname{adj}A),\quad\operatorname{adj}(cA)=c^{n-1}\operatorname{adj}A,\quad\operatorname{adj}(\operatorname{adj}A)=(\det A)^{n-2}A,\quad\det(\operatorname{adj}A)=(\det A)^{n-1}.\]

此外,\(A\) 与 \(B\) 交换时,\(\operatorname{adj}A\) 也与 \(B\) 交换(即使 \(A\) 奇异)。

Cramer 法则:\(\det A\ne0\) 时 \(Ax=b\) 的解为 \(x_i=\det(A\overset{i}{\leftarrow}b)/\det A\),其中 \((A\overset{i}{\leftarrow}b)\) 表示把 \(A\) 的第 \(i\) 列换成 \(b\)。证明一行:\(A(I\overset{i}{\leftarrow}x)=(A\overset{i}{\leftarrow}b)\),两边取行列式,而 \(\det(I\overset{i}{\leftarrow}x)=x_i\)。Cramer 法则对理论推导有用,但数值计算从不这样解方程。

0.8.2 行列式的导数:\(\partial\log\det\Sigma=\Sigma^{-1}\)

按第 \(i\) 行展开 \(\det A=\sum_ka_{ik}(-1)^{i+k}\det A_{ik}\),而 \(\det A_{ik}\) 不含 \(a_{ik}\),所以

\[\frac{\partial\det A}{\partial a_{ij}}=(-1)^{i+j}\det A_{ij}=(\operatorname{adj}A)_{ji},\qquad\text{即}\quad\Big[\frac{\partial\det A}{\partial a_{ij}}\Big]=(\operatorname{adj}A)^T.\]

非奇异时等于 \((\det A)A^{-T}\),于是

\[\frac{\partial\log\det A}{\partial A}=A^{-T}.\]

推导拆解:用 \(2\times2\) 看清每一步。\(\det A=a_{11}a_{22}-a_{12}a_{21}\)。 对 \(a_{11}\) 求偏导(其余元素看作常数):\(\partial\det A/\partial a_{11}=a_{22}\);同理对 \(a_{12}\) 得 \(-a_{21}\),对 \(a_{21}\) 得 \(-a_{12}\),对 \(a_{22}\) 得 \(a_{11}\)。排成矩阵 \(\begin{bmatrix}a_{22}&-a_{21}\\-a_{12}&a_{11}\end{bmatrix}\),正是 \(\operatorname{adj}A=\begin{bmatrix}a_{22}&-a_{12}\\-a_{21}&a_{11}\end{bmatrix}\) 的转置。 再对 \(\log\) 用链式法则:\(\dfrac{\partial\log\det A}{\partial a_{ij}}=\dfrac1{\det A}\dfrac{\partial\det A}{\partial a_{ij}}\),于是整张偏导数表是 \((\operatorname{adj}A)^T/\det A=(A^{-1})^T\),这里用了 \(A^{-1}=\operatorname{adj}A/\det A\)。 记号 \(\partial f/\partial A\) 的意思就是"把 \(f\) 对每个元素 \(a_{ij}\) 的偏导数排成和 \(A\) 同样形状的矩阵"。对称的 \(\Sigma\) 有 \(\Sigma^{-T}=\Sigma^{-1}\),于是得到章首的 \(\partial\log\det\Sigma/\partial\Sigma=\Sigma^{-1}\)。它和一元的 \(\dfrac{d}{dx}\log x=\dfrac1x\) 长得一样,可以这样记。

对可微的矩阵函数 \(A(t)\),由多重线性逐列求导得 Jacobi 公式:

\[\frac{d}{dt}\det A(t)=\operatorname{tr}\big(\operatorname{adj}A(t)\,A'(t)\big).\tag{0.8.10.1}\]

例如 \(\dfrac{d}{dt}\det(tI-A)=\operatorname{tr}\operatorname{adj}(tI-A)\),第 01 章会用它研究特征多项式的重根。

量化应用:协方差的最大似然估计。 对 \(T\) 个独立的 \(N(0,\Sigma)\) 观测,对数似然(去掉常数)为

\[\ell(\Sigma)=-\frac T2\Big(\log\det\Sigma+\operatorname{tr}(\Sigma^{-1}S)\Big),\qquad S=\frac1T\sum_tr_tr_t^T.\]
利用 \(\partial\log\det\Sigma/\partial\Sigma=\Sigma^{-1}\)(对称情形)与 \(\partial\operatorname{tr}(\Sigma^{-1}S)/\partial\Sigma=-\Sigma^{-1}S\Sigma^{-1}\),令梯度为零得 \(\Sigma^{-1}=\Sigma^{-1}S\Sigma^{-1}\),即 \(\hat\Sigma=S\)。DCC-GARCH、因子模型 EM 算法、Graphical Lasso 中的梯度计算都基于同一个公式。

0.8.3 Cauchy–Binet 公式与复合矩阵

Cauchy–Binet 公式:\(A\in M_{m,k}\),\(B\in M_{k,n}\),\(C=AB\),\(|\alpha|=|\beta|=r\),

\[\det C[\alpha,\beta]=\sum_{\gamma\subseteq\{1..k\},\,|\gamma|=r}\det A[\alpha,\gamma]\det B[\gamma,\beta].\]

形式上和矩阵乘法一模一样,只是"元素"换成了 \(r\) 阶子式。两个特例:\(r=k\) 时就是 \(\det AB=\det A\det B\);\(m=n=r<k\) 时 \(\det(AB)\) 是 \(\binom kr\) 项之和。一个常用推论:\(X\in\mathbf R^{T\times k}\) 时 \(\det(X^TX)=\sum_{|\gamma|=k}\det(X[\gamma,:])^2\ge0\),即 Gram 矩阵的行列式是各个 \(k\times k\) 子块行列式的平方和。

复合矩阵(compound matrix) \(C_r(A)\) 是以全部 \(r\) 阶子式为元素(指标集按字典序)的 \(\binom mr\times\binom nr\) 矩阵。Cauchy–Binet 等价于乘法性 \(C_r(AB)=C_r(A)C_r(B)\)。其他性质:\(C_r(A)^{-1}=C_r(A^{-1})\),\(C_r(A^T)=C_r(A)^T\),\(\det C_r(A)=(\det A)^{\binom{n-1}{r-1}}\)(Sylvester–Franke),\(r=\operatorname{rank}A\) 时 \(\operatorname{rank}C_r(A)=1\)。原书例子:

\[A=\begin{bmatrix}1&2&3\\4&5&6\\7&8&10\end{bmatrix},\quad\det A=-3,\quad C_2(A)=\begin{bmatrix}-3&-6&-3\\-6&-11&-4\\-3&-2&2\end{bmatrix}.\]

与之配套的第 \(r\) 伴随 \(\operatorname{adj}_r(A)\) 的 \((\alpha,\beta)\) 元为 \((-1)^{p(\alpha,\beta)}\det A[\beta^c,\alpha^c]\),满足 \(\operatorname{adj}_r(A)C_r(A)=(\det A)I\)。上例中 \(\operatorname{adj}_2(A)=\begin{bmatrix}10&-6&3\\-8&5&-2\\7&-4&1\end{bmatrix}\),可以验证 \(\operatorname{adj}_2(A)C_2(A)=-3I\)。约定 \(\operatorname{adj}_0(A)=\det A\)、\(\operatorname{adj}_n(A)=1\),\(\operatorname{adj}_1(A)\) 就是经典伴随 \(\operatorname{adj}A\)(原书此处印作"\(\operatorname{adj}_1(A)=A\)",按定义应为 \(\operatorname{adj}A\))。和的行列式可以展开为

\[\det(sA+tB)=\sum_{k=0}^ns^{n-k}t^k\operatorname{tr}\big(\operatorname{adj}_k(A)C_k(B)\big).\]

(原书印作 \(s^kt^{n-k}\) 与 \(C_r(B)\);按 \(\operatorname{adj}_k(A)\) 由 \(A\) 的 \(n-k\) 阶子式构成、\(C_k(B)\) 由 \(B\) 的 \(k\) 阶子式构成,正确形式如上,已用随机矩阵数值核对。)特别地 \(\det(I+A)=\sum_{k=0}^n\operatorname{tr}C_k(A)\),即"特征多项式系数 = 主子式之和",第 01 章会正式证明。

复合矩阵在量化中很少直接出现,读者只需知道它是 Cauchy–Binet 的矩阵化表述,研究乘积的子式、特征值乘积不等式时会用到。

0.8.4 其他行列式恒等式(了解即可)

  • Sylvester 加边恒等式:\(B=[\det A[\alpha\cup\{i\},\alpha\cup\{j\}]]_{i,j\notin\alpha}\),则 \(\det B=(\det A[\alpha])^{n-k-1}\det A\)。由 (0.8.5.5) 知 \(B=(\det A[\alpha])\cdot(A/A[\alpha])\),再取行列式即得。
  • 广义 Laplace 展开:固定 \(k\) 列 \(\beta\),\(\det A=\sum_{|\alpha|=k}(-1)^{p(\alpha,\beta)}\det A[\alpha,\beta]\det A[\alpha^c,\beta^c]\)。
  • Plücker 型二次关系(0.8.8)、Dodgson 凝聚法(0.8.11,若 \(e=\det A[\{1,n\}^c]\ne0\),则 \(\det A=(ad-bc)/e\),\(a,b,c,d\) 为四个 \(n-1\) 阶"角"子式):理论工具,量化中不需要。

0.9 特殊矩阵词典

下表列出原书 0.9 节的特殊矩阵及其在量化中的出现位置。

矩阵 定义 关键性质 量化中的位置
对角 \(D\) 非对角元为 0 左乘缩放行,右乘缩放列;对角元互异的 \(D\) 只与对角阵交换 波动率缩放:\(\Sigma=D_\sigma CD_\sigma\)(\(C\) 为相关矩阵)
分块对角 \(\bigoplus A_{ii}\) 直和 \(\det\)、秩、逆都逐块计算 行业/板块分块的协方差
三角 \(t_{ij}=0\ (i>j)\) \(\det\) = 对角元积;同型乘积、逆仍同型 Cholesky 分解 \(\Sigma=LL^T\),模拟相关随机数
分块三角 对角块下方为零 \(\det=\prod\det A_{ii}\),特征值是对角块的并 VAR 模型的 Granger 因果结构
置换 \(P\) 每行每列一个 1 \(P^{-1}=P^T\);\(PAP^T\) 同步重排行列 资产重新排序(不改变风险)
循环 每行右移一位 \(A=\sum a_{k+1}C_n^k\),同阶循环阵构成交换代数,可被 Fourier 矩阵对角化 周期信号、FFT 卷积
Toeplitz \(a_{ij}=a_{j-i}\) 与转置相似:\(A^T=KAK^{-1}\) 平稳序列的自协方差矩阵,Yule–Walker、Levinson 递推
Hankel \(a_{ij}=a_{i+j-2}\) 对称;\(KH\) 为 Toeplitz 奇异谱分析(SSA)、子空间辨识
上 Hessenberg \(a_{ij}=0\ (i>j+1)\) 不可约时 \(\operatorname{rank}(A-\lambda I)\ge n-1\) QR 特征值算法的中间形式
三对角 \(\vert i-j\vert >1\) 时为 0 顺序主子式三项递推 三次样条、Crank–Nicolson 期权定价(Thomas 算法)
Vandermonde \([x_i^{j-1}]\) \(\det=\prod_{i>j}(x_i-x_j)\) 多项式插值、收益率曲线拟合
Cauchy / Hilbert \([(a_i+b_j)^{-1}]\) / \([(i+j-1)^{-1}]\) Hilbert 阵非奇异但极病态 多项式基回归数值不稳的警示
幂等(投影) \(A^2=A\) 特征值只有 0、1 OLS 帽子矩阵 \(H=X(X^TX)^{-1}X^T\)
幂零 \(A^k=0\) 特征值全为 0

下面补充几处值得展开的细节。

对角矩阵(0.9.1):\(DA\) 把 \(A\) 的第 \(i\) 行乘 \(d_{ii}\),\(AD\) 把第 \(j\) 列乘 \(d_{jj}\);\(DA=AD\) 当且仅当 \(d_{ii}\ne d_{jj}\) 时 \(a_{ij}=0\)。所以对角元互异的对角阵只与对角阵交换。这个事实在第 01 章证明"交换的可对角化矩阵可同时对角化"时是关键一步。原书更一般的版本(0.7.7):\(\Lambda=\lambda_1I_{n_1}\oplus\cdots\oplus\lambda_sI_{n_s}\)(\(\lambda_i\) 互异)与 \(B\) 交换,当且仅当 \(B\) 是与 \(\Lambda\) 共形的分块对角阵。

分块对角(0.9.2):\(\det(\bigoplus A_{ii})=\prod\det A_{ii}\),\(\operatorname{rank}=\sum\operatorname{rank}A_{ii}\),\((A\oplus B)^{-1}=A^{-1}\oplus B^{-1}\),以及 \(\operatorname{adj}(A\oplus B)=(\det B)\operatorname{adj}A\oplus(\det A)\operatorname{adj}B\)。

三角矩阵(0.9.3):左乘单位下三角阵等于做一系列"第 \(i\) 行加上前面行的倍数"的类型 3 行变换,这就是 LU 分解的来源。三角阵的秩至少等于对角线上非零元的个数,但可能更大(例如 \(\begin{bmatrix}0&1\\0&0\end{bmatrix}\) 对角元全零而秩为 1)。若三角阵 \(T\) 对角元互异且与 \(B\) 交换,则 \(B\) 也是同型三角阵。

分块三角与拟三角(0.9.4):对角块都是 \(1\times1\) 或 \(2\times2\) 的分块上三角称为上拟三角(upper quasitriangular),这是实 Schur 形的形状:实矩阵的复特征值以 \(2\times2\) 实块的形式出现。分块三角阵非奇异时,逆也是分块三角,对角块为 \(A_{ii}^{-1}\)。

置换矩阵(0.9.5):例 \(\begin{bmatrix}0&1&0\\1&0&0\\0&0&1\end{bmatrix}[1,2,3]^T=[2,1,3]^T\)。\(PAP^T\) 用同一个置换重排行和列,相当于给资产重新编号,不改变任何本质性质。若某个 \(PAP^T\) 是三角阵,称 \(A\) 本质三角。反序矩阵 \(K_n\)(反对角线为 1)把行或列倒排。广义置换矩阵 \(G=PD\)(\(D\) 非奇异对角)。

Toeplitz 与平稳序列(0.9.7):平稳过程 \(\{x_t\}\) 的自协方差 \(\gamma_h=\operatorname{Cov}(x_t,x_{t+h})\) 只依赖滞后 \(h\),所以 \((x_1,\dots,x_n)\) 的协方差矩阵 \([\gamma_{|i-j|}]\) 是对称 Toeplitz 矩阵。AR 模型的 Yule–Walker 方程正是以它为系数矩阵的线性方程组,Levinson–Durbin 算法利用 Toeplitz 结构把求解从 \(O(n^3)\) 降到 \(O(n^2)\)(见第 06 册)。上三角 Toeplitz 阵 \(A=a_0I+a_1B+\cdots\)(\(B\) 为后移矩阵)构成交换代数;\(a_0\ne0\) 时 \(A^{-1}=\sum b_kB^k\),系数由 \(AA^{-1}=I\) 递推:

\[b_0=a_0^{-1},\qquad b_k=-a_0^{-1}\sum_{m=0}^{k-1}a_{k-m}b_m\quad(k\ge1).\]

(原书该式漏印负号,已由 \(AA^{-1}=I\) 推导更正。)这其实就是幂级数求倒数,和 ARMA 模型中把 \(\phi(L)^{-1}\) 展开为 MA(\(\infty\)) 是同一个计算。

Hankel(0.9.8):任何 Toeplitz 阵都是两个对称阵(\(K\) 与一个 Hankel 阵)的乘积。

三对角(0.9.10):记对角元 \(a_i\)、超对角 \(b_i\)、次对角 \(c_i\),顺序主子式满足三项递推

\[\det A_{k+1}=a_{k+1}\det A_k-b_kc_k\det A_{k-1}.\]

次对角元为正的实对称三对角阵称为 Jacobi 矩阵。原书还定义了广对称(persymmetric,关于反对角线对称,\(K_nA=A^TK_n\))、中心对称(centrosymmetric,\(K_nA=AK_n\))等结构,逆都保持类型;Toeplitz 阵是广对称的。

Vandermonde 与插值(0.9.11):节点 \(x_i\) 互异时,求次数 \(\le n-1\) 的插值多项式 \(p(x_i)=y_i\) 等价于解 \(Aa=y\)(\(A=[x_i^{j-1}]\)),由 \(\det A=\prod_{i>j}(x_i-x_j)\ne0\) 知解唯一。实际计算用 Lagrange 插值:

\[p(x)=\sum_iy_iL_i(x),\qquad L_i(x)=\prod_{j\ne i}\frac{x-x_j}{x_i-x_j}.\]

用于收益率曲线时要小心:高次多项式插值振荡严重,实务多用样条或 Nelson–Siegel 等参数形式。

Cauchy 与 Hilbert(0.9.12):

\[\det[(a_i+b_j)^{-1}]=\frac{\prod_{i<j}(a_j-a_i)(b_j-b_i)}{\prod_{i,j}(a_i+b_j)},\qquad\det H_n=\frac{(1!\,2!\cdots(n-1)!)^4}{1!\,2!\cdots(2n-1)!}.\]

\(H_4\) 的行列式只有约 \(1.65\times10^{-7}\),但逆矩阵元素全是整数(最大达 6480)。用 \(1,x,x^2,\dots\) 做回归元时,\(X^TX\) 近似于 Hilbert 矩阵,这就是多项式回归应改用正交多项式的原因。

对合、幂零、投影(0.9.13):对合 \(A^2=I\);幂零 \(A^k=0\);投影(幂等)\(A^2=A\);Hermitian 投影 \(A^*=A=A^2\) 称为正交投影。OLS 的帽子矩阵 \(H=X(X^TX)^{-1}X^T\) 是正交投影,\(I-H\) 把 \(y\) 映到残差。


0.10 基变换、相似与等价关系

0.10.1 基变换

取定 \(V\) 的基 \(\mathcal B_1=\{v_1,\dots,v_n\}\),线性变换 \(T:V\to V\) 由 \(Tv_1,\dots,Tv_n\) 完全决定。把 \(Tv_j\) 在基 \(\mathcal B_2\) 下的坐标排成列,得到表示矩阵 \({}_{\mathcal B_2}[T]_{\mathcal B_1}\),满足 \([Tx]_{\mathcal B_2}={}_{\mathcal B_2}[T]_{\mathcal B_1}[x]_{\mathcal B_1}\)。

恒等变换在两组基之间的表示 \(S={}_{\mathcal B_2}[I]_{\mathcal B_1}\) 称为基变换矩阵,它可逆,且任何可逆矩阵都可看成某个基变换矩阵。核心公式:

\[{}_{\mathcal B_2}[T]_{\mathcal B_2}={}_{\mathcal B_2}[I]_{\mathcal B_1}\ {}_{\mathcal B_1}[T]_{\mathcal B_1}\ {}_{\mathcal B_1}[I]_{\mathcal B_2}=S\,A\,S^{-1}.\tag{0.10.1.1}\]

同一线性变换在不同基下的矩阵彼此相似。 这是第 01 章研究相似的出发点:相似的矩阵描述的是同一个变换,应当共享该变换的一切"内在"性质(特征值、秩、迹、行列式……)。

白话解释:\(SAS^{-1}\) 从右往左读是三步:\(S^{-1}\) 把新坐标翻译回旧坐标,\(A\) 在旧坐标里做变换,\(S\) 再把结果翻译成新坐标。就像一家公司的报表可以用人民币编、也可以用美元编,换算是 \(S\);业务本身(变换)没变,变的只是记账单位。像"毛利率"这种比率换币种后不变,相当于矩阵的特征值、迹、行列式这些相似不变量。 小例子:\(A=\begin{bmatrix}2&0\\0&3\end{bmatrix}\),\(S=\begin{bmatrix}1&1\\0&1\end{bmatrix}\),\(S^{-1}=\begin{bmatrix}1&-1\\0&1\end{bmatrix}\),算得 \(SAS^{-1}=\begin{bmatrix}2&1\\0&3\end{bmatrix}\)。长相变了,但迹仍是 \(5\)、行列式仍是 \(6\)、特征值仍是 \(2,3\)。

量化类比:同一个风险模型,可以用原始资产表达,也可以用主成分组合、行业组合或因子组合表达。换"坐标系"不改变风险本身,组合方差、特征值这些量都不变;变的只是矩阵的长相。

0.10.2 等价关系、标准形与不变量

等价关系满足自反、对称、传递,它把集合划分为互不相交的等价类。矩阵分析中常见的等价关系(\(S,T\) 非奇异,\(U,V\) 酉,\(L\) 下三角,\(R\) 上三角,\(D_i\) 对角):

关系 定义 \(A\sim B\)
相似(similarity) \(A=SBS^{-1}\)
酉相似(unitary similarity) \(A=UBU^*\)
等价(equivalence) \(A=SBT\)
酉等价(unitary equivalence) \(A=UBV\)
合同(congruence) \(A=SBS^T\)
*合同(*congruence) \(A=SBS^*\)
酉合同(unitary congruence) \(A=UBU^T\)
共轭相似(consimilarity) \(A=SB\bar S^{-1}\)
对角等价(diagonal equivalence) \(A=D_1BD_2\)
三角等价(triangular equivalence) \(A=LBR\)

标准形(canonical form):从每个等价类里选出一个代表。不变量(invariant):等价的元素取值相同的函数。完全不变量系:取值全部相同当且仅当等价。两个例子:

  • 秩是"等价"关系的完全不变量(0.4.2 节);
  • 奇异值是"酉等价"的完全不变量(第 02b 章 SVD);
  • 相似的标准形是 Jordan 形(第 03a 章),合同的不变量是惯性(第 04b 章,量化里用于判断协方差矩阵是否正定)。

"等价关系—标准形—完全不变量"是贯穿全书的主线。读后面各章时,可以随时问自己:这一章研究的是哪种等价关系?标准形是什么?哪些量是不变量?


量化实战

本章的三段代码分别演示:(1) Schur 补就是条件协方差和对冲后风险,并从精度矩阵读出偏相关;(2) 用 Woodbury 公式和行列式引理处理 3000 只股票的因子模型协方差;(3) 用 Sherman–Morrison 做滚动回归。

实战 1:Schur 补、条件协方差与偏相关

场景:手上有两只股票持仓(资产 3、4),可以用两种对冲工具(资产 1、2)对冲。问最优对冲比率是多少、对冲后剩多少风险,以及控制其他资产后各对资产的偏相关。

import numpy as np

rng = np.random.default_rng(42)

# ---------- 1. 样本协方差的秩:T < N 时必然奇异 ----------
N, T = 50, 30                                  # 50 只股票,只有 30 天数据
R = rng.normal(0, 0.01, size=(T, N))           # 日收益率矩阵(行=日期,列=股票)
Rc = R - R.mean(axis=0)                        # 去均值
S = Rc.T @ Rc / (T - 1)                        # 样本协方差 N×N
sv = np.linalg.svd(S, compute_uv=False)
tol = sv[0] * max(S.shape) * np.finfo(float).eps
print("样本协方差的数值秩 =", np.sum(sv > tol), " (理论上 <= T-1 =", T - 1, ")")

# ---------- 2. Schur 补 = 条件协方差 = 最优对冲后的残差风险 ----------
# 4 个资产:前 2 个是对冲工具(如股指期货、行业 ETF),后 2 个是要对冲的持仓
Sigma = np.array([[0.040, 0.018, 0.020, 0.012],
                  [0.018, 0.030, 0.015, 0.016],
                  [0.020, 0.015, 0.050, 0.010],
                  [0.012, 0.016, 0.010, 0.045]])
a, b = [0, 1], [2, 3]
S11, S12 = Sigma[np.ix_(a, a)], Sigma[np.ix_(a, b)]
S21, S22 = Sigma[np.ix_(b, a)], Sigma[np.ix_(b, b)]

schur = S22 - S21 @ np.linalg.solve(S11, S12)   # Σ/Σ11
H = np.linalg.solve(S11, S12)                   # 最小方差对冲比率(回归系数)
print("\n对冲比率 Σ11^{-1}Σ12 =\n", H.round(4))
print("Schur 补 Σ22 - Σ21Σ11^{-1}Σ12 =\n", schur.round(5))

# 用模拟数据核对:持仓收益对对冲工具做 OLS,残差协方差应接近 Schur 补
L = np.linalg.cholesky(Sigma)
X = rng.standard_normal((200_000, 4)) @ L.T
beta, *_ = np.linalg.lstsq(X[:, a], X[:, b], rcond=None)
resid = X[:, b] - X[:, a] @ beta
print("模拟 OLS 系数 =\n", beta.round(4))
print("模拟残差协方差 =\n", np.cov(resid.T).round(5))

# 分块求逆:精度矩阵的右下块 = Schur 补的逆
P = np.linalg.inv(Sigma)
print("\n(Σ^{-1})[b,b] 与 (Σ/Σ11)^{-1} 是否相等:",
      np.allclose(P[np.ix_(b, b)], np.linalg.inv(schur)))

# 行列式分解 det Σ = det Σ11 · det(Σ/Σ11)
print("det Σ =", np.linalg.det(Sigma), " det Σ11·det(Schur) =",
      np.linalg.det(S11) * np.linalg.det(schur))

# 偏相关:控制其余全部变量后,资产 i 与 j 的相关
d = np.sqrt(np.diag(P))
partial = -P / np.outer(d, d)
np.fill_diagonal(partial, 1.0)
print("\n偏相关矩阵(由精度矩阵得到)=\n", partial.round(4))
# 核对资产 2、3 的偏相关 = Schur 补对应的相关系数
print("Schur 补导出的 (2,3) 条件相关 =",
      round(schur[0, 1] / np.sqrt(schur[0, 0] * schur[1, 1]), 4))

关键输出:

样本协方差的数值秩 = 29  (理论上 <= T-1 = 29 )

对冲比率 Σ11^{-1}Σ12 =
 [[0.3767 0.0822]
 [0.274  0.484 ]]
Schur 补 Σ22 - Σ21Σ11^{-1}Σ12 =
 [[0.03836 0.0011 ]
 [0.0011  0.03627]]
模拟 OLS 系数 =
 [[0.3778 0.0801]
 [0.2764 0.4849]]
模拟残差协方差 =
 [[0.03812 0.00106]
 [0.00106 0.03644]]

(Σ^{-1})[b,b] 与 (Σ/Σ11)^{-1} 是否相等: True
det Σ = 1.217599999999998e-06  det Σ11·det(Schur) = 1.2176000000000002e-06

偏相关矩阵(由精度矩阵得到)=
 [[1.     0.3735 0.3098 0.0608]
 [0.3735 1.     0.1805 0.3408]
 [0.3098 0.1805 1.     0.0294]
 [0.0608 0.3408 0.0294 1.    ]]
Schur 补导出的 (2,3) 条件相关 = 0.0294

读法:30 天数据估计 50 只股票的协方差,秩只有 29,必然奇异,不能直接求逆(第 01 章会讲收缩 \(\Sigma+\varepsilon I\))。对冲后资产 3 的方差从 0.050 降到 0.0384,资产 4 从 0.045 降到 0.0363,这就是 Schur 补的对角元。资产 3、4 原始协方差为 0.010(相关约 0.21),控制对冲工具后条件相关只剩 0.029,说明它们的相关大部分来自共同的对冲工具(市场、行业)。模拟 OLS 与理论值一致。

实战 2:因子模型协方差的 Woodbury 求逆与对数行列式

import numpy as np, time

rng = np.random.default_rng(7)
N, K = 3000, 10                                  # 3000 只股票,10 个因子
B = rng.normal(0, 1, size=(N, K))                # 因子暴露
F = np.diag(rng.uniform(0.5, 2.0, K)) * 1e-4     # 因子协方差(对角,简化)
dvec = rng.uniform(1e-4, 9e-4, N)                # 特质方差
Sigma = B @ F @ B.T + np.diag(dvec)              # Σ = B F Bᵀ + D

# ---- 直接求逆:O(N^3) ----
t0 = time.perf_counter()
inv_direct = np.linalg.inv(Sigma)
t_direct = time.perf_counter() - t0

# ---- Woodbury:只需求 K×K 的逆,O(N K^2) ----
def woodbury_inv_factor(B, F, dvec):
    Dinv_B = B / dvec[:, None]                   # D^{-1} B
    M = np.linalg.inv(F) + B.T @ Dinv_B          # F^{-1} + Bᵀ D^{-1} B  (K×K)
    # Σ^{-1} = D^{-1} - D^{-1} B M^{-1} Bᵀ D^{-1}
    return np.diag(1 / dvec) - Dinv_B @ np.linalg.solve(M, Dinv_B.T), M

t0 = time.perf_counter()
inv_wb, M = woodbury_inv_factor(B, F, dvec)
t_wb = time.perf_counter() - t0
print(f"直接求逆 {t_direct:.2f}s,Woodbury {t_wb:.2f}s")
print("两者最大相对误差:", np.max(np.abs(inv_wb - inv_direct)) / np.max(np.abs(inv_direct)))

# 实务中通常连 N×N 的逆都不形成,只算 Σ^{-1}μ(最小方差/均值方差权重)
mu = rng.normal(0.0005, 0.001, N)
def solve_factor(B, F, dvec, v):
    Dv = v / dvec
    Dinv_B = B / dvec[:, None]
    M = np.linalg.inv(F) + B.T @ Dinv_B
    return Dv - Dinv_B @ np.linalg.solve(M, B.T @ Dv)
w = solve_factor(B, F, dvec, mu)
print("Σ^{-1}μ 与直接解的差:", np.max(np.abs(w - np.linalg.solve(Sigma, mu))) / np.max(np.abs(w)))

def logdet_spd(A):
    # 对称正定矩阵:log det A = 2·Σ log(Cholesky 因子对角元),比直接 det 稳定
    return 2 * np.sum(np.log(np.diag(np.linalg.cholesky(A))))

# ---- 行列式引理:log det Σ = log det D + log det F + log det(F^{-1}+BᵀD^{-1}B) ----
logdet_direct = logdet_spd(Sigma)
logdet_fast = np.sum(np.log(dvec)) + np.sum(np.log(np.diag(F))) + logdet_spd(M)
print(f"log det Σ:直接 {logdet_direct:.6f},引理 {logdet_fast:.6f}")

# ---- 梯度公式 ∂ log det Σ / ∂Σ = Σ^{-1}(对称矩阵,取一个对称方向做数值检验) ----
n = 5
A = np.cov(rng.normal(size=(5, 50)))
E = rng.normal(size=(n, n)); E = (E + E.T) / 2
h = 1e-6
num = (logdet_spd(A + h * E) - logdet_spd(A - h * E)) / (2 * h)
ana = np.trace(np.linalg.inv(A) @ E)
print(f"方向导数:数值 {num:.6f},公式 tr(Σ^(-1)E) = {ana:.6f}")

关键输出(耗时随机器不同而变化):

直接求逆 0.17s,Woodbury 0.01s
两者最大相对误差: 1.1508069170691058e-13
Σ^{-1}μ 与直接解的差: 7.744140883439792e-14
log det Σ:直接 -23128.935809,引理 -23128.935809
方向导数:数值 2.529484,公式 tr(Σ^(-1)E) = 2.529484

读法:结果与直接求逆一致到机器精度,速度快一个数量级以上;\(N\) 越大差距越悬殊(直接法 \(O(N^3)\),Woodbury \(O(NK^2)\))。注意 \(\det\Sigma\) 本身约为 \(e^{-23129}\),远小于浮点数能表示的最小正数,直接算 det 只会得到 0,必须算对数行列式。最后一行验证了 \(d\log\det\Sigma=\operatorname{tr}(\Sigma^{-1}d\Sigma)\)。

实战 3:Sherman–Morrison 滚动回归

import numpy as np, time

rng = np.random.default_rng(1)
T, k, W = 5000, 6, 250          # 5000 天,6 个回归元(含截距),窗口 250 天
X = np.column_stack([np.ones(T), rng.normal(size=(T, k - 1))])
beta_true = np.array([0.0002, 1.1, -0.3, 0.2, 0.05, 0.4])
y = X @ beta_true + rng.normal(0, 0.01, T)

def sm_add(Pinv, x):
    """(A + x xᵀ)^{-1},已知 Pinv = A^{-1}"""
    u = Pinv @ x
    return Pinv - np.outer(u, u) / (1.0 + x @ u)

def sm_remove(Pinv, x):
    """(A - x xᵀ)^{-1},要求 1 - xᵀA^{-1}x ≠ 0"""
    u = Pinv @ x
    return Pinv + np.outer(u, u) / (1.0 - x @ u)

# ---- 滚动 OLS:Sherman–Morrison 递推,每步 O(k^2) ----
t0 = time.perf_counter()
Pinv = np.linalg.inv(X[:W].T @ X[:W])       # 第一个窗口直接算
Xty = X[:W].T @ y[:W]
betas_sm = [Pinv @ Xty]
for t in range(W, T):
    x_new, x_old = X[t], X[t - W]
    Pinv = sm_add(Pinv, x_new)              # 新样本进入窗口
    Pinv = sm_remove(Pinv, x_old)           # 旧样本离开窗口
    Xty += y[t] * x_new - y[t - W] * x_old
    betas_sm.append(Pinv @ Xty)
betas_sm = np.array(betas_sm)
t_sm = time.perf_counter() - t0

# ---- 对照:每个窗口重新解正规方程 ----
t0 = time.perf_counter()
betas_direct = np.array([np.linalg.lstsq(X[s:s + W], y[s:s + W], rcond=None)[0]
                         for s in range(T - W + 1)])
t_direct = time.perf_counter() - t0

print(f"窗口数 {len(betas_sm)};SM 递推 {t_sm:.3f}s,逐窗重算 {t_direct:.3f}s")
print("最大系数差异:", np.max(np.abs(betas_sm - betas_direct)))

# 数值漂移:长期递推会累积舍入误差,实务中定期用直接法重置
drift = np.max(np.abs(Pinv - np.linalg.inv(X[T - W:].T @ X[T - W:])))
print("最后一个窗口 (XᵀX)^{-1} 的累计漂移:", drift)
print("最后一个窗口 β 估计:", betas_sm[-1].round(4))

关键输出:

窗口数 4751;SM 递推 0.025s,逐窗重算 0.065s
最大系数差异: 1.4654943925052066e-14
最后一个窗口 (XᵀX)^{-1} 的累计漂移: 2.688821387764051e-17
最后一个窗口 β 估计: [-3.0000e-04  1.0997e+00 -3.0000e-01  1.9990e-01  4.9900e-02  4.0030e-01]

读法:4751 个窗口的系数与逐窗重算完全一致。\(k=6\) 时节省有限;回归元多(如几十个风格和行业因子的时序回归)、窗口多、需要逐笔更新时,\(O(k^2)\) 对 \(O(k^3)\) 以及"不必重新扫描窗口数据"的优势才明显。这个例子里设计矩阵条件良好,漂移极小;遇到近共线回归元时漂移会显著变大,应定期重置。


本章小结

本章复习了线性代数的基本对象(向量空间、矩阵、秩、行列式、内积),并重点发展了分块矩阵工具。核心思想只有一个:分块消元。对 \(A=\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix}\) 做一次分块 Gauss 消元,就得到 Schur 补 \(A/A_{11}\),并同时得到行列式分解、秩可加、分块求逆公式和 Jacobi 恒等式;换个消元顺序再比较,就得到 Sherman–Morrison–Woodbury 公式。在量化语境下,Schur 补是条件协方差、对冲后的残差风险和偏相关的来源,Woodbury 公式让数千只股票的因子模型协方差可以快速求逆,Sherman–Morrison 让滚动回归逐日更新。此外,\(\partial\log\det\Sigma/\partial\Sigma=\Sigma^{-1}\) 是所有高斯似然估计的基础;"先对非奇异矩阵证明、再用连续性推广"是贯穿全书的证明技巧;"基变换导出相似、等价关系导出标准形与不变量"是全书的结构主线。

概念/公式 表达式 用途
秩–零度定理 \(\operatorname{rank}A+\operatorname{nullity}A=n\) 自由度计数
子空间交引理 \(\dim(S_1\cap S_2)\ge\dim S_1+\dim S_2-n\) 极小极大原理(第 04a 章)
Gram 矩阵同秩 \(\operatorname{rank}A^*A=\operatorname{rank}A\) 共线性 ⇔ \(X^TX\) 奇异
秩一修正改变秩至多 1 \(\vert \operatorname{rank}(A+xy^T)-\operatorname{rank}A\vert \le1\)
Schur 补 \(A/A_{11}=A_{22}-A_{21}A_{11}^{-1}A_{12}\) 条件协方差、对冲残差
行列式分解 \(\det A=\det A_{11}\det(A/A_{11})\) 似然分解
逆的子块 \((A^{-1})_{22}=(A/A_{11})^{-1}\) 精度矩阵、偏相关
偏相关 \(\rho_{ij\cdot\text{rest}}=-P_{ij}/\sqrt{P_{ii}P_{jj}}\) 资产关联网络
Woodbury \((A+XRY)^{-1}=A^{-1}-A^{-1}X(R^{-1}+YA^{-1}X)^{-1}YA^{-1}\) 因子模型求逆
Sherman–Morrison \((A+xy^T)^{-1}=A^{-1}-\dfrac{A^{-1}xy^TA^{-1}}{1+y^TA^{-1}x}\) 滚动回归、RLS
行列式引理 \(\det(A+xy^T)=\det A(1+y^TA^{-1}x)\) 快速 \(\log\det\)
伴随 \(A\operatorname{adj}A=(\det A)I\) 求逆、求特征向量
行列式梯度 \(\partial\log\det A/\partial A=A^{-T}\) 协方差 MLE
Jacobi 公式 \(\frac{d}{dt}\det A(t)=\operatorname{tr}(\operatorname{adj}A\,A')\) 特征多项式重根
Cauchy–Binet \(\det(AB)[\alpha,\beta]=\sum_\gamma\det A[\alpha,\gamma]\det B[\gamma,\beta]\) 子式计算
基变换 \([T]_{\mathcal B_2}=S[T]_{\mathcal B_1}S^{-1}\) 相似的来源

练习

原书第 0 章没有习题。下面的练习一部分来自精读时建议的自我验证,一部分是为量化读者补充的。

基础

  1. 用分块乘法直接验证分块求逆公式 (0.8.5.6):把它与 \(A\) 相乘,检查得到 \(I\)。 提示:逐块计算,右下块 \(-A_{21}A_{11}^{-1}A_{12}S^{-1}+A_{22}S^{-1}=SS^{-1}=I\)。
  2. 从 (0.8.5.3) 出发证明秩可加性 \(\operatorname{rank}A=\operatorname{rank}A_{11}+\operatorname{rank}(A/A_{11})\)。 提示:两侧单位三角阵非奇异,不改变秩;分块对角阵的秩是各块秩之和。
  3. 设两只股票的协方差为 \(\Sigma=\begin{bmatrix}\sigma_1^2&\rho\sigma_1\sigma_2\\\rho\sigma_1\sigma_2&\sigma_2^2\end{bmatrix}\)。用 Schur 补求用资产 1 对冲资产 2 后的残差方差,并说明 \(\rho\to\pm1\) 时的含义。 答案要点:\(\sigma_2^2-\rho^2\sigma_1^2\sigma_2^2/\sigma_1^2=\sigma_2^2(1-\rho^2)\);完全相关时可以完全对冲,\(\Sigma\) 奇异。
  4. 用 Sherman–Morrison 公式求等相关矩阵 \(C=(1-\rho)I+\rho ee^T\) 的逆,并给出 \(C\) 非奇异的条件。 答案要点:\(C^{-1}=\dfrac1{1-\rho}\Big(I-\dfrac{\rho}{1-\rho+n\rho}ee^T\Big)\);需 \(\rho\ne1\) 且 \(1+(n-1)\rho\ne0\)(第 01 章会从特征值角度重新得到这个结果)。
  5. 计算原书例子 \(A=\begin{bmatrix}1&2&3\\4&5&6\\7&8&10\end{bmatrix}\) 的 \(C_2(A)\) 与 \(\operatorname{adj}_2(A)\),验证 \(\operatorname{adj}_2(A)C_2(A)=(\det A)I=-3I\)。

进阶

  1. 用连续性论证证明 \(\operatorname{adj}(AB)=(\operatorname{adj}B)(\operatorname{adj}A)\) 对所有 \(A,B\in M_n\) 成立。 提示:非奇异时 \(\operatorname{adj}(AB)=\det(AB)(AB)^{-1}=(\det B\,B^{-1})(\det A\,A^{-1})\);用 \(A+\varepsilon I\)、\(B+\varepsilon I\) 逼近。
  2. 对 \(2\times2\) 情形直接验证 Jacobi 公式 \(\frac{d}{dt}\det A(t)=\operatorname{tr}(\operatorname{adj}A(t)A'(t))\)。
  3. 证明偏相关公式 \(\rho_{ij\cdot\text{rest}}=-P_{ij}/\sqrt{P_{ii}P_{jj}}\)。 提示:把 \(\{i,j\}\) 放在最后,由 (0.8.5.6),\(P\) 的右下 \(2\times2\) 块是条件协方差 \(C\) 的逆;对 \(2\times2\) 矩阵 \(C^{-1}=\frac1{\det C}\begin{bmatrix}c_{22}&-c_{12}\\-c_{12}&c_{11}\end{bmatrix}\),代入即得。
  4. 因子模型 \(\Sigma=BFB^T+D\) 下,最小方差组合权重 \(w\propto\Sigma^{-1}e\)。用 Woodbury 公式写出 \(\Sigma^{-1}e\) 的表达式,并说明当特质方差 \(D=\delta I\) 且 \(\delta\to0\) 时会发生什么。 提示:\(\Sigma^{-1}e=D^{-1}e-D^{-1}B(F^{-1}+B^TD^{-1}B)^{-1}B^TD^{-1}e\)。\(\delta\to0\) 时 \((F^{-1}+B^TB/\delta)^{-1}\approx\delta(B^TB)^{-1}\),代入后 \(\Sigma^{-1}e\approx\frac1\delta(I-B(B^TB)^{-1}B^T)e\),即权重趋向于 \(e\) 在因子暴露正交补上的投影:组合会尽力对所有因子中性化。
  5. 编程:实现带遗忘因子 \(\lambda\) 的递推最小二乘 \(P_t^{-1}=\lambda P_{t-1}^{-1}+x_tx_t^T\),用 Sherman–Morrison 递推 \(P_t\),对一个 beta 随时间缓慢漂移的模拟序列估计时变 beta,比较 \(\lambda=0.99\) 与 \(\lambda=0.95\) 的跟踪效果。

原书对照

本章小节 原书小节 书页 PDF 页
前言(版本说明、全书结构) Preface to the 2nd / 1st Edition xi–xviii 13–20
0.1 向量空间、基与维数 0.1 Vector spaces 1–5 21–25
0.2 矩阵 0.2 Matrices 5–8 25–28
0.3 行列式 0.3 Determinants 8–12 28–32
0.4 秩与非奇异性 0.4 Rank;0.5 Nonsingularity 12–14 32–34
0.5 内积、正交与 Gram–Schmidt 0.6 The Euclidean inner product and norm 15–16 35–36
0.6 分块矩阵与 Schur 补 0.7 Partitioned sets and matrices;0.8.4–0.8.5(在 0.8 节内) 16–21;0.8 节 21–30 36–41;0.8 节 41–50
0.7 Sherman–Morrison–Woodbury 0.7.4(在 0.7 节内) 16–21 36–41
0.8 行列式进阶 0.8 Determinants again 21–30 41–50
0.9 特殊矩阵词典 0.9 Special types of matrices 30–38 50–58
0.10 基变换与等价关系 0.10 Change of basis;0.11 Equivalence relations 39–41 59–61

关于原书的使用:原书正文中穿插的 exercises 难度低、读到即可做;每节末尾的 problems 难度不一,部分会被后文引用,书末附录 "Hints for Problems" 给出许多题目的提示。第 1–3 章是全书核心,第 4–8 章分别深入 Hermitian 矩阵、范数、特征值摄动、正定矩阵和非负矩阵。第 0 章只供查阅,遇到陌生记号时回查原书末尾的 Notation 表与索引。