Create an interpolating function from given values. Several interpolation methods are supported.
1 2 3 4
array or function. Function values on a grid, or the function
itself. If it is the values, the
integer vector. The number of grid points in each dimension. Not
list of length 2 numeric vectors. The lower and upper bound
in each dimension. Not used if
list. Each element is a vector of ordered grid-points for a dimension. These need not be Chebyshev-knots, nor evenly spaced.
matrix. Each column is a point in an M-dimensional space.
numeric. Additional value, used with some methods.
character. The interpolation method to use.
Further arguments to the function, if
ipol is a wrapper around various interpolation methods in package chebpol.
Which arguments to specify depends on the method. The interpolation methods are described
"chebyshev" needs only the number of Chebyshev knots in
each dimension. This is either the
"dim" attribute of the array
val, or the
dims argument if
val is a function. Also
the intervals can be specified if different from [-1, 1].
"uniform" is similar to the
uniformly spaced knots are created. The argument
intervals generally goes with
dims when something else than
[-1, 1] are used.
"general" needs the argument
grid. These are the methods
which can use arbitrary Cartesian grids.
The stalker spline
is described in
vignette("stalker",package="chebpol"). The Floater-Hormann
"fh") also needs the
k argument, the degree of the blending
polynomials. It defaults to 4.
"polyharmonic" needs the arguments
k. In addition it can take the logical argument
for normalizing the knots to the unit hypercube. The default is
uses normalization if any of the knots are outside the unit hypercube. Also, a logical
nowarn is accepted, it is used to suppress a warning in case the system can't
be solved exactly and a least squares fallback method is used.
"simplexlinear" needs the argument
knots. It creates a
Delaunay triangulation from the knots, and does linear interpolation in each simplex
by weighting the vertex values with the barycentric coordinates.
If knots are required, but the grid argument is given, knots are constructed as
"crbf" is the multilayer compact radial basis function
interpolation in ALGLIB (http://www.alglib.net/interpolation/fastrbf.php).
It is only available if ALGLIB was available at
compile time. It takes the extra arguments
"lambda". These are discussed in the ALGLIB documentation.
There are also some usage examples and more in
function(x, threads=getOption('chebpol.threads')) defined on a hypercube, an interpolant
for the given function. The argument
x can be a matrix of column
vectors which are evaluated in parallel in a number of threads. The
function yields values for arguments outside the hypercube as well, though
it will typically be a poor approximation.
threads is an integer
specifying the number of parallel threads which should be used when
evaluating a matrix of column vectors.
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
## evenly spaced grid-points su <- seq(0,1,length.out=10) ## irregularly spaced grid-points s <- su^3 ## create approximation on the irregularly spaced grid ml1 <- ipol(exp, grid=list(s), method='multilin') fh1 <- ipol(exp, grid=list(s), method='fh') ## test it, since exp is convex, the linear approximation lies above ## the exp between the grid points ml1(su) - exp(su) fh1(su) - exp(su) ## multi dimensional approximation f <- function(x) 10/(1+25*mean(x^2)) # a 3-dimensional 10x10x10 grid, first and third coordinate are non-uniform grid <- list(s, su, sort(1-s)) # make multilinear, Floater-Hormann, Chebyshev and polyharmonic spline. ml2 <- ipol(f, grid=grid, method='multilin') fh2 <- ipol(f, grid=grid, method='fh') hst <- ipol(f, grid=grid, method='hstalker') ch2 <- ipol(f, dims=c(10,10,10), intervals=list(0:1,0:1,0:1), method='cheb') knots <- matrix(runif(3*1000),3) ph2 <- ipol(f, knots=knots, k=2, method='poly') sl2 <- ipol(f, knots=knots, method='simplexlinear') # my alglib is a bit slow, so stick to 100 knots if(havealglib()) crb <- ipol(f, knots=knots[,1:100], method='crbf', rbase=2, layers=5, lambda=0) # make 7 points in R3 to test them on m <- matrix(runif(3*7),3) rbind(true=apply(m,2,f), ml=ml2(m), fh=fh2(m), cheb=ch2(m), poly=ph2(m), sl=sl2(m),hst=hst(m), crbf=if(havealglib()) crb(m) else NULL )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.