0
$\begingroup$

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} } 
$\endgroup$
2
  • $\begingroup$ But running IDEntityMatix[0]:=...; is showing some errors... Similarly for CONstantArray[n_, {0, a_}] := ...; $\endgroup$ Commented Jun 22 at 11:26
  • $\begingroup$ The message is "Syntax::sntxb: Expression cannot begin with "IDEntityMatrix[0]:=...;"." $\endgroup$ Commented Jun 22 at 13:15

0

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.