Skip to main content
2 of 2
edited tags

How to symbolically do matrix "Block Inversion"?

Consider a block (partitioned) matrix

matrix = ArrayFlatten[{{a, b}, {c, d}}] 

where, a, b, c and d are each matrices themselves. Say, for example,

a = {{a11, a12}, {a21, a22}} b = {{b11, b12}, {b21, b22}} c = {{0, 0}, {0, 0}} d = {{d11, d12}, {d21, d22}} 

How can you find the block inverse of this matrix? A desired solution is, using the example above

{{Inverse[a] , -Inverse[a].b.Inverse[d]},{0,Inverse[d]}} 

which is easily verified using

Simplify[Inverse[ArrayFlatten[{{a, b}, {c, d}}]] == ArrayFlatten[{{Inverse[a], -Inverse[a].b.Inverse[d]}, {0, Inverse[d]}}]] 

which yields True.

How can you solve the block inverse problem for arbitrary submatrices, and for block matrices of larger sizes (i.e. 3x3, 4x4, etc)?

Eli Lansey
  • 7.6k
  • 3
  • 39
  • 73