time-to-botec/squiggle/node_modules/@stdlib/math/base/tools/continued-fraction
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00
..
docs feat: add the node modules 2022-12-03 12:44:49 +00:00
lib feat: add the node modules 2022-12-03 12:44:49 +00:00
package.json feat: add the node modules 2022-12-03 12:44:49 +00:00
README.md feat: add the node modules 2022-12-03 12:44:49 +00:00

continued-fraction

Continued fraction approximation.

Usage

var continuedFraction = require( '@stdlib/math/base/tools/continued-fraction' );

continuedFraction( generator[, options ] )

Evaluates the continued fraction described by the supplied generator argument. generator can be either a function which returns an array with two elements, the a and b terms of the fraction, or an ES6 Generator object. By default, the function computes

Continued fraction without leading b_0 term

Using an ES6 Generator object:

// Continued fraction for (e-1)^(-1):
var gen = generator();
var out = continuedFraction( gen );
// returns ~0.582

function* generator() {
    var i = 0;
    while ( true ) {
        i += 1;
        yield [ i, i ];
    }
}

Alternatively, one can use a closure to achieve the same goal:

// Continued fraction for (e-1)^(-1):
var gen = generator();
var out = continuedFraction( gen );
// returns ~0.582

function generator() {
    var i = 0;
    return gen;

    function gen() {
        i += 1;
        return [ i, i ];
    }
}

The function accepts the following options:

  • maxIter: integer denoting the maximum number of times the supplied generator object will be called. Default: 1000000.
  • tolerance: number primitive specifying the used tolerance to assess convergence. Default: 2.22e-16.
  • keep: boolean primitive indicating whether to keep the b0 term in the continued fraction. Default: false.

To evaluate

Continued fraction with leading b_0 term

set the keep option to true.

var out = continuedFraction( generator(), {
    'keep': true
});
// returns ~1.718

function generator() {
    var i = 0;
    return gen;

    function gen() {
        i += 1;
        return [ i, i ];
    }
}

To change the maximum number of iterations, set the maxIter option.

var out = continuedFraction( generator(), {
    'maxIter': 10
});
// returns ~0.582

function generator() {
    var i = 0;
    return gen;

    function gen() {
        i += 1;
        return [ i, i ];
    }
}

The default tolerance of 2.22e-16 to assess convergence can be changed via the tolerance option.

var out = continuedFraction( generator(), {
    'tolerance': 1e-1
});
// returns ~0.579

function generator() {
    var i = 0;
    return gen;

    function gen() {
        i += 1;
        return [ i, i ];
    }
}

Examples

var continuedFraction = require( '@stdlib/math/base/tools/continued-fraction' );
var out;

function* generator() {
    while ( true ) {
        yield [ 1, 1 ];
    }
}

function closure() {
    var ones = [ 1, 1 ];
    return gen;

    function gen() {
        return ones;
    }
}

out = continuedFraction( generator(), {
    'keep': true
});
console.log( 'Golden ratio (generator): %d,', out );

out = continuedFraction( closure(), {
    'keep': true
});
console.log( 'Golden ratio (closure): %d', out );