Is there an easy way to compute the determinant of this block matrix?

258 Views Asked by At

$$M = \begin{bmatrix} X & \begin{bmatrix} I\\I\\-I\\-I\end{bmatrix}\\ \begin{bmatrix}-I&-I&I&I\end{bmatrix}&O\end{bmatrix}$$

Is there an easy way to compute the determinant of the block matrix above? Or, at least, can I know if $\det (M) > 0$ if $X$ is positive definite?

$X$ is, for example, an $8 \times 8$ matrix while $I$ is the $2 \times 2$ identity and $O$ is the the $2 \times 2$ zero matrix.

1

There are 1 best solutions below

4
On BEST ANSWER

$$\mathrm M := \left[\begin{array}{c|c} \,\mathrm X & \mathrm C\\ \hline -\mathrm C^\top & \,\,\mathrm O_2\end{array}\right]$$

where $n \times n$ matrix $\rm X$ is positive definite and, thus, invertible. Using Gaussian elimination,

$$\left[\begin{array}{c|c} \mathrm I_n & \mathrm O_{n \times 2}\\ \hline \mathrm C^\top \mathrm X^{-1} & \mathrm I_2\end{array}\right] \left[\begin{array}{c|c} \,\mathrm X & \mathrm C\\ \hline -\mathrm C^\top & \,\,\mathrm O_2\end{array}\right] = \left[\begin{array}{c|c} \mathrm X & \mathrm C\\ \hline \quad\mathrm O_{2 \times n} & \,\,\mathrm C^\top \mathrm X^{-1} \mathrm C\end{array}\right]$$

Since the determinant of a block triangular matrix is the product of the determinants of the diagonal blocks,

$$\det (\mathrm M) = \det (\mathrm X) \cdot \det \Big(\mathrm C^\top \mathrm X^{-1} \mathrm C \Big)$$

where the Schur complement $\mathrm C^\top \mathrm X^{-1} \mathrm C$ is a $2 \times 2$ matrix (whose determinant is easy to compute). Note that $\det (\mathrm X) > 0$ and that $n \times 2$ matrix $\mathrm X^{-1} \mathrm C$ can be computed using Gaussian elimination.


Using SymPy to verify:

>>> from sympy import *
>>> n = Symbol('n', integer=True)
>>> X = MatrixSymbol('X',n,n)
>>> C = MatrixSymbol('C',n,2)
>>> O = ZeroMatrix(2,2)
>>> M = BlockMatrix([[   X,  C],
                     [-C.T,  O]])

Building the elimination matrix,

>>> E = BlockMatrix([[     Identity(n), ZeroMatrix(n,2)],
                     [C.T * Inverse(X),     Identity(2)]])

Performing Gaussian elimination,

>>> block_collapse(E * M)
Matrix([[X,         C],
        [0, C'*X^-1*C]])