Bernstein Polynomials
Bernstein base polynomials and approximations.
bernstein(f, n, x) bernsteinb(k, n, x)
f |
function to be approximated by Bernstein polynomials. |
k |
integer between 0 and n, the k-th Bernstein polynomial of order n. |
n |
order of the Bernstein polynomial(s). |
x |
numeric scalar or vector where the Bernstein polynomials will be calculated. |
The Bernstein basis polynomials B_{k,n}(x) are defined as
B_{k,n}(x) = {{n}\choose{k}} x^k (1-x)^{n-k}
and form a basis for the vector space of polynomials of degree n over the interval [0,1].
bernstein(f, n, x)
computes the approximation of function
f
through Bernstein polynomials of degree n
, resp.
computes the value of this approximation at x
. The function
is vectorized and applies a brute force calculation.
But if x
is a scalar, the value will be calculated using
De Casteljau's algorithm for higher accuracy. For bigger n
the binomial coefficients may be in for problems.
Returns a scalar or vector of function values.
See https://en.wikipedia.org/wiki/Bernstein_polynomial
## Example f <- function(x) sin(2*pi*x) xs <- linspace(0, 1) ys <- f(xs) ## Not run: plot(xs, ys, type='l', col="blue", main="Bernstein Polynomials") grid() b10 <- bernstein(f, 10, xs) b100 <- bernstein(f, 100, xs) lines(xs, b10, col="magenta") lines(xs, b100, col="red") ## End(Not run) # Bernstein basis polynomials ## Not run: xs <- linspace(0, 1) plot(c(0,1), c(0,1), type='n', main="Bernstein Basis Polynomials") grid() n = 10 for (i in 0:n) { bs <- bernsteinb(i, n, xs) lines(xs, bs, col=i+1) } ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.