7
$\begingroup$

I am looking for a method (if it exists) for the inverse of a large sparse Hermitian block matrix. The off diagonal sparse matrices, named δ are 4x4, and they have only one non null element on the diagonal part. The matrices M are Hermitian and also 4x4. I need a way to perform the inverse of M3 or the determinant. I am interested in a generalization of this structure for a matrix of higher rank with the same "telescopic" structure. Here is the code

dimension        = 4;
mat              = ( {{m, a, b, b},{Conjugate[a], m, b, b},{Conjugate[b], Conjugate[b], m, a},{Conjugate[b], Conjugate[b], Conjugate[a], m}});
Subscript[O, 4]  = ( {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}} );
Subscript[δ, 1]  = ( {{I ρ, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}} );
Subscript[δ, 2]  = ( {{0, 0, 0, 0},{0, I ρ, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}} );
Subscript[δ, 3]  = ( {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, I ρ, 0},{0, 0, 0, 0}} );
Subscript[δ, 4]  = ( {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, I ρ}} );
Subscript[δ, 22] = ArrayFlatten[( {{Subscript[O, 4], Subscript[δ, 2]}, {Subscript[δ, 2], Subscript[O, 4]}})];
Subscript[δ, 33] = ArrayFlatten[( {
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 3]},
    {Subscript[O, 4], Subscript[O, 4], Subscript[δ, 3], Subscript[O, 4]},
    {Subscript[O, 4], Subscript[δ, 3], Subscript[O, 4], Subscript[O, 4]},
    {Subscript[δ, 3], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]}
} )];
Subscript[δ, 44] = ArrayFlatten[( {
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4]},
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4]},
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4]}, 
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]}, 
    {Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]},
    {Subscript[O, 4], Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]},
    {Subscript[O, 4], Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]},
    {Subscript[δ, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4], Subscript[O, 4]}
} )];

OutM[M_, δ_] := ArrayFlatten[{{M, δ},{-δ, M}}];
M1 = OutM[mat, Subscript[δ, 1]];
M2 = FullSimplify[OutM[M1, Subscript[δ, 22]]];
M3 = FullSimplify[OutM[M2, Subscript[δ, 33]]];
M4 = FullSimplify[OutM[M3, Subscript[δ, 44]]];

And I need the inverse of M4. The structure is telescopic in some sense.

$\endgroup$
13
  • $\begingroup$ Even better, could you provide code to construct it so we don't have to re-write it? $\endgroup$
    – acl
    May 28, 2012 at 11:11
  • 3
    $\begingroup$ You are aware that inverting a large, sparse matrix invariably results in a large, dense matrix, right? Or do you have any guarantee that the inverse has a known/predictable sparsity pattern? $\endgroup$ May 28, 2012 at 11:20
  • $\begingroup$ If the matrix isn't too big, what exactly is the problem with using Inverse[]/Det[] directly? $\endgroup$ May 28, 2012 at 12:12
  • 2
    $\begingroup$ I think there's an error in your definition of OutM. A bracket and a comma are missing. I presume it should be OutM[M_, \[Delta]_] := ArrayFlatten[( {{M, \[Delta]},{-\[Delta], M}} )]; $\endgroup$ May 28, 2012 at 13:34
  • 1
    $\begingroup$ Here's a related question. The approach to block-inversion discussed in Daniel Lichtblau's answer should work here. $\endgroup$
    – Eli Lansey
    May 29, 2012 at 21:36

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.