UNPKG

@fvictorio/newton-raphson-method

Version:

Find zeros of a function using the Newton-Raphson method

78 lines (51 loc) 3.56 kB
# newton-raphson-method > Find zeros of a function using [Newton's Method](https://en.wikipedia.org/wiki/Newton%27s_method) [![Build Status][travis-image]][travis-url] [![npm version][npm-image]][npm-url] [![Dependency Status][daviddm-image]][daviddm-url] [![js-semistandard-style][semistandard-image]][semistandard-url] ## Introduction This is a fork of [scijs/newton-raphson-method](https://github.com/scijs/newton-raphson-method) that uses [big.js](https://github.com/MikeMcl/big.js/) instances instead of plain javascript numbers. The Newton-Raphson method uses the tangent of a curve to iteratively approximate a zero of a function, `f(x)`. This yields the update:<p align="center"><img alt="x&lowbar;&lcub;i &plus; 1&rcub; &equals; x&lowbar;i -&bsol;frac&lcub;f&lpar;x&lowbar;i&rpar;&rcub;&lcub;f&apos;&lpar;x&lowbar;i&rpar;&rcub;&period;" valign="middle" src="images/x_i-1-x_i-fracfx_ifx_i-e7e51496fc.png" width="172.5" height="53.5"></p> ## Example Consider the zero of `(x + 2) * (x - 1)` at `x = 1`: ```javascript const { newtonRaphson } = require('newton-raphson-method'); function f (x) { return x.minus(1).mul(x.plus(2)); } function fp (x) { return x.minus(1).plus(x).plus(2); } // Using the derivative: newtonRaphson(f, 2, fp) // => 1.0000000000000000 (6 iterations) // Using a numerical derivative: newtonRaphson(f, 2) // => 1.0000000000000000 (6 iterations) ``` ## Installation ```bash $ npm install @fvictorio/newton-raphson-method ``` ## API #### `newtonRaphson(f, x0[, fp, options])` Given a real-valued function of one variable, iteratively improves and returns a guess of a zero. **Parameters**: - `f`: The numerical function of one variable of which to compute the zero. - `x0`: A number representing the intial guess of the zero. Can be a number or a big.js instance. - `fp` (optional): The first derivative of `f`. If not provided, is computed numerically using a fourth order central difference with step size `h`. - `options` (optional): An object permitting the following options: - `tolerance` (default: `1e-7`): The tolerance by which convergence is measured. Convergence is met if `|x[n+1] - x[n]| <= tolerance * |x[n+1]|`. - `maxIterations` (default: `20`): Maximum permitted iterations. - `h` (default: `1e-4`): Step size for numerical differentiation. - `verbose` (default: `false`): Output additional information about guesses, convergence, and failure. **Returns**: If convergence is achieved, returns a big.js instance with an approximation of the zero. If the algorithm fails, returns `false`. ## See Also - [`modified-newton-raphson`](https://github.com/scijs/modified-newton-raphson): A simple modification of Newton-Raphson that may exhibit improved convergence. - [`newton-raphson`](https://www.npmjs.com/package/newton-raphson): A similar and lovely implementation that differs (only?) in requiring a first derivative. ## License &copy; 2016 Scijs Authors. MIT License. ## Authors Ricky Reusser [npm-image]: https://badge.fury.io/js/newton-raphson-method.svg [npm-url]: https://npmjs.org/package/newton-raphson-method [travis-image]: https://travis-ci.org/scijs/newton-raphson-method.svg?branch=master [travis-url]: https://travis-ci.org/scijs/newton-raphson-method [daviddm-image]: https://david-dm.org/scijs/newton-raphson-method.svg?theme=shields.io [daviddm-url]: https://david-dm.org/scijs/newton-raphson-method [semistandard-image]: https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg?style=flat-square [semistandard-url]: https://github.com/Flet/semistandard