舒尔补【Schur Complement】

2024-05-07 03:04
文章标签 舒尔补 complement schur

本文主要是介绍舒尔补【Schur Complement】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、定义
  • 二、推导
  • 三、一些性质
  • 四、解线性方程组
  • 五、参考资料


舒尔补(Schur complement)是线性代数中的一个重要概念,经常在矩阵理论、优化问题和数值计算中出现。舒尔补可以用来简化大型线性系统的求解和分析,特别是在稀疏矩阵和块矩阵的情况下。

一、定义

M M M为一个 ( p + q ) × ( p + q ) (p+q)\times(p+q) (p+q)×(p+q)的方阵:
M = [ A B C D ] \mathrm M=\begin{bmatrix}\mathrm A&\mathrm B\\\mathrm C&\mathrm D\end{bmatrix} M=[ACBD]
其中 A , B , C , D A,B,C,D A,B,C,D分别表示 p × p , p × q , q × p , q × q p\times p,p\times q,q\times p,q\times q p×p,p×q,q×p,q×q 维度的矩阵, p , q p,q p,q为两个非负整数。

如果 D D D是可逆的,则矩阵块的 Schur completement 被定义为:
M / D : = A − B D − 1 C . \mathrm{M/D}:=\mathrm{A}-\mathrm{BD}^{-1}\mathrm{C}. M/D:=ABD1C.
如果 A A A是可逆,则矩阵块的 Schur completement 被定义为:
M / A : = D − C A − 1 B . \mathrm{M}/\mathrm{A}:=\mathrm{D}-\mathrm{C}\mathrm{A}^{-1}\mathrm{B}. M/A:=DCA1B.
Tips:顺时针记忆.

二、推导

当对矩阵 M M M执行块高斯消元时,会产生舒尔补。为了消去块对角线以下的元素,需要将矩阵 M M M乘以一个块下三角矩阵,如下所示:
M = [ A B C D ] → [ A B C D ] [ I p 0 − D − 1 C I q ] = [ A − B D − 1 C B 0 D ] , \begin{aligned}&M=\begin{bmatrix}A&B\\C&D\end{bmatrix}\quad\to\quad\begin{bmatrix}A&B\\C&D\end{bmatrix}\begin{bmatrix}I_p&0\\-D^{-1}C&I_q\end{bmatrix}=\begin{bmatrix}A-BD^{-1}C&B\\0&D\end{bmatrix},\end{aligned} M=[ACBD][ACBD][IpD1C0Iq]=[ABD1C0BD],
进一步,我们还可以将 M M M分解为对角块矩阵:
M = [ A B C D ] = [ I p B D − 1 0 I q ] [ A − B D − 1 C 0 0 D ] [ I p 0 D − 1 C I q ] . \mathrm M=\begin{bmatrix}\mathrm A&\mathrm B\\\mathrm C&\mathrm D\end{bmatrix}=\begin{bmatrix}\mathrm I_\mathrm p&\mathrm B\mathrm D^{-1}\\0&\mathrm I_\mathrm q\end{bmatrix}\:\begin{bmatrix}\mathrm A-\mathrm B\mathrm D^{-1}\mathrm C&0\\0&\mathrm D\end{bmatrix}\:\begin{bmatrix}\mathrm I_\mathrm p&0\\\mathrm D^{-1}\mathrm C&\mathrm I_\mathrm q \end{bmatrix}. M=[ACBD]=[Ip0BD1Iq][ABD1C00D][IpD1C0Iq].

三、一些性质

