# Xah Talk Show 2019-12-02 matrix and vector explained to programers, JavaScript live coding matrix/vector functions

- a matrix is just a function.
- a matrix is a “linear” function.

what is linear function? a linear function is a function that satisfies this property:

- f(x) + f(y) == f(x+y)
- s * f(x) == f(s * x)

where x and y are vectors, and s is a number. (vector is just a finite sequence of numbers. For example, 3d vector [6, 81, 71])

if matrix is just a function, why is it called matrix?

why is it called “linear”? because, when a function is linear, then, from a geometric point of view, the function transforms the space in a manner of a line. such as, scaling (zoom in/out), rotation, shear, flip.

best Mathematica book Buy at amazon

[etymology of matrix https://www.etymonline.com/word/matrix]

how do you actually define a matrix in code?

how do you actually compute matrix?

const lengthOfVector2D = (([x,y]) => Math.sqrt(x^2 + y^2)); const lengthOfVector3D = (([x,y,z]) => Math.sqrt(x^2 + y^2 + z^2)); const lengthOfVector4D = (([x,y,z,w]) => Math.sqrt(x^2 + y^2 + z^2 + w^2)); // generalized way to compute length in any dimension. Math.hypot is new in es2015 const f_vec_length = ((v) => Math.hypot(...v)) ; // normalize a vector means get the vector of same direction but has length 1 const normalizeVector2D = (([x,y]) => [ x/ Math.sqrt(x^2 + y^2) , y/ Math.sqrt(x^2 + y^2) ]); const normalizeVector3D = (([x,y,z]) => [ x/ Math.sqrt(x^2 + y^2 + z^2), y/ Math.sqrt(x^2 + y^2 + z^2), z/ Math.sqrt(x^2 + y^2 + z^2), ]); const normalizeVector4D = (([x,y,z,w]) => [ x/ Math.sqrt(x^2 + y^2 + z^2 + w^2), y/ Math.sqrt(x^2 + y^2 + z^2 + w^2), z/ Math.sqrt(x^2 + y^2 + z^2 + w^2), w/ Math.sqrt(x^2 + y^2 + z^2 + w^2), ]); // here's general function to compute unit vector of any dimension /* [ unit vector. v cannot be zero vector] */ // returns the unit vector of v // also known as normalize const normalizeVector = ( (v) => { const l = (Math.hypot(...v)); return v.map ( ((x) => x/l) ); } ); // can also be written in a condensed way by nested function const normalizeVector2 = ( (v) => ((l) => v.map ( ((x) => x/l) )) (Math.hypot(...v)) ); const rotate = (( [x,y], alpha) => const len = f_vec_length([x,y]); [ Math.cos(alpha) * len, Math.sin(alpha) * len ] ); // this is a unit vector [1,0] rotated by alpha // [ Math.cos(alpha) , Math.sin(alpha) ]

- matrix and vector explained to programers, in a way you can't fail to understand
- live coding JavaScript matrix/vector functions. translate the 2d to 3d ones. unit vector, normal, length, scale, rotate
- matrix is just a function. explain the math property that defines a linear function. explain geometrically why it's called linear. explain matrix multiplication.
- explain dot product. possibly explain cross product.