28

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}];
Transpose[
Join[Transpose[Join[A11, A21]],Transpose[Join[A12, A22]]]] // MatrixForm

Sample output for n=3 and m=2:

enter image description here

J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
luke wendt
  • 439
  • 1
  • 4
  • 6

3 Answers3

35

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]
kjo
  • 11,717
  • 1
  • 30
  • 89
Taiki
  • 5,259
  • 26
  • 34
15

From the application tab on Join:

enter image description here

luke wendt
  • 439
  • 1
  • 4
  • 6
12

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

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

Mathematica graphics

MarcoB
  • 67,153
  • 18
  • 91
  • 189