下面假设 A A A可逆,则其舒尔补为 M / A . \mathrm{M}/\mathrm{A}. M/A.

  1. det ⁡ M = det ⁡ A det ⁡ M / A \det M= \det A\det \mathrm{M}/\mathrm{A} detM=detAdetM/A.
  2. rank ⁡ M = rank ⁡ A + rank ⁡ M / A \operatorname{rank} M= \operatorname{rank} A+\operatorname{rank} \mathrm{M}/\mathrm{A} rankM=rankA+rankM/A.
  3. 如果 M M M是Hermitian矩阵,则存在非奇异矩阵 T T T,使得:
    T M T ∗ = [ A 0 0 M / A ] \mathrm{TMT^*}= \begin{bmatrix}\mathrm A&\mathrm 0\\ \mathrm 0&\mathrm{M}/\mathrm{A} \end{bmatrix} TMT=[A00M/A]
    其中 T ∗ T^* T T T T的共轭转置,也就是说当 M M M为Hermitian矩阵时,存在一个合同变换将 M M M变换为块对角矩阵,而合同变换有一个性质是不会改变Hermitian矩阵的惯性指数(正、负、零特征值的个数).由这个性质可以自然的推导出下面的性质.
  4. 用来判断 M M M或者 M / A \mathrm{M}/\mathrm{A} M/A是否正定的性质:
    M ≻ 0 ⇔ A ≻ 0 , M / A ≻ 0 M\succ0 \Leftrightarrow A\succ0,\mathrm{M}/\mathrm{A}\succ0 M0A0,M/A0
    也就是说,M是否正定可以用A是否正定来判断,反之亦然.在优化领域中常用判断矩阵是否正定.

四、解线性方程组

舒尔补会在求解线性方程组时出现,例如我们要求解如下方程组 :
[ A B C D ] [ x y ] = [ u v ] . \left[\begin{array}{ll} A & B \\ C & D \end{array}\right]\left[\begin{array}{l} x \\ y \end{array}\right]=\left[\begin{array}{l} u \\ v \end{array}\right]. [ACBD][xy]=[uv].

假设子矩阵 A A A是可逆的,我们可以从方程中消除 x x x,如下所示:
x = A − 1 ( u − B y ) , x=A^{-1}(u-B y), x=A1(uBy),

将这个表达式代入第二个方程得到
( D − C A − 1 B ) y = v − C A − 1 u . \left(D-C A^{-1} B\right) y=v-C A^{-1} u . (DCA1B)y=vCA1u.

我们将其称为从原始方程中消除 x x x后得到的简化方程。在简化方程中出现的矩阵被称为 M M M中第一个块 A A A的舒尔补,我们记为:
S = def  D − C A − 1 B . S \stackrel{\text { def }}{=} D-C A^{-1} B. S= def DCA1B.

解简化后的方程,得到
y = S − 1 ( v − C A − 1 u ) . y=S^{-1}\left(v-C A^{-1} u\right) . y=S1(vCA1u).

将它代入第一个方程得到
x = ( A − 1 + A − 1 B S − 1 C A − 1 ) u − A − 1 B S − 1 v . x=\left(A^{-1}+A^{-1} B S^{-1} C A^{-1}\right) u-A^{-1} B S^{-1} v . x=(A1+A1BS1CA1)uA1BS1v.

我们可以将上述两个方程表示为:
[ x y ] = [ A − 1 + A − 1 B S − 1 C A − 1 − A − 1 B S − 1 − S − 1 C A − 1 S − 1 ] [ u v ] \left[\begin{array}{l} x \\ y \end{array}\right]=\left[\begin{array}{cc} A^{-1}+A^{-1} B S^{-1} C A^{-1} & -A^{-1} B S^{-1} \\ -S^{-1} C A^{-1} & S^{-1} \end{array}\right]\left[\begin{array}{l} u \\ v \end{array}\right] [xy]=[A1+A1BS1CA1S1CA1A1BS1S1][uv]

因此,分块矩阵的逆矩阵表达式为:
[ A B C D ] − 1 = [ A − 1 + A − 1 B S − 1 C A − 1 − A − 1 B S − 1 − S − 1 C A − 1 S − 1 ] = [ I p − A − 1 B I q ] [ A − 1 S − 1 ] [ I p − C A − 1 I q ] . \left[\begin{array}{ll} A & B \\ C & D \end{array}\right]^{-1}=\left[\begin{array}{cc} A^{-1}+A^{-1} B S^{-1} C A^{-1} & -A^{-1} B S^{-1} \\ -S^{-1} C A^{-1} & S^{-1} \end{array}\right]=\left[\begin{array}{cc} I_p & -A^{-1} B \\ & I_q \end{array}\right]\left[\begin{array}{cc} A^{-1} & \\ & S^{-1} \end{array}\right]\left[\begin{array}{ccc} I_p & \\ -C A^{-1} & I_q \end{array}\right] . [ACBD]1=[A1+A1BS1CA1S1CA1A1BS1S1]=[IpA1BIq][A1S1][IpCA1Iq].

