This is pretty trivial to do in Matlab, but I have not seen a function for it in Mathematica. Here is how you can do it with Join and Transpose. Is there an easier way to do it than this?

(*Concatenate Matrix Right*)
A1 = Table[Subscript[a1, i, j], {i, n}, {j, n}];
A2 = Table[Subscript[a2, i, j], {i, n}, {j, m}];
Transpose[Join[Transpose[A1], Transpose[A2]]] // MatrixForm

(*Concatenate  Matrix Below*)
A1 = Table[Subscript[a1, i, j], {i, n}, {j, n}];
A2 = Table[Subscript[a2, i, j], {i, m}, {j, n}];
Join[A1, A2] // MatrixForm

(*2X2 Block Matrix*)
A11 = Table[Subscript[a11, i, j], {i, n}, {j, n}];
A12 = Table[Subscript[a12, i, j], {i, n}, {j, m}];
A21 = Table[Subscript[a21, i, j], {i, m}, {j, n}];
A22 = Table[Subscript[a22, i, j], {i, m}, {j, m}];
Join[Transpose[Join[A11, A21]],Transpose[Join[A12, A22]]]] // MatrixForm

Sample output for n=3 and m=2:

enter image description here

  • 11
    $\begingroup$ Check out Join[mat1,mat2,2] for catting on the right. And ArrayFlatten might handle more complicated cases. $\endgroup$ – Daniel Lichtblau Nov 1 '15 at 17:44
  • $\begingroup$ That was exactly what I was looking for! $\endgroup$ – luke wendt Nov 1 '15 at 18:17
  • 1
    $\begingroup$ This is a related discussion Partitioned matrix operations. (And it is not something that can be done trivially in Matlab.) $\endgroup$ – Anton Antonov Nov 2 '15 at 1:12

As Daniel Lichtblau suggested in the comment, ArrayFlatten is the way.

  • ArrayFlatten[{{A1, A2}}] // MatrixForm gives your Out[198]
  • ArrayFlatten[{{A1}, {A2}}] // MatrixForm gives your Out[201]
  • ArrayFlatten[{{A11, A12}, {A21, A22}}] // MatrixForm gives your Out[206]
| improve this answer | |

From the application tab on Join:

enter image description here

| improve this answer | |

Just for fun, the more complex construction of block matrices may also be accomplished using SparseArray:

   Band[{1, 1}] -> A11, Band[{1, 4}] -> A12,
   Band[{4, 1}] -> A21, Band[{4, 4}] -> A22},
  {5, 5}
] // MatrixForm

Mathematica graphics

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.