BERNSTEIN_APPROXIMATION is a MATLAB library which looks at some simple cases of approximation of a function f(x) by a Bernstein polynomial.
A Bernstein polynomial of degree n is a linear combination of the (n+1) Bernstein basis polynomials of degree n: BP(n,x) = sum ( 0 <= k <= n ) CP(n,k) * B(n,k)(x).
For 0 <= k <= n, the k-th Bernstein basis polynomial of degree n is:
B(n,k)(x) = C(n,k) * (1-x)^(n-k) * x^kwhere C(n,k) is the combinatorial function "N choose K" defined by
C(n,k) = n! / k! / ( n - k )!
For an arbitrary value of n, the set B(n,k) forms a basis for the space of polynomials of degree n or less.
Every basis polynomial B(n,k) is nonnegative in [0,1], and may be zero only at the endpoints.
Except for the case n = 0, the basis polynomial B(n,k)(x) has a unique maximum value at
x = k/n.
For any point x, (including points outside [0,1]), the basis polynomials for an arbitrary value of n sum to 1:
sum ( 1 <= k <= n ) B(n,k)(x) = 1
For 0 < n, the Bernstein basis polynomial can be written as a combination of two lower degree basis polynomials:
B(n,k)(x) = ( 1 - x ) * B(n-1,k)(x) + x * B(n-1,k-1)(x) +where, if k is 0, the factor B(n-1,k-1)(x) is taken to be 0, and if k is n, the factor B(n-1,k)(x) is taken to be 0.
A Bernstein basis polynomial can be written as a combination of two higher degree basis polynomials:
B(n,k)(x) = ( (n+1-k) * B(n+1,k)(x) + (k+1) * B(n+1,k+1)(x) ) / ( n + 1 )
The derivative of B(n,k)(x) can be written as:
d/dx B(n,k)(x) = n * B(n-1,k-1)(x) - B(n-1,k)(x)
A Bernstein polynomial can be written in terms of the standard power basis:
B(n,k)(x) = sum ( k <= i <= n ) (-1)^(i-k) * C(n,k) * C(i,k) * x^i
A power basis monomial can be written in terms of the Bernstein basis of degree n where k <= n:
x^k = sum ( k-1 <= i <= n-1 ) C(i,k) * B(n,k)(x) / C(n,k)
Over the interval [0,1], the n-th degree Bernstein approximation polynomial to a function f(x) is defined by
BA(n,f)(x) = sum ( 0 <= k <= n ) f(k/n) * B(n,k)(x)As a function of n, the Bernstein approximation polynomials form a sequence that slowly, but uniformly, converges to f(x) over [0,1].
By a simple linear process, the Bernstein basis polynomials can be shifted to an arbitrary interval [a,b], retaining their properties.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
BERNSTEIN_APPROXIMATION is available in a MATLAB version.
BERNSTEIN_POLYNOMIAL, a MATLAB library which evaluates the Bernstein polynomials, useful for uniform approximation of functions;
CHEBYSHEV, a MATLAB library which computes the Chebyshev interpolant/approximant to a given function over an interval.
LAGRANGE_APPROX_1D, a MATLAB library which defines and evaluates the Lagrange polynomial p(x) of degree m which approximates a set of nd data points (x(i),y(i)).
PWL_APPROX_1D, a MATLAB library which approximates a set of data using a piecewise linear function.
SPLINE, a MATLAB library which constructs and evaluates spline interpolants and approximants.
TEST_APPROX, a MATLAB library which defines test problems for approximation, provided as a set of (x,y) data.
VANDERMONDE_APPROX_1D, a MATLAB library which finds a polynomial approximant to a function of 1D data by setting up and solving an overdetermined linear system for the polynomial coefficients, involving the Vandermonde matrix.
You can go up one level to the MATLAB source codes.