我们可以看到,利用舒尔补,可以在解方程组时降低方程的维数.

五、参考资料

  1. https://en.wikipedia.org/wiki/Schur_complement

这篇关于舒尔补【Schur Complement】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966137

相关文章

Leetcode 476. Number Complement

Problem The complement of an integer is the integer you get when you flip all the 0’s to 1’s and all the 1’s to 0’s in its binary representation. For example, The integer 5 is “101” in binary and it

LeetCode--1012. Complement of Base 10 Integer 1013. Pairs of Songs With Total Durations Divisible

好久没更LeetCode了,因为最近手头的事情比较多。今天更新两条easy问题。 1013. Pairs of Songs With Total Durations Divisible by 60 这个问题是一个模算术问题。将歌曲时长转为[0,59]余数即可。 class Solution {public int numPairsDivisibleBy60(int[] time) {int

七、VINS-mono 代码解析——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化

文章目录 前言紧耦合后端非线性优化系统框架一、VIO中的状态向量与代价函数1、需要优化的状态向量:2、目标函数为:二、视觉约束1.视觉重投影误差residual2、优化变量3、Jacobian4、协方差三、IMU约束1、残差:2、优化变量:3、IMU测量残差公式推导4、残差对状态量的Jacobian5、残差对状态量的协方差四、基于舒尔补的边缘化1、论文部分2、基本公式3、舒尔补4、marg后

VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化

预积分和后端优化IMU部分** https://blog.csdn.net/weixin_44580210/article/details/93377806 本讲是VINS最核心部分了,前面经历了 1)视觉跟踪feature_tracker、IMU预积分integrationBase类; 2)初始化中SFM纯视觉估计滑动窗中所有帧的位姿和3D路标点深度、SFM与IMU预积分松耦合对齐求解初始化

476. Number Complement(数字的补数)

问题描述 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。 给你一个整数 num ,输出它的补数。 问题分析 以5为例,采用异或操作用原数5异或上"111"就能得到相应的补数,由此我们可以知道整个问题就是让原数的二进制数码异或上一个与原

1009. Complement of Base 10 Integer

1009. 十进制整数的反码 每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。 给定十进制数 N,返回其二进制表示的反码所对应的十

476. Number Complement

476. 数字的补数 给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围内。你可以假定二进制数不包含前导零位。 示例 1: 输入: 5输出: 2解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。 示例 2: 输入: 1输出: 0解释: 1的二进制表示为1(没有前导零位),其补数为0。所

LMI(线性矩阵不等式)、schur补 学习笔记

1.掌握求解LMI的目的(以及整套流程)    掌握matlab中LMI工具箱的函数使用 2.掌握schurs补 -------------------------------------------------- 你的点赞是我更新的动力! -------------------------------------------------- 一.掌握求解LMI的目的(以及整套流程)

one's-complement 反码, two's-complement 补码, one's complement sum, two's complement sum

1.one's-complement: 反码,高位为符号位;    two's-complement: 补码,高位为符号位;   2. one's complement sum 反码加法,需要加上进位;     two's complement sum 补码加法,丢弃进位进位;     例举一个网上的例子:  2's complement fixed point integers (8

leetcode 1012. Complement of Base 10 Integer

leetcode 1012. Complement of Base 10 Integer 题意:给你一个数,比如5,他的二进制是101,把三个数的每一个取反,得到010,返回2. 思路:简单模拟就好了。0的时候,记得返回1. class Solution {public:int bitwiseComplement(int N) {if(N==0) return 1;vector<int>