Skip to content

iffsid/ad.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Automatic Differentiation for JavaScript

A translation of the ad library from Jeff Siskind's Qobischeme.

Some links that explain what AD is:

This package provides

  • transformed functions and means to transform others
  • sweetjs macros that can be used to effect replacement of primitive functions with above transformed/overloaded ones.

Usage

Install as npm install ad.js

Use sweet to load the macros and compile code

var sweet = require('sweet.js');
var adMacros = sweet.loadNodeModule(null, 'ad.js/macros')
var adLoadString = "var ad = require('ad.js')({});\n";
var _compiled = sweet.compile(<your-file-contents>, {modules: adMacros});
var compiled = adLoadString + _compiled.code

Also, the ad require statement must be passed options. To get the default behaviour:

var ad = require('ad.js')({})

To run only reverse mode (faster)

var ad = require('ad.js')({mode: 'r'})

To run only reverse mode with only first-derivatives (faster even)

var ad = require('ad.js')({mode: 'r', noHigher: true})

Test

Uses nodeunit. To run tests, do npm test

Example

The setup takes a file that looks like so:

var cube = function(x) {
  return x * x * x;
}

and transforms it into code that looks like so:

var cube = function(x) {
  return ad.mul(x, ad.mul(x, x));
}

after which one can do things like:

var dCube_dx = ad.derivativeF(cube);
console.log(dCube_dx(10))
// will print 300 => d/dx(x^3) = 3x^2 @x=10 = 300

and even higher-order derivatives as:

var d2Cube_dx2 = ad.derivativeF(dcube_dx);
console.log(d2Cube_dx2(10))
// will print 60 => d2/dx2(x^3) = 6x @x=10 = 60

The bulk of the instructions above are just the means by which sweet gets its hands on the code you want to transform and the macros to transform it with.

About

Automatic-Differentiation in js

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published