 # compute-polynomial

Evaluates a polynomial.

## Stats

StarsIssuesVersionUpdatedCreatedSize
compute-polynomial
1.1.08 years ago9 years ago polynomial
!NPM versionnpm-imagenpm-url !Build Statustravis-imagetravis-url !Coverage Statuscoveralls-imagecoveralls-url !Dependenciesdependencies-imagedependencies-url
Evaluates a polynomial.

## Installation

``\$ npm install compute-polynomial``

For use in the browser, use browserify.

## Usage

``var polyval = require( 'compute-polynomial' );``

#### polyval( coef, x, options )

Evaluates a polynomial whose coefficients are defined by `coef`. `x` may be either a single `numeric` value or an `array` of values at which to evaluate to the polynomial.
The coefficients should be ordered in descending degree. For example, for a polynomial
``a_nx^n + a_(n-1)x^(n-1) + ... + a_1x^1 + a_0x^0``

the coefficients would be
``[a_n, a_(n-1),..., a_1, a_0]``

Consider the polynomial `4x^3 + 2x^2 + 6x - 17`. To evaluate the polynomial at a single value,
``````var val = polyval( [ 4, 2, 6, -17 ], 10 );
// returns 4243``````

To evaluate the polynomial at multiple values,
``````var vals = polyval( [ 4, 2, 6, -17 ], [ 10, -3 ] );
// returns [ 4243, -125 ]``````

When provided an input `array`, the function accepts the following `options`:
• copy: `boolean` indicating whether to return a new `array`. Default: `true`.
• accessor: accessor `function` for accessing numeric values in object `arrays`.

To mutate the input `array` (e.g., when input values can be discarded or when optimizing memory usage), set the `copy` option to `false`.
``````var coefs = [ 4, 2, 6, -17 ],
x = [ 10, -3 ];

var vals = polyval( coefs, x, {
'copy': false
});
// returns [ 4243, -125 ]

console.log( x === vals );
// returns true``````

For object `arrays`, provide an accessor `function` for accessing `array` values.
``````var coefs = [ 4, 2, 6, -17 ];

var data = [
['beep', 10],
['boop', -3]
];

function getValue( d, i ) {
return d[ 1 ];
}

var vals = polyval( coefs, data, {
'accessor': getValue
});
// returns [ 4243, -125 ]``````

## Examples

``````var polyval = require( 'compute-polynomial' );

var coef = new Array( 25 ),
sign;

for ( var i = 0; i < coef.length; i++ ) {
sign = 1;
if ( Math.random()-0.5 < 0 ) {
sign = -1;
}
coef[ i ] = sign * Math.round( Math.random()*i );
}

// Evaluate the polynomial at a single value:
console.log( polyval( coef, 10 ) );

// Evaluate the polynomial at multiple values:
console.log( polyval( coef, [ 10, -10 ] ) );``````

To run the example code from the top-level application directory,
``\$ node ./examples/index.js``

## Notes

This method implements Horner's rule to achieve efficient computation.

## Tests

### Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:
``\$ make test``

All new feature development should have corresponding unit tests to validate correct functionality.

### Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
``\$ make test-cov``

Istanbul creates a `./reports/coverage` directory. To access an HTML version of the report,
``\$ make view-cov``