用舒尔补给平面圆“配方“:从齐次矩阵形式到圆心 + 半径形式

在做立体视觉、相机标定、三维重建,或者推导任何带二次曲线的几何问题时,我们经常会看到这样一种"压缩"写法:一个圆被装进一个 3 × 3 3\times 3 3×3 的对称矩阵里,用齐次坐标的二次型表示。这种写法代数上整洁,但有一个致命缺陷------圆心在哪儿、半径多大,完全看不出来

本文介绍一个非常优雅的工具------舒尔补 (Schur Complement)------来完成这次"配方":把齐次矩阵形式逐步整理成可以直接读出几何参数的标准形式。


目录


一、问题的起点:平面圆的两种写法

1.1 我们熟悉的"标准几何形式"

谈到平面圆,我们最熟悉的写法是

∥ p − p 0 ∥ 2 = R 2 , \|\mathbf{p} - \mathbf{p}_0\|^2 = R^2, ∥p−p0∥2=R2,

或者更一般地,带一个对称正定的"度规" A \mathbf{A} A:

( p − p 0 ) T A ( p − p 0 ) = R 2 . (\mathbf{p} - \mathbf{p}_0)^T \mathbf{A} (\mathbf{p} - \mathbf{p}_0) = R^2. (p−p0)TA(p−p0)=R2.

这种形式的好处是几何参数一眼可见 :圆心是 p 0 \mathbf{p}_0 p0,半径是 R R R,主轴方向由 A \mathbf{A} A 的特征向量决定。

1.2 实际推导中常见的"齐次矩阵形式"

可是在实际的几何推导中------比如把空间圆投影到一个参数化平面上、或把一个椭球与平面相交------我们更经常得到这样一种紧凑写法:

