0.3.2 • Published 10 years ago

linalg v0.3.2

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

LinAlg

Build Status

A linear algebra module with an emphasis on correctness and performance (in that order).

At A Glance

  • 100% statement and branch coverage
  • Emphasis on numerical accuracy
  • Work in any number of dimensions
  • Sticks to the Mathematica API whenever possible

Warning!

Please use a mature library when doing mission-critical work. I am no expert in numerical analysis. (If you are, let me know so I can add you as a contributor!)

Usage

linalg uses native arrays because of their raw speed.

l = require('linalg')
assert = require('assert')

// identity is now a 2-D Array
identity = l.diagonalMatrix(1, 1, 1)

// points are 1-D arrays
point = [2, 4, 6]

// let's create a stupid simple 3D perpendicular frame
frame = identity

// singular value decomposition to come...
hang = l.transpose(identity)
stretch = identity
align = identity

// feel free to string these along
A = l.dot(hang, stretch, align)

// this (matrix . vector) operation should do nothing
assert.deepEqual(l.dot(A, point), point)

Motivation

I needed a performance focused linear algebra module for visualizing data in 10+ dimensions, and implementing machine learning algorithms. I quickly learned that naive solutions to linear algebra operations can produce numerical errors so significant they are utterly useless for anything other than casual playtime. After that, I prioritized correctness over performance.

I started out with a chainable, vektor-like API, but found that no matter how hard I tried, using anything other than native Array resulted in a 20-500x slowdown depending on the operation.

I'd like this module to be a low-level framework for others to build upon. It should just be a library of the best known linear algebra algorithms, with minimal sugar added.

0.3.2

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.6

10 years ago

0.2.5

10 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago

0.0.0

10 years ago