algebra

Vectors, Matrices, Tensors

algebra

Vectors, Matrices, Tensors for Node.js

For more information point your browser to algebra Homepage.

algebra is under development. Api can change until version 1.0 but not without a good reason.

var algebra = require('algebra');
 
// Scalars
////////////////////////////////////////////////////////////////////////////////
 
var R = algebra.Real;
 
// Static addition operator.
console.log(R.add(1, 2, 3)); // 1 + 2 + 3 = 6
 
// Create two real numbers: x = 2, y = -1
var x = new R(2),
    y = new R(-2);
 
// Operators on objects are mutators.
// Here x value is modified, multipling it by y value.
x.mul(y);
console.log(x.data); // 2 * (-2) = -4
 
// Number coercion and chained operators.
// Resulting x value will be 0.25: x -> x + 6 -> x * 2 -> x ^-1
x.add(6).mul(2).inv();
console.log(x.data); // ((-4 + 6) * 2)^(-1) = 0.25
 
// Vectors
////////////////////////////////////////////////////////////////////////////////
 
// Create vector space of dimension 2 over Reals.
var R2 = algebra.VectorSpace(R)(2);
 
// Create two vectors and add them.
var v1 = new R2([0, 1]);
var v2 = new R2([1, -2]);
 
// v1 -> v1 + v2 -> [0, 1] + [1, -2] = [1, -1]
v1.add(v2);
 
console.log(v1.data); // [1, -1]
 
// Matrices
////////////////////////////////////////////////////////////////////////////////
 
// Create space of matrices 3x2 over Reals.
var R3x2 = algebra.MatrixSpace(R)(3, 2);
 
// Create a matrix
//                      | 1 1 |
//                 m1 = | 0 1 |
//                      | 1 0 |
//
var m1 = new R3x2([1, 1,
                   0, 1,
                   1, 0]);
 
// Multiply m1 by v1, the result is a vector v3 with dimension 3
// In fact we are multipling a 3 x 2 matrix by a 2 dimensional vector
// but v1 is traited as a column vector so it is like a 2 x 1 matrix.
//
// Then, following the row by column multiplication law we have
//
//     3 x 2  by  2 x 1  which gives a   3 x 1
//         ↑      ↑
//         +------+----→  by removing the middle indices.
//
//                      | 1 1 |
//       v3 = m1 * v1 = | 0 1 | * [1 , -1] = [0, -1, 1]
//                      | 1 0 |
//
 
var v3 = m1.mul(v1);
 
console.log(v3.data); // [0, -1, 1])
 
// But that was not an inner product, so m1 is not mutated.
 
// Let's try with two square matrices.
var R2x2 = algebra.MatrixSpace(R)(2, 2);
 
var m2 = new R2x2([1, 0,
                   0, 2]),
    m3 = new R2x2([0, -1,
                   1, 0]);
 
m2.mul(m3);
 
// This is an inner product, so mul is a mutator for m2.
console.log(m2.data); // [0, -1,
                      //  2,  0]
 
// Since m2 is a square matrix we can calculate its determinant.
console.log(m2.determinant.data); // 2

See also algebra quick start.

With npm do

$ npm install algebra

MIT