Numerical Recipes-inspired interpolating cubic splines - #89
Open
hjhornbeck wants to merge 3 commits into
Open
Conversation
added 3 commits
June 23, 2026 17:43
…Just contains the CC0 code, plus a routine for between-knot derivatives.
derivatives are shown, integrals were left out.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This code has proven invaluable to my work with Stan. Kharratzadeh's B-spline routines, while nice, didn't offer integrals. I also needed a way to control the slope at one end, and guarantee it passed through a specific point. As luck would have it, I had reconstructed Numerical Recipes' interpolating cubic spline code a few years earlier, which made it easy to analytically work out those integrals. It also had a built-in method for controlling the initial and terminal slope of the spline. I've added code to calculate the derivative (the second derivative is just linear interpolation, so there's no point).
In a deterministic context, this code can be quite a bit faster than Kharratzadeh's B-splines, as it has runtime$O(n)$ versus Kharratzadeh's $O(n^2)$ . Unfortunately, it can behave poorly in the sampling loop, to the point that Kharratzadeh's may still wind up faster for very large $n$ .
The license on this code is CC0, as a lot of it is just the raw math but tidied up to be a bit faster.