Description Usage Arguments Details Value Examples
Given function, or function values on a Chebyshev grid, create an interpolatin function defined in the whole hypercube.
1 2 3 |
... |
Further arguments to |
val |
The function values on the Chebyshev grid. |
intervals |
A list of minimum and maximum values. One for each dimension of the hypercube. If NULL, assume [-1,1] in each dimension. |
fun |
The function to be approximated. |
dims |
Integer. The number of Chebyshev points in each dimension. |
If intervals is not provided, it is assumed that the domain of the
function is the Cartesian product [-1,1] x [-1,1] x ... x [-1,1]. Where the
number of grid-points are given by dim(val).
For chebappxf, the function is provided instead, and the number of
grid points in each dimension is in the vector dims. The function is
evaluated on the Chebyshev grid.
If intervals is provided, it should be a list with elements of
length 2, providing minimum and maximum for each dimension. Arguments to the
function will be transformed from these intervals into [-1,1] intervals.
The approximation function may be evaluated outside the hypercube, but be aware that it may be highly erratic there, especially if of high degree.
A function defined on the hypercube. A Chebyshev approximation to
the function fun, or the values provided in val.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ## Not run:
f <- function(x) exp(-sum(x^2))
## we want 3 dimensions, i.e. something like
## f(x,y,z) = exp(-(x^2 + y^2 + z^2))
## 8 points in each dimension
gridsize <- list(8,8,8)
# get the function values on the Chebyshev grid
values <- evalongrid(f,gridsize)
# make an approximation
ch <- chebappx(values)
## test it:
a <- runif(3,-1,1);ch(a)-f(a)
## then one with domain [0.1,0.3] x [-1,-0.5] x [0.5,2]
intervals <- list(c(0.1,0.3),c(-1,-0.5),c(0.5,2))
# evaluate on the grid
values <- evalongrid(f,gridsize,intervals)
# make an approximation
ch2 <- chebappx(values,intervals)
a <- c(0.25,-0.68,1.43); ch2(a)-f(a)
# outside of domain:
a <- runif(3) ; ch2(a); f(a)
# Make a function on [0,2] x [0,1]
f <- function(y) uniroot(function(x) x-y[[1]]*cos(pi*x^2),lower=0,upper=1)$root*sum(y^2)
# approximate it
ch <- chebappxf(f,c(12,12),intervals=list(c(0,2),c(0,1)))
# test it:
a <- c(runif(1,0,2),runif(1,0,1)); ch(a); f(a)
# Lambert's W:
f <- function(y) uniroot(function(x) y - x*exp(x), lower=-1,upper=3)$root
W <- chebappxf(f,100,c(-exp(-1),3*exp(3)))
W(10*pi)*exp(W(10*pi))/pi
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.