Fibonacci Polynomial

Evaluate a Fibonacci polynomial.

A Fibonacci polynomial is expressed according to the following recurrence relation

upper F Subscript n Baseline left-parenthesis x right-parenthesis equals StartLayout Enlarged left-brace 1st Row 1st Column 0 2nd Column if n equals 0 2nd Row 1st Column 1 2nd Column if n equals 1 3rd Row 1st Column x dot upper F Subscript n minus 1 Baseline left-parenthesis x right-parenthesis plus upper F Subscript n minus 2 Baseline left-parenthesis x right-parenthesis 2nd Column if n greater-than-or-equal-to 2 EndLayout

Alternatively, if F(n,k) is the coefficient of x^k in F_n(x), then

upper F Subscript n Baseline left-parenthesis x right-parenthesis equals sigma-summation Underscript k equals 0 Overscript n Endscripts upper F left-parenthesis n comma k right-parenthesis x Superscript k

where

upper F left-parenthesis n comma k right-parenthesis equals StartBinomialOrMatrix StartFraction n plus k minus 1 Over 2 EndFraction Choose k EndBinomialOrMatrix

We can extend Fibonacci polynomials to negative n using the identity

upper F Subscript negative n Baseline left-parenthesis x right-parenthesis equals left-parenthesis negative 1 right-parenthesis Superscript n minus 1 Baseline upper F Subscript n Baseline left-parenthesis x right-parenthesis

Usage

var fibpoly = require( '@stdlib/math/base/tools/fibpoly' );

fibpoly( n, x )

Evaluates a Fibonacci polynomial at a value x.

var v = fibpoly( 5, 2.0 ); // => 2^4 + 3*2^2 + 1
// returns 29.0

fibpoly.factory( n )

Uses code generation to generate a function for evaluating a Fibonacci polynomial.

var polyval = fibpoly.factory( 5 );

var v = polyval( 1.0 ); // => 1^4 + 3*1^2 + 1
// returns 5.0

v = polyval( 2.0 ); // => 2^4 + 3*2^2 + 1
// returns 29.0

Notes

  • For hot code paths, a compiled function will be more performant than fibpoly().
  • While code generation can boost performance, its use may be problematic in browser contexts enforcing a strict content security policy (CSP). If running in or targeting an environment with a CSP, avoid using code generation.

Examples

var fibpoly = require( '@stdlib/math/base/tools/fibpoly' );

var i;

// Compute the negaFibonacci and Fibonacci numbers...
for ( i = -77; i < 78; i++ ) {
    console.log( 'F_%d = %d', i, fibpoly( i, 1.0 ) );
}