x y 1 \] \[ M b b T τ \] \[ x y 1 \] = 0 (1) \\begin{bmatrix} x \& y \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{M} \& \\mathbf{b} \\\\ \\mathbf{b}\^T \& \\tau \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} = 0 \\tag{1} \[xy1\]\[MbTbτ\] xy1 =0(1) 其中 * M \\mathbf{M} M 是 2 × 2 2\\times 2 2×2 对称正定矩阵(对应二次曲线为椭圆/圆所要求的); * b \\mathbf{b} b 是 2 × 1 2\\times 1 2×1 列向量; * τ \\tau τ 是标量。 把它展开,就是一般的二次曲线方程 p T M p + 2 b T p + τ = 0 , p = \[ x y \] . \\mathbf{p}\^T \\mathbf{M} \\mathbf{p} + 2\\mathbf{b}\^T \\mathbf{p} + \\tau = 0, \\quad \\mathbf{p} = \\begin{bmatrix} x \\\\ y \\end{bmatrix}. pTMp+2bTp+τ=0,p=\[xy\]. 平方项、交叉项、一次项、常数项------全都混在一起。我们要做的,是把它"配方"成形式 (1.1)。 > 这里的难点不是"想不到要配方",而是想配方时面对一个矩阵不知道该从何下手。中学时配方的对象是一元/二元的标量表达式,有限符号操作很直观;现在面对的是分块矩阵,需要的是**矩阵层面的配方法**。这就是舒尔补登场的时刻。 *** ** * ** *** ### 二、舒尔补:一种分块的高斯消元 #### 2.1 定义 设有一个分块矩阵 P = \[ A B C D \] , \\mathbf{P} = \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{C} \& \\mathbf{D} \\end{bmatrix}, P=\[ACBD\], 其中 A \\mathbf{A} A 是 p × p p\\times p p×p 的**可逆** 方阵, D \\mathbf{D} D 是 q × q q\\times q q×q 方阵, B \\mathbf{B} B 是 p × q p\\times q p×q, C \\mathbf{C} C 是 q × p q\\times p q×p。 则称 P / A    : =    D − C A − 1 B \\mathbf{P}/\\mathbf{A} \\;:=\\; \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} P/A:=D−CA−1B 为 A \\mathbf{A} A 在 P \\mathbf{P} P 中的 **舒尔补 (Schur complement of A \\mathbf{A} A in P \\mathbf{P} P)**。 直观上,它就是把分块矩阵做高斯消元之后,右下角剩下的那一块。 #### 2.2 核心恒等式:分块 LDU 分解 舒尔补真正的力量,在于它给出一个**分块的 LDU 分解**: \[ A B C D \] = \[ I p 0 C A − 1 I q \] ⏟ L   :   下三角 \[ A 0 0 D − C A − 1 B \] ⏟ D b   :   分块对角 \[ I p A − 1 B 0 I q \] ⏟ U   :   上三角 (2) \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{C} \& \\mathbf{D} \\end{bmatrix}= \\underbrace{\\begin{bmatrix} \\mathbf{I}_p \& \\mathbf{0} \\\\ \\mathbf{C}\\mathbf{A}\^{-1} \& \\mathbf{I}_q \\end{bmatrix}}_{\\mathbf{L}\\,:\\,\\text{下三角}} \\underbrace{\\begin{bmatrix} \\mathbf{A} \& \\mathbf{0} \\\\ \\mathbf{0} \& \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix}}_{\\mathbf{D}_b\\,:\\,\\text{分块对角}} \\underbrace{\\begin{bmatrix} \\mathbf{I}_p \& \\mathbf{A}\^{-1}\\mathbf{B} \\\\ \\mathbf{0} \& \\mathbf{I}_q \\end{bmatrix}}_{\\mathbf{U}\\,:\\,\\text{上三角}} \\tag{2} \[ACBD\]=L:下三角 \[IpCA−10Iq\]Db:分块对角 \[A00D−CA−1B\]U:上三角 \[Ip0A−1BIq\](2) #### 2.3 推导:从右往左乘 简单验证一下。先算后两个矩阵的乘积: \[ A 0 0 D − C A − 1 B \] \[ I p A − 1 B 0 I q \] = \[ A A ⋅ A − 1 B 0 D − C A − 1 B \] = \[ A B 0 D − C A − 1 B \] . \\begin{bmatrix} \\mathbf{A} \& \\mathbf{0} \\\\ \\mathbf{0} \& \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix} \\begin{bmatrix} \\mathbf{I}_p \& \\mathbf{A}\^{-1}\\mathbf{B} \\\\ \\mathbf{0} \& \\mathbf{I}_q \\end{bmatrix}= \\begin{bmatrix} \\mathbf{A} \& \\mathbf{A}\\cdot\\mathbf{A}\^{-1}\\mathbf{B} \\\\ \\mathbf{0} \& \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix}= \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{0} \& \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix}. \[A00D−CA−1B\]\[Ip0A−1BIq\]=\[A0A⋅A−1BD−CA−1B\]=\[A0BD−CA−1B\]. 再左乘下三角矩阵: \[ I p 0 C A − 1 I q \] \[ A B 0 D − C A − 1 B \] = \[ A B C A − 1 A C A − 1 B + D − C A − 1 B \] = \[ A B C D \] . \\begin{bmatrix} \\mathbf{I}_p \& \\mathbf{0} \\\\ \\mathbf{C}\\mathbf{A}\^{-1} \& \\mathbf{I}_q \\end{bmatrix} \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{0} \& \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix}= \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{A} \& \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} + \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} \\end{bmatrix}= \\begin{bmatrix} \\mathbf{A} \& \\mathbf{B} \\\\ \\mathbf{C} \& \\mathbf{D} \\end{bmatrix}. \[IpCA−10Iq\]\[A0BD−CA−1B\]=\[ACA−1ABCA−1B+D−CA−1B\]=\[ACBD\]. 恒等式得证。 #### 2.4 它的几何含义 这个 LDU 分解本质上是**高斯消元的矩阵语言**: * **左乘下三角 L \\mathbf{L} L** :相当于对块行做一次消元,把第二块行减去 C A − 1 \\mathbf{C}\\mathbf{A}\^{-1} CA−1 倍的第一块行; * **右乘上三角 U \\mathbf{U} U** :相当于对块列做一次消元,把第二块列减去 A − 1 B \\mathbf{A}\^{-1}\\mathbf{B} A−1B 倍的第一块列; * **消元的剩余物** ,正是 D − C A − 1 B \\mathbf{D} - \\mathbf{C}\\mathbf{A}\^{-1}\\mathbf{B} D−CA−1B,也就是舒尔补 P / A \\mathbf{P}/\\mathbf{A} P/A。 如果把对称的二次型 x T P x \\mathbf{x}\^T\\mathbf{P}\\mathbf{x} xTPx 嵌入到上下三角矩阵之间,那么 L \\mathbf{L} L 和 U \\mathbf{U} U 实际上代表一次**线性换元**,而中间的分块对角矩阵则给出换元之后的纯平方项。 *** ** * ** *** ### 三、把舒尔补用在圆上 #### 3.1 套用分解 回到式 (1) 中的分块矩阵 P = \[ M b b T τ \] . \\mathbf{P} = \\begin{bmatrix} \\mathbf{M} \& \\mathbf{b} \\\\ \\mathbf{b}\^T \& \\tau \\end{bmatrix}. P=\[MbTbτ\]. 对照舒尔补的符号: A = M \\mathbf{A}=\\mathbf{M} A=M, B = b \\mathbf{B}=\\mathbf{b} B=b, C = b T \\mathbf{C}=\\mathbf{b}\^T C=bT, D = τ \\mathbf{D}=\\tau D=τ。注意 P \\mathbf{P} P 是对称的,所以分解中下三角是上三角的转置。直接套用 (2): \[ M b b T τ \] = \[ I 2 0 b T M − 1 1 \] \[ M 0 0 τ − b T M − 1 b \] \[ I 2 M − 1 b 0 1 \] . (3) \\begin{bmatrix} \\mathbf{M} \& \\mathbf{b} \\\\ \\mathbf{b}\^T \& \\tau \\end{bmatrix}= \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{0} \\\\ \\mathbf{b}\^T\\mathbf{M}\^{-1} \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{M} \& \\mathbf{0} \\\\ \\mathbf{0} \& \\tau - \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} \\end{bmatrix} \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{M}\^{-1}\\mathbf{b} \\\\ \\mathbf{0} \& 1 \\end{bmatrix}. \\tag{3} \[MbTbτ\]=\[I2bTM−101\]\[M00τ−bTM−1b\]\[I20M−1b1\].(3) (用到了 M \\mathbf{M} M 对称所以 M − T = M − 1 \\mathbf{M}\^{-T} = \\mathbf{M}\^{-1} M−T=M−1。) 代回到圆方程 (1): \[ x y 1 \] \[ I 2 0 b T M − 1 1 \] \[ M 0 0 τ − b T M − 1 b \] \[ I 2 M − 1 b 0 1 \] \[ x y 1 \] = 0. (4) \\begin{bmatrix} x \& y \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{0} \\\\ \\mathbf{b}\^T\\mathbf{M}\^{-1} \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{M} \& \\mathbf{0} \\\\ \\mathbf{0} \& \\tau - \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} \\end{bmatrix} \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{M}\^{-1}\\mathbf{b} \\\\ \\mathbf{0} \& 1 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} = 0. \\tag{4} \[xy1\]\[I2bTM−101\]\[M00τ−bTM−1b\]\[I20M−1b1\] xy1 =0.(4) #### 3.2 把上下三角"吸"进齐次向量 观察右半部分: \[ I 2 M − 1 b 0 1 \] \[ p 1 \] = \[ p + M − 1 b 1 \] . \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{M}\^{-1}\\mathbf{b} \\\\ \\mathbf{0} \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{p} \\\\ 1 \\end{bmatrix}= \\begin{bmatrix} \\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b} \\\\ 1 \\end{bmatrix}. \[I20M−1b1\]\[p1\]=\[p+M−1b1\]. 左半部分(它是右半部分的转置): \[ p T 1 \] \[ I 2 0 b T M − 1 1 \] = \[ ( p + M − 1 b ) T 1 \] . \\begin{bmatrix} \\mathbf{p}\^T \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{I}_2 \& \\mathbf{0} \\\\ \\mathbf{b}\^T\\mathbf{M}\^{-1} \& 1 \\end{bmatrix}= \\begin{bmatrix} (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b})\^T \& 1 \\end{bmatrix}. \[pT1\]\[I2bTM−101\]=\[(p+M−1b)T1\]. **这正是关键的一步** :上下三角矩阵在齐次坐标下,起的就是一个**平移换元** p    ↦    p + M − 1 b \\mathbf{p} \\;\\mapsto\\; \\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b} p↦p+M−1b 的作用。 把它代回式 (4): \[ ( p + M − 1 b ) T 1 \] \[ M 0 0 τ − b T M − 1 b \] \[ p + M − 1 b 1 \] = 0. \\begin{bmatrix} (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b})\^T \& 1 \\end{bmatrix} \\begin{bmatrix} \\mathbf{M} \& \\mathbf{0} \\\\ \\mathbf{0} \& \\tau - \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} \\end{bmatrix} \\begin{bmatrix} \\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b} \\\\ 1 \\end{bmatrix} = 0. \[(p+M−1b)T1\]\[M00τ−bTM−1b\]\[p+M−1b1\]=0. 中间是分块对角矩阵,展开后两块独立: ( p + M − 1 b ) T M ( p + M − 1 b ) + ( τ − b T M − 1 b ) = 0. (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b})\^T \\mathbf{M} (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b}) + (\\tau - \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b}) = 0. (p+M−1b)TM(p+M−1b)+(τ−bTM−1b)=0. 移项:    ( p + M − 1 b ) T M ( p + M − 1 b )    =    b T M − 1 b − τ    (5) \\boxed{\\; (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b})\^T \\mathbf{M} (\\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b}) \\;=\\; \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau \\;} \\tag{5} (p+M−1b)TM(p+M−1b)=bTM−1b−τ(5) **一次项被彻底消掉了。** *** ** * ** *** ### 四、从 (5) 读出圆心和半径 #### 4.1 圆心:让平方项归零的点 式 (5) 左侧是关于 p + M − 1 b \\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b} p+M−1b 的纯二次型,在 p + M − 1 b = 0 \\mathbf{p} + \\mathbf{M}\^{-1}\\mathbf{b} = \\mathbf{0} p+M−1b=0 处取得唯一极值。这就是**圆心**:    p 0    =    −   M − 1 b    (6) \\boxed{\\;\\mathbf{p}_0 \\;=\\; -\\,\\mathbf{M}\^{-1}\\mathbf{b}\\;} \\tag{6} p0=−M−1b(6) #### 4.2 进一步对角化 M \\mathbf{M} M 式 (5) 没有了一次项,但 M \\mathbf{M} M 本身还可能带交叉项(即非对角元素非零)。对对称的 M \\mathbf{M} M 做特征值分解: M = X M   Λ M   X M T , Λ M = d i a g ( Λ M 1 ,   Λ M 2 ) , \\mathbf{M} = \\mathbf{X}_\\mathbf{M}\\, \\boldsymbol{\\Lambda}_\\mathbf{M}\\, \\mathbf{X}_\\mathbf{M}\^T, \\quad \\boldsymbol{\\Lambda}_\\mathbf{M} = \\mathrm{diag}(\\Lambda_{\\mathbf{M}1},\\,\\Lambda_{\\mathbf{M}2}), M=XMΛMXMT,ΛM=diag(ΛM1,ΛM2), 其中 X M \\mathbf{X}_\\mathbf{M} XM 是正交矩阵,列向量是 M \\mathbf{M} M 的特征向量。代入 (5): ( p − p 0 ) T X M   Λ M   X M T ( p − p 0 ) = b T M − 1 b − τ . (7) (\\mathbf{p}-\\mathbf{p}_0)\^T \\mathbf{X}_\\mathbf{M}\\, \\boldsymbol{\\Lambda}_\\mathbf{M}\\, \\mathbf{X}_\\mathbf{M}\^T (\\mathbf{p}-\\mathbf{p}_0)= \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau. \\tag{7} (p−p0)TXMΛMXMT(p−p0)=bTM−1b−τ.(7) 令 q : = X M T ( p − p 0 ) \\mathbf{q} := \\mathbf{X}_\\mathbf{M}\^T(\\mathbf{p}-\\mathbf{p}_0) q:=XMT(p−p0)(即在 M \\mathbf{M} M 的主轴方向上重新建坐标),则 Λ M 1   q 1 2 + Λ M 2   q 2 2 = b T M − 1 b − τ . \\Lambda_{\\mathbf{M}1}\\, q_1\^2 + \\Lambda_{\\mathbf{M}2}\\, q_2\^2 = \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau. ΛM1q12+ΛM2q22=bTM−1b−τ. **交叉项也被消掉了。** #### 4.3 半径:当且仅当两个特征值相等 (7) 一般描述的是**椭圆** ,只有当 Λ M 1 = Λ M 2 \\Lambda_{\\mathbf{M}1} = \\Lambda_{\\mathbf{M}2} ΛM1=ΛM2(记作 Λ \\Lambda Λ)时才退化成圆。此时 Λ ⋅ ∥ p − p 0 ∥ 2 = b T M − 1 b − τ      ⟹      R 2 = b T M − 1 b − τ Λ . \\Lambda \\cdot \\\|\\mathbf{p} - \\mathbf{p}_0\\\|\^2 = \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau \\;\\;\\Longrightarrow\\;\\; R\^2 = \\frac{\\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau}{\\Lambda}. Λ⋅∥p−p0∥2=bTM−1b−τ⟹R2=ΛbTM−1b−τ. 在工程实践中, M \\mathbf{M} M 来自数值计算,两个特征值往往略有偏差。一种稳健的写法是取两个特征值的均值:    R    =    2 ( b T M − 1 b − τ ) Λ M 1 + Λ M 2    (8) \\boxed{\\; R \\;=\\; \\sqrt{\\dfrac{2\\bigl(\\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau\\bigr)}{\\Lambda_{\\mathbf{M}1} + \\Lambda_{\\mathbf{M}2}}} \\;} \\tag{8} R=ΛM1+ΛM22(bTM−1b−τ) (8) 至此,圆心 (6) 和半径 (8) 都从原始的齐次矩阵中提了出来。 #### 4.4 半径有解的条件 值得注意的是,要让 R R R 是个实数,必须有 b T M − 1 b − τ    \>    0. \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} - \\tau \\;\>\\; 0. bTM−1b−τ\>0. 这个条件其实就是要求**舒尔补 τ − b T M − 1 b \\tau - \\mathbf{b}\^T\\mathbf{M}\^{-1}\\mathbf{b} τ−bTM−1b 为负** ------它等价于整个 3 × 3 3\\times 3 3×3 矩阵 P \\mathbf{P} P 不是正定的(否则二次型恒大于零,不会有解)。这是熟悉的线性代数结论的另一种打开方式:**舒尔补的符号决定了原矩阵的惯性指数**。 *** ** * ** ***

