Хитрость в том, что вам нужно два arrays
для создания spline
, но у вас есть только один. Таким образом, вам необходимо изготовить и array
. Вы можете предположить, что входные данные array
содержат ваши y
значения и что новый изготовленный массив содержит ваши x
значения, поэтому для любого заданного x
у вас есть соответствующий y
.
Отказ от ответственности, я не проверял этот код, поэтому обязательно настройте его соответствующим образом.
// To expand the array
public static double[] expand(double[] array, int newSize) {
final int length array.length;
// let's calculate the new step size
double step = (length * 1.0) / newSize;
// fabricated array of x values
int[] x = new int[length];
for(int i = 0; i < length; ++i) {
x[i] = i;
}
// using Linear interpolator but it can be any other interpolator
LinearInterpolator li = new LinearInterpolator(); // or other interpolator
PolynomialSplineFunction psf = li.interpolate(x, array);
double[] expandedArray = new double[newSize];
double xi = x[0];
for (int i = 0; i < newSize; ++i) {
expandedArray[i] = psf.value(xi);
xi += step;
}
return expandedArray ;
}
Для shrink
массива вы можете либо decimate
вход array
т.е. просто создатьновый меньший array
и просто возьмите значения, основанные на новом размере шага, или используйте interpolator
, как указано выше.