Linear Algebra with JavaScript: Linear Transformation, Matrix

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

Image for post
Image for post
GitHub Repository with Source Code

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

Image for post
Image for post
3×2 matrix

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⃗

Image for post
Image for post
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 ĵ.

Image for post
Image for post
linear combination

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.

Image for post
Image for post
reflection
Image for post
Image for post
scale

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

Image for post
Image for post
rotation
Image for post
Image for post
shear

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

Image for post
Image for post
shear 3D

Next part ->

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

Image for post
Image for post
Increaser

Written by

Software engineer, creator of increaser.org. More at geekrodion.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store