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

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

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

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) ]