The required block matrix of block matrices can be generated as follows when none of the dimensions are zeroes. But How to create the block matrices when the dimensions of 2 or 3 or more submatrices are zeroes?
Dimensions of major 9 submatrices which appear in block diagonal are taken to be
{p1, p2, p3, q1, q2, q3, r1, r2, r3}. The other dimensions of other submatrices are taken to be
P = p1 + p2 + p3; Q = q1 + q2 + q3; R = r1 + r2 + r3 In the case of non-zero dimensions the following code works for any arbitrary dimensions: (We need to generate submatrices with arbitrary dimensions including zero dimensions)
{p1, p2, p3, q1, q2, q3, r1, r2, r3}= {3, 4, 3, 4, 3, 4, 3, 4, 3}; P = p1 + p2 + p3; Q = q1 + q2 + q3; R = r1 + r2 + r3; Here the dimension of the final matrix is
P+Q+R=31 The code is:
ArrayFlatten[{{ArrayFlatten[{{ConstantArray[a, {p1, p1}], ConstantArray[b, {p1, p2}], ConstantArray[c, {p1, p3}]}, {ConstantArray[d, {p2, p1}], IdentityMatrix[p2], ConstantArray[e, {p2, p3}]}, {ConstantArray[f, {p3, p1}], ConstantArray[g, {p3, p2}], ConstantArray[h, {p3, p3}]}}], ConstantArray[i, {P, Q}], ConstantArray[j, {P, R}]}, {ConstantArray[k, {Q, P}], ArrayFlatten[{{ConstantArray[l, {q1, q1}], ConstantArray[m, {q1, q2}], ConstantArray[n, {q1, q3}]}, {ConstantArray[o, {q2, q1}], IdentityMatrix[q2], ConstantArray[p, {q2, q3}]}, {ConstantArray[q, {q3, q1}], ConstantArray[r, {q3, q2}], ConstantArray[s, {q3, q3}]}}], ConstantArray[t, {Q, R}]}, {ConstantArray[u, {R, P}], ConstantArray[v, {R, Q}], ArrayFlatten[{{ConstantArray[w, {r1, r1}], ConstantArray[x, {r1, r2}], ConstantArray[y, {r1, r3}]}, {ConstantArray[z, {r2, r1}], IdentityMatrix[r2], ConstantArray[\[Alpha], {r2, r3}]}, {ConstantArray[\[Beta], {r3, r1}], ConstantArray[\[Gamma], {r3, r2}], ConstantArray[\[Delta], {r3, r3}]}}]}}]; % // MatrixForm The above code works when we set
{p1, p2, p3, q1, q2, q3, r1, r2, r3}= {3, 4, 3, 4, 3, 4, 3, 4, 3}; P = p1 + p2 + p3; Q = q1 + q2 + q3; R = r1 + r2 + r3; When we set some of the the dimensions to zero, for example,
{p1, p2, p3, q1, q2, q3, r1, r2, r3}= {0, 4, 0, 4, 0, 4, 3, 4, 0}; this code doesn't work. Here the dimension of the final matrix will be
P+Q+R=19 The required matrix in this case is
{ {1, 0, 0, 0, i, i, i, i, i, i, i, i, j, j, j, j, j, j, j}, {0, 1, 0, 0, i, i, i, i, i, i, i, i, j, j, j, j, j, j, j}, {0, 0, 1, 0, i, i, i, i, i, i, i, i, j, j, j, j, j, j, j}, {0, 0, 0, 1, i, i, i, i, i, i, i, i, j, j, j, j, j, j, j}, {k, k, k, k, l, l, l, l, n, n, n, n, t, t, t, t, t, t, t}, {k, k, k, k, l, l, l, l, n, n, n, n, t, t, t, t, t, t, t}, {k, k, k, k, l, l, l, l, n, n, n, n, t, t, t, t, t, t, t}, {k, k, k, k, l, l, l, l, n, n, n, n, t, t, t, t, t, t, t}, {k, k, k, k, q, q, q, q, s, s, s, s, t, t, t, t, t, t, t}, {k, k, k, k, q, q, q, q, s, s, s, s, t, t, t, t, t, t, t}, {k, k, k, k, q, q, q, q, s, s, s, s, t, t, t, t, t, t, t}, {k, k, k, k, q, q, q, q, s, s, s, s, t, t, t, t, t, t, t}, {u, u, u, u, v, v, v, v, v, v, v, v, w, w, w, x, x, x, x}, {u, u, u, u, v, v, v, v, v, v, v, v, w, w, w, x, x, x, x}, {u, u, u, u, v, v, v, v, v, v, v, v, w, w, w, x, x, x, x}, {u, u, u, u, v, v, v, v, v, v, v, v, z, z, z, 1, 0, 0, 0}, {u, u, u, u, v, v, v, v, v, v, v, v, z, z, z, 0, 1, 0, 0}, {u, u, u, u, v, v, v, v, v, v, v, v, z, z, z, 0, 0, 1, 0}, {u, u, u, u, v, v, v, v, v, v, v, v, z, z, z, 0, 0, 0, 1} }