Chebyshev Approximation
Function approximation through Chebyshev polynomials (of the first kind).
chebApprox(x, fun, a, b, n)
x |
Numeric vector of points within interval |
fun |
Function to be approximated. |
a, b |
Endpoints of the interval. |
n |
An integer |
Return approximate y-coordinates of points at x by computing the
Chebyshev approximation of degree n for fun
on the interval
[a, b]
.
A numeric vector of the same length as x
.
TODO: Evaluate the Chebyshev approximative polynomial by using the Clenshaw recurrence formula. (Not yet vectorized, that's why we still use the Horner scheme.)
Press, W. H., S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery (1992). Numerical Recipes in C: The Art of Scientific Computing. Second Edition, Cambridge University Press.
# Approximate sin(x) on [-pi, pi] with a polynomial of degree 9 ! # This polynomial has to be beaten: # P(x) = x - 1/6*x^3 + 1/120*x^5 - 1/5040*x^7 + 1/362880*x^9 # Compare these polynomials p1 <- rev(c(0, 1, 0, -1/6, 0, 1/120, 0, -1/5040, 0, 1/362880)) p2 <- chebCoeff(sin, -pi, pi, 9) # Estimate the maximal distance x <- seq(-pi, pi, length.out = 101) ys <- sin(x) yp <- polyval(p1, x) yc <- chebApprox(x, sin, -pi, pi, 9) max(abs(ys-yp)) # 0.006925271 max(abs(ys-yc)) # 1.151207e-05 ## Not run: # Plot the corresponding curves plot(x, ys, type = "l", col = "gray", lwd = 5) lines(x, yp, col = "navy") lines(x, yc, col = "red") grid() ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.