В настоящее время я нахожу кубический сплайн необработанных данных:
double y[] = { 0.0, 1.0, 2.0,3.0,4.0,5.0 };
double x[] = { 0.0, 1.0, 8.0, 27.0, 64, 125};
//these arrays are just an example
UnivariateInterpolator interpolator = new SplineInterpolator();
UnivariateFunction spline = interpolator.interpolate(y, x);
double interpolatedY = spline.value(5.0);
И я использую переменную interpolatedY в другой части моей программы. Мне также нужно найти производную от сплайна UnivariateFuction так, чтобы я мог вычислить y '(x), где x может быть любым значением. Я попытался использовать метод ниже:
// function to be differentiated
UnivariateFunction basicF = new UnivariateFunction() {
public double value(double x) {
return spline.value(x);
}
};
// create a differentiator using 5 points and 0.01 step
FiniteDifferencesDifferentiator differentiator =
new FiniteDifferencesDifferentiator(51, 0.01);
UnivariateDifferentiableFunction completeF = differentiator.differentiate(basicF);
System.out.println("y'(x=2) = " + completeF.value(new DerivativeStructure(1,1,0,2).getPartialDerivative(1)));
Но это выглядит довольно скучно и не дает правильного ответа. Есть предложения?
Спасибо