Apache Commons Math has an excellent series of algorithms, in particular "SplineInterpolator", see API docs
An example in which we call the interpolation functions for alpha (x), beta (x) from Groovy:
package example.com import org.apache.commons.math3.analysis.interpolation.SplineInterpolator import org.apache.commons.math3.analysis.polynomials.PolynomialSplineFunction import statec.Extrapolate.Value; class Interpolate { enum Value { ALPHA, BETA } def static xValues = [ -284086, -94784, 31446, 354837, 667782, 982191 ] def static alphaValues = [ 71641, 78245, 80871, 94045, 105780, 119616 ] def static betaValues = [ 95552, 103413, 108667, 128456, 144686, 171953 ] static def getValueByName(Value value, int i) { def res switch (value) { case Value.ALPHA: res = alphaValues[i] break case Value.BETA: res = betaValues[i] break default: assert false } return res } static PolynomialSplineFunction interpolate(Value value) { def yValues = [] int i = 0 xValues.each { def y = getValueByName(value, i++) yValues << (y as Double) } SplineInterpolator spi = new SplineInterpolator() return spi.interpolate(xValues as double[], yValues as double[]) } static void main(def argv) {

And now for a custom example for EXTRAPOLATIONS, because it's fun. Here we use the same data as above, but extrapolate using a polynomial of the 2nd degree. And the corresponding classes, of course. Again, in Groovy:
package example.com import org.apache.commons.math3.analysis.polynomials.PolynomialFunction import org.apache.commons.math3.fitting.PolynomialFitter import org.apache.commons.math3.fitting.WeightedObservedPoint import org.apache.commons.math3.optim.SimpleVectorValueChecker import org.apache.commons.math3.optim.nonlinear.vector.jacobian.GaussNewtonOptimizer class Extrapolate { enum Value { ALPHA, BETA } def static xValues = [ -284086, -94784, 31446, 354837, 667782, 982191 ] def static alphaValues = [ 71641, 78245, 80871, 94045, 105780, 119616 ] def static betaValues = [ 95552, 103413, 108667, 128456, 144686, 171953 ] static def getValueByName(Value value, int i) { def res switch (value) { case Value.ALPHA: res = alphaValues[i] break case Value.BETA: res = betaValues[i] break default: assert false } return res } static PolynomialFunction extrapolate(Value value) {
