Algosim documentation: Creating a matrix

Creating a matrix

There are several ways to create a matrix in Algosim.

Basic methods

Vector brackets can be used to specify the numbers of the matrix in row-major order:

A ≔ ❨❨4, 1, 5❩, ❨0, 1, 3❩❩
⎛4  1  5⎞
⎝0  1  3⎠

Alternatively, the matrix function can be used to specify the numbers of the matrix as a single list (in row-major order) together with the desired number of columns:

matrix(5, 4, 3, 2, 0, 1, 4, 5, 2, 0, 1, 1, 2, 3, 6, 5)
⎛4  3  2  0  1⎞
⎜4  5  2  0  1⎟
⎝1  2  3  6  5⎠

Row- and column-centric methods

The MatFromCols function creates a matrix from a given sequence of vectors, using the vectors as the columns of the matrix:

MatFromCols(❨1, 4, 2❩, ❨5, 1, 2❩)
⎛1  5⎞
⎜4  1⎟
⎝2  2⎠

Similarly, the MatFromRows function creates a matrix from a given sequence of vectors, using the vectors as the rows of the matrix:

MatFromRows(❨1, 4, 2❩, ❨5, 1, 2❩)
⎛1  4  2⎞
⎝5  1  2⎠

Notice that MatFromRows produces the same result as ordinary vector brackets (and the underlying vector function).

From blocks

The MatFromBlocks function creates a block matrix from a sequence of blocks (in row-major order) and the desired number of block columns.

A ≔ ❨❨1, 2❩, ❨3, 4❩❩; B ≔ ❨❨5, 1, 3❩, ❨1, 0, 2❩❩; C ≔ ❨❨5, 1❩, ❨0, 1❩❩; D ≔ ❨❨5, 1, 2❩, ❨5, 6 ,7❩❩;
MatFromBlocks(2, A, B, C, D)
⎛1  2  5  1  3⎞
⎜3  4  1  0  2⎟
⎜5  1  5  1  2⎟
⎝0  1  5  6  7⎠

Using a formula

The compute and matrix functions can be used to generate a matrix using a formula for its entries:

matrix(compute(a⋅b, a, 1, 12, b, 1, 12))
⎛  1    2    3    4    5    6    7    8    9   10   11   12⎞
⎜  2    4    6    8   10   12   14   16   18   20   22   24⎟
⎜  3    6    9   12   15   18   21   24   27   30   33   36⎟
⎜  4    8   12   16   20   24   28   32   36   40   44   48⎟
⎜  5   10   15   20   25   30   35   40   45   50   55   60⎟
⎜  6   12   18   24   30   36   42   48   54   60   66   72⎟
⎜  7   14   21   28   35   42   49   56   63   70   77   84⎟
⎜  8   16   24   32   40   48   56   64   72   80   88   96⎟
⎜  9   18   27   36   45   54   63   72   81   90   99  108⎟
⎜ 10   20   30   40   50   60   70   80   90  100  110  120⎟
⎜ 11   22   33   44   55   66   77   88   99  110  121  132⎟
⎝ 12   24   36   48   60   72   84   96  108  120  132  144⎠

Special types of matrices

The diag function can create diagonal matrices:

diag(1, 2, 3, 4)
⎛1  0  0  0⎞
⎜0  2  0  0⎟
⎜0  0  3  0⎟
⎝0  0  0  4⎠

More generally, block-diagonal matrices can be created as direct sums:

❨❨1, 2❩, ❨5, 1❩❩ ⊕ ❨❨5, 6, 3❩, ❨1, 2, 2❩❩
⎛1  2  0  0  0⎞
⎜5  1  0  0  0⎟
⎜0  0  5  6  3⎟
⎝0  0  1  2  2⎠

Rank-1 matrices can be created as outer products:

❨1, 2, 3❩ ⊗ ❨6, 2, 1, 2❩
⎛ 6   2   1   2⎞
⎜12   4   2   4⎟
⎝18   6   3   6⎠

The IdentityMatrix and ZeroMatrix functions create identity and zero matrices, respectively.

Additionally, the following functions create special matrices:

Creating a matrix from other matrices

Casting

Any object can be cast to a matrix using the matrix function:

matrix('('(1, 2, 3), '(4, 5, 6)))
⎛1  2  3⎞
⎝4  5  6⎠