﻿ Creating a matrix – Algosim documentation
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:

## 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⎠
```