I have a function that is expensive to evaluate whose inputs are n-dimensional (n is the order of a dozen or two). I need the output of this function at each node and each time step for a PDE simulation.

I know that the portion of the n-d space sampled is small since n-1 of the inputs are species mole fractions. I know the outputs are continuous in all dimensions.

I would like to have the solver adaptively sample the n-d space as needed based on the inputs it is being provided. If the new inputs are close to/contained by old inputs, a simple linear interpolation would be sufficient. If the new inputs are significantly different from old inputs, I want to add points to the "table".

The inputs/outputs are relatively compact, so RAM is not an issue. I am just wondering if there are data structures/algorithms that will make the lookup and interpolation efficient while allowing for the quick addition of new points.


Is it feasible to use something like Polynomial Chaos Expansion? With that, you carefully choose discrete points in your n-d space to sample and reconstruct a unique polynomial with it. Depending on what your function looks like, you could construct this analytical expression only once at the beginning of execution. Depending on your tolerance for error and how you've been evaluating your function, this could also just provide you with a good initial guess for an iterative method.

There's also some adaptive sampling techniques nearby that Dakota link I put above that can help you with a literature search.

| cite | improve this answer | |
  • $\begingroup$ My function is actually solving an 2nd order BVP in 1D, then integrating over the solution. As such it takes 0.1 - 1.0 s per evaluation. That is why I am trying to avoid sampling a large portion of the space. I will look into PCE and see if it can be made to work for my case. $\endgroup$ – Godric Seer Nov 12 '13 at 19:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.