# Linear Algebra with JavaScript: Linear Transformation, Matrix

This is part of the course “Linear Algebra with JavaScript”.

A **matrix** is a rectangular array of real numbers with *m* rows and *n* columns. For example, a *3×2* matrix looks like this:

Let’s go right to the code. The constructor of the *Matrix* class will receive rows as a parameter. We will access a particular element in the matrix by first taking row by row index and then element by column index.

# Matrix-vector product

The **matrix-vector product** *Ax⃗* produces a linear combination of the columns of the matrix *A* with coefficients *x⃗*. For example, the product of a *3×2* matrix A and a *2D* vector *x⃗ *results in a *3D* vector, which we’ll denote *y⃗: y⃗=Ax⃗*

Consider some set of vectors *{e⃗₁, e⃗₂}*, and a third vector *y⃗* that is a **linear combination** of the vectors *e⃗₁* and *e⃗₂: y⃗=αe⃗₁ + βe⃗₂.* The numbers *α, β ∈ R* are the coefficients in this linear combination.

The matrix-vector product is defined expressly for the purpose of studying linear combinations. We can describe the above linear combination as the following matrix vector product: *y⃗=Ex⃗*. The matrix *E* has *e⃗₁* and *e⃗₂* as columns. The dimensions of the matrix will be *n×2*, where *n* is the dimension of the vectors *e⃗₁, e⃗₂* and *y⃗*.

In the picture below we can see vector *v⃗* represented as a linear combination of vectors* î* and ĵ.

# Linear Transformation

The matrix-vector product corresponds to the abstract notion of a *linear transformation*, which is one of the key notions in the study of linear algebra. Multiplication by a matrix can be thought of as computing a linear transformation that takes n-dimensional vector as an input and produces m-dimensional vector as an output. We can say matrix is a certain transformation of vector in space.

It will become more clear on examples, but first, let’s add a method to Matrix class that will return columns of the matrix.

In the code sample below you can examples of different vector-matrix products. The dimension of the resulting vector will always be equal to the number of matrix rows. If we multiply a *2D* vector to a *3×2* matrix, we will receive a *3D* vector, and when we multiply a *3D* vector to a *2×3* matrix, we will receive a *2D* vector. If a number of columns in the matrix not equal to vector dimension, we throw an error.

# Examples

Now let’s try to move and change the two-dimensional object by using linear transformations. First, we will create a new class — *Contour* that will receive a list of vectors in the constructor and for now, will have only one method — *transform*, that will transform all coordinates of the contour and will return a new one.

Now, let’s go to the linear-algebra-demo project and try out different transformation matrices. Red square is an initial contour, and the blue one is a result of applying the transformation.

This way we can make a matrix that will rotate a given vector on a certain angle.

Transformation works the same way for objects in 3D space, below you can see the animated transformation from the red cube, to blue parallelepiped.

Reach the next level of focus and productivity with increaser.org.