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.
Inverse[]/Det[]directly? – J. M.'s missing motivation May 28 '12 at 12:12OutM. A bracket and a comma are missing. I presume it should beOutM[M_, \[Delta]_] := ArrayFlatten[( {{M, \[Delta]},{-\[Delta], M}} )];– Sjoerd C. de Vries May 28 '12 at 13:34Inverseof M1, M2, M3, M4 in 0.01, 0.4, 5, and 66 seconds, respectively. – Sjoerd C. de Vries May 28 '12 at 13:43Inverse[M1], 9 seconds forInverse[M2]and I abortedInverse[M3]after 5 minutes. – Simon Woods May 28 '12 at 17:57