相关推荐
05候补工程师2 小时前
【线性代数】核心考点:二次型、矩阵三大关系综合与正定矩阵判别法
笔记·线性代数·考研·算法·矩阵
AI科技星2 小时前
基于全域数学0-1-∞体系的1.237宇宙临界常数及时空超导统一理论
c语言·开发语言·线性代数·量子计算·agi
2601_9577875811 小时前
企业级内容矩阵的安全合规体系构建与技术实现
大数据·安全·矩阵
2601_9577875815 小时前
数据驱动的多平台内容矩阵运营效果分析与闭环优化技术
大数据·人工智能·矩阵
2601_9577875820 小时前
短视频矩阵风控对抗技术:星链引擎的账号安全防护体系深度解析
线性代数·安全·矩阵
图码20 小时前
矩阵操作优化:从 O(q×n) 到 O(q) 的优雅进阶
数据结构·线性代数·算法·性能优化·矩阵·python3.11
qq_2965532720 小时前
矩阵转置的两种实现方式:从暴力法到原地算法
数据结构·线性代数·算法·青少年编程·矩阵
2601_957787581 天前
星链引擎矩阵系统:内容资产全生命周期管理与智能标签体系技术实践
大数据·人工智能·矩阵·内容资产管理
图码1 天前
生命游戏的优雅解法:从O(mn)空间到O(1)空间的进阶之旅
数据结构·算法·游戏·矩阵·空间计算