Skip to content

2.3 正定矩阵与二次型

正定矩阵在优化和风险管理中无处不在——它决定了一个函数是凸还是凹、组合方差永远不会为负。


一、二次型

1.1 从一元到多元

一元二次:ax2ax^2(一个平方项)

多元二次(二次型):把所有平方项和交叉项放在一起,写成矩阵形式。

A=[2113]A = \begin{bmatrix} 2 & 1 \\ 1 & 3 \end{bmatrix},则二次型 Q(x)=xTAxQ(\boldsymbol{x}) = \boldsymbol{x}^T A \boldsymbol{x} 为:

Q(x)=[x1,x2][2113][x1x2]=2x12+2x1x2+3x22Q(\boldsymbol{x}) = [x_1, x_2] \begin{bmatrix} 2 & 1 \\ 1 & 3 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = 2x_1^2 + 2x_1x_2 + 3x_2^2

注意 Q(x)Q(\boldsymbol{x}) 永远输出一个数字

1.2 算一个具体值

x=(1,2)\boldsymbol{x} = (1, 2)

Q(1,2)=2(1)2+2(1)(2)+3(2)2=2+4+12=18Q(1, 2) = 2(1)^2 + 2(1)(2) + 3(2)^2 = 2 + 4 + 12 = 18

x=(0,0)\boldsymbol{x} = (0, 0)

Q(0,0)=0Q(0, 0) = 0

所以二次型的最小值至少是 0。它能不能是负数?取决于 AA 的性质。


二、正定矩阵

2.1 定义

对称矩阵 AA 称为:

  • 正定:对所有 x0\boldsymbol{x} \neq \boldsymbol{0}xTAx>0\boldsymbol{x}^T A \boldsymbol{x} > 0
  • 半正定:对所有 x\boldsymbol{x}xTAx0\boldsymbol{x}^T A \boldsymbol{x} \ge 0
  • 负定:对所有 x0\boldsymbol{x} \neq \boldsymbol{0}xTAx<0\boldsymbol{x}^T A \boldsymbol{x} < 0

2.2 判定

最常用的判定方法:所有特征值 > 0(详见 2.4)⇔ 正定

取上面的 A=[2113]A = \begin{bmatrix} 2 & 1 \\ 1 & 3 \end{bmatrix}

det(AλI)=det[2λ113λ]=(2λ)(3λ)1=λ25λ+5=0\det(A - \lambda I) = \det\begin{bmatrix} 2-\lambda & 1 \\ 1 & 3-\lambda \end{bmatrix} = (2-\lambda)(3-\lambda) - 1 = \lambda^2 - 5\lambda + 5 = 0

λ=5±25202=5±523.618,1.382\lambda = \frac{5 \pm \sqrt{25 - 20}}{2} = \frac{5 \pm \sqrt{5}}{2} \approx 3.618, 1.382

两个特征值都大于 0,所以 AA 是正定的。

2.3 为什么重要

在一元函数中,f(x)>0f''(x) > 0 意味着函数是凸的(最小值),f(x)<0f''(x) < 0 是凹的(最大值)。

在多元函数中,海森矩阵 HH 的作用就相当于 f(x)f''(x)

  • HH 正定 → 局部最小值 ✅
  • HH 负定 → 局部最大值
  • HH 有正有负 → 鞍点

Quant Link协方差矩阵一定是半正定的,为什么?因为对任何权重向量 w\boldsymbol{w},组合方差 wTΣw=Var(wTR)0\boldsymbol{w}^T \Sigma \boldsymbol{w} = \text{Var}(\boldsymbol{w}^T R) \ge 0(方差不可能为负)。这保证了:

  1. 你做组合优化时,最小方差组合存在且唯一
  2. 如果 Σ\Sigma 不正定(即奇异),说明有资产能被其他资产复制——需要剔除冗余

三、Cholesky 分解

正定矩阵 AA 可以分解为 A=LLTA = LL^T,其中 LL 是下三角矩阵。

量化核心应用:生成相关随机数。

你想生成 1000 个服从 N(0,Σ)N(\boldsymbol{0}, \Sigma) 的样本,怎么做?

  1. Σ\Sigma 做 Cholesky 分解:Σ=LLT\Sigma = LL^T
  2. 生成 1000 个独立标准正态向量 z\boldsymbol{z}
  3. 计算 x=Lz\boldsymbol{x} = L\boldsymbol{z}

得到的 x\boldsymbol{x} 就具有协方差 Σ\Sigma

手算验证

Σ=[10.70.71]\Sigma = \begin{bmatrix} 1 & 0.7 \\ 0.7 & 1 \end{bmatrix},Cholesky 分解得 L=[100.710.49]=[100.70.714]L = \begin{bmatrix} 1 & 0 \\ 0.7 & \sqrt{1-0.49} \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0.7 & 0.714 \end{bmatrix}

验证:LLT=[100.70.714][10.700.714]=[10.70.71]=ΣLL^T = \begin{bmatrix} 1 & 0 \\ 0.7 & 0.714 \end{bmatrix} \begin{bmatrix} 1 & 0.7 \\ 0 & 0.714 \end{bmatrix} = \begin{bmatrix} 1 & 0.7 \\ 0.7 & 1 \end{bmatrix} = \Sigma

python
import numpy as np

Sigma = np.array([[1.0, 0.7], [0.7, 1.0]])
L = np.linalg.cholesky(Sigma)
print(f"L =\n{L}")
print(f"LLᵀ =\n{L @ L.T}")

# 生成相关随机数
np.random.seed(42)
z = np.random.normal(size=(100000, 2))
x = z @ L.T
print(f"样本相关系数: {np.corrcoef(x.T)[0,1]:.4f}")  # ≈ 0.7

\n> 下一步:继续学习 2.4 特征值分解与SVD

Built with VitePress