Title: Polynomials

1 Solving polynomial equations

1.1 Quadratic Equations

GSL::Poly::solve_quadratic(a, b, c)
GSL::Poly::solve_quadratic([a, b, c])

Find the real roots of the quadratic equation,

a x^2 + b x + c = 0

The coefficients are given by 3 numbers, or a Ruby array, or a GSL::Vector object. The roots are returned as a GSL::Vector.

GSL::Poly::complex_solve_quadratic(a, b, c)
GSL::Poly::complex_solve_quadratic([a, b, c])

Find the complex roots of the quadratic equation,

a z^2 + b z + z = 0

The coefficients are given by 3 numbers or a Ruby array, or a GSL::Vector. The roots are returned as a GSL::Vector::Complex of two elements.

1.2 Cubic Equations

GSL::Poly::solve_cubic(same as solve_quadratic)

This method finds the real roots of the cubic equation,

x^3 + a x^2 + b x + c = 0
GSL::Poly::complex_solve_cubic(same as solve_cubic)

This method finds the complex roots of the cubic equation,

z^3 + a z^2 + b z + c = 0

1.3 General polynomial equation

GSL::Poly::complex_solve(c0, c1, c2,,, )
GSL::Poly::solve(c0, c1, c2,,, )
Find the complex roots of the polynomial equation. Note that the coefficients are given by "ascending" order.

2 GSL::Poly Class

This class expresses polynomials of arbitrary orders.

2.1 Singleton methods

GSL::Poly.new(c0, c1, c2, ....)
GSL::Poly[c0, c1, c2, ....]

This creates an instance of the GSL::Poly class, which represents a polynomial

c0 + c1 x + c2 x^2 + ....

This class is derived from GSL::Vector.

2.2 Instance Methods

GSL::Poly#eval(x)
GSL::Poly#at(x)
Evaluates the polynomial c[0] + c[1] x + c[2] x^2 + ... + c[len-1] x^{len-1} using Horner's method for stability. The argument x is a Numeric, GSL::Vector, Matrix or an Array.
GSL::Poly#solve_quadratic
Solve the quadratic equation.
GSL::Poly#solve_cubic
Solve the cubic equation.
GSL::Poly#complex_solve
GSL::Poly#solve
GSL::Poly#roots

These methods find the complex roots of the quadratic equation,

c0 + c1 z + c2 z^2 + .... = 0

3 Polynomial fitting

GSL::Poly.fit(x, y, order)
GSL::Poly.wfit(x, w, y, order)

Finds the coefficient of a polynomial of order order that fits the vector data (x, y) in a least-square sense. This provides a higher-level interface to the method GSL::Multifit#linear in a case of polynomial fitting.

Example:

#!/usr/bin/env ruby
require("gsl")

x = Vector[1, 2, 3, 4, 5]
y = Vector[5.5, 43.1, 128, 290.7, 498.4]
# The results are stored in a polynomial "coef"
coef, cov, chisq, status = Poly.fit(x, y, 3) 

x2 = Vector.linspace(1, 5, 20)
graph([x, y], [x2, coef.eval(x2)], "-C -g 3 -S 4")

4 Divided-difference representations

GSL::Poly::dd_init(xa, ya)
This method computes a divided-difference representation of the interpolating polynomial for the points (xa, ya).
GSL::Poly::DividedDifference#eval(x)
This method evaluates the polynomial stored in divided-difference form self at the point x.
GSL::Poly::DividedDifference#taylor(xp)
This method converts the divided-difference representation of a polynomial to a Taylor expansion. On output the Taylor coefficients of the polynomial expanded about the point xp are returned.

5 Extensions

GSL::Poly.hermite(n)

This returns coefficients of the n-th order Hermite polynomial, H(x; n). For order of n >= 3, this method uses the recurrence relation

H(x; n+1) = 2 x H(x; n) - 2 n H(x; n-1)
GSL::Poly.cheb(n)
GSL::Poly.chebyshev(n)

Return the coefficients of the n-th order Chebyshev polynomial, T(x; n. For order of n >= 3, this method uses the recurrence relation

T(x; n+1) = 2 x T(x; n) - T(x; n-1)
GSL::Poly.cheb_II(n)
GSL::Poly.chebyshev_II(n)

Return the coefficients of the n-th order Chebyshev polynomial of type II, U(x; n.

U(x; n+1) = 2 x U(x; n) - U(x; n-1)
GSL::Poly.bell(n)
Bell polynomial
GSL::Poly.bessel(n)
Bessel polynomial
GSL::Poly.laguerre(n)

Retunrs the coefficients of the n-th order Laguerre polynomial multiplied by n!.

Ex:

rb(main):001:0> require("gsl")
=> true
irb(main):002:0> Poly.laguerre(0)
=> GSL::Poly::Int: 
[ 1 ]                              <--- 1
irb(main):003:0> Poly.laguerre(1)
=> GSL::Poly::Int: 
[ 1 -1 ]                           <--- -x + 1
irb(main):004:0> Poly.laguerre(2)
=> GSL::Poly::Int: 
[ 2 -4 1 ]                         <--- (x^2 - 4x + 2)/2!
irb(main):005:0> Poly.laguerre(3)
=> GSL::Poly::Int:                   
[ 6 -18 9 -1 ]                     <--- (-x^3 + 9x^2 - 18x + 6)/3!
irb(main):006:0> Poly.laguerre(4)
=> GSL::Poly::Int:  
[ 24 -96 72 -16 1 ]                <--- (x^4 - 16x^3 + 72x^2 - 96x + 24)/4!
GSL::Poly#conv
GSL::Poly#deconv
GSL::Poly#reduce
GSL::Poly#deriv
GSL::Poly#integ
GSL::Poly#compan

prev next

Reference index top