In q, a matrix (an array of m x n numbers) is represented as a list of lists. For example, here is a matrix with 2 rows and 3 columns:

q)A:(1 2 3;4 5 6) q)A 1 2 3 4 5 6

**Matrix Addition and Subtraction**

If A and B are matrices of the same size, then they can be added and subtracted. To find the entries of A + B, you simply add the corresponding entries of A and B. To find A - B, subtract corresponding entries. If A and B have different sizes, you will get a `'length`

error.

q)A:(1 2;3 4) q)B:(5 6;7 8) q)A+B 6 8 10 12 q)B-A 4 4 4 4 q)C:(1 1 1;2 2 2) q)A+C 'length [0] A+C ^

**Scalar Multiplication**

If A is a matrix and k is a scalar, then the matrix kA is obtained by multiplying each entry of A by k.

q)A:(1 2;3 4) q)k:2 q)k*A 2 4 6 8

**Matrix Multiplication**

First, in order to multiply two matrices A and B, the number of columns of A must match the number of rows of B. If A is m x n and B is n x p, then the size of the product matrix AB will be m x p. In order to calculate AB, you have to take the dot product (multiply corresponding numbers and then add them up) of each row vector in A and the corresponding column vector in B. This can be done in q using the `mmu`

(or `$`

) operator.

q)A:(1 2f;3 4f) q)B:(5 6f;7 8f) q)A 1 2 3 4 q)B 5 6 7 8 q)A mmu B 19 22 43 50

**Identity Matrix**

This is a square matrix with 1s on the diagonal and 0s everywhere else.

q)I:{`float${x=/:x}til x} q)I 3 1 0 0 0 1 0 0 0 1

**Matrix Inverse**

The inverse of A is A^{-1} if AA^{-1}=A^{-1}A=I, where I is the identity matrix. Use the `inv`

function to find the inverse of a matrix.

q)A:(1 2f;3 4f) q)inv A -2 1 1.5 -0.5 q)A mmu inv A 1 1.110223e-016 0 1

**Matrix Tranpose**

The tranpose A^{T} of a matrix A is a flipped version of the original matrix which is obtained by changing its rows into columns (or equivalently, its columns into rows). This can be done by using the `flip`

operation in q.

q)A:(1 2 3;4 5 6) q)flip A 1 4 2 5 3 6

**Upper Triangular Matrix**

This is a square matrix in which all the entries below the main diagonal are zero.

q)upperTriangle:{`float${x<=\:x}til x} q)upperTriangle 3 1 1 1 0 1 1 0 0 1

**Lower Triangular Matrix**

This is a square matrix in which all the entries above the main diagonal are zero.

q)lowerTriangle:{`float${x>=\:x}til x} q)lowerTriangle 3 1 0 0 1 1 0 1 1 1