的interpolate
方法預計對(這裏稱爲x
和y
)的陣列,並返回儘可能最好地符合這些值的函數(psf
)。
此函數用於內插給定xi值的yi值(通常不包含在用於定義函數的x/y數組中)。
因此,您有包含定義函數的x和y值的對,並使用此函數來插值缺失值。
請參閱Apache Commons上的userguide(第4.4章:插值)。
實施例:
綠點是已知的值對。這些由x
和y
值數組定義。
當致電interpolate
時,返回的PolynomialSplineFunction
返回使用已知值對近似的函數。功能的形狀由使用的UnivariateInterpolator
的類型定義。在問題示例中,使用LinearInterpolator
。該圖顯示了樣條插補器返回的函數。
紅點代表插值函數中具有未知y值的值(這將是問題示例中x值爲xi
的值)。
如果你需要計算一個以上的附加價值,使用這樣的函數
public double[] linearInterp(double[] x, double[] y, double[] xi) {
LinearInterpolator li = new LinearInterpolator(); // or other interpolator
PolynomialSplineFunction psf = li.interpolate(x, y);
double[] yi = new double[xi.length];
for (int i = 0; i < xi.length; i++) {
yi[i] = psf.value(xi[i]);
}
return yi;
}
算例:
public class Interpolate {
public static void main(String[] args) {
double[] x = { 0, 50, 100 };
double[] y = { 0, 50, 200 };
LinearInterpolator interp = new LinearInterpolator();
PolynomialSplineFunction f = interp.interpolate(x, y);
System.out.println("Piecewise functions:");
Arrays.stream(f.getPolynomials()).forEach(System.out::println);
double value = f.value(70);
System.out.println("y for xi = 70: " + value);
}
}
三個已知值對給出:
(0,0)
(50,50)
(100,200)
一個值是未知的:
(?70,)
的LinearInterpolator
內插給定的值,併產生一個用兩個分段線性多項式函數:
y = x (for x values < 50)
y = 50 + 3 * x (for x-values >= 50)
插值xi
(這裏:70)的值是
y = 50 + 3 * (70 - 50) = 110
你要繪製的插補功能本身,即像https://en.wikipedia.org/wiki/File:Interpolation_example_linear.svg創建圖像或https://en.wikipedia.org/wiki/File:Interpolation_example_polynomial.svg使用一組X/Y點?或者您是否想要獲取不在原始數據集中的X值的Y值(並且繪製這些值)? –
我想繪製插值函數本身,我使用'highchart.js'來繪製數據。我的最終目標是通過使用我的一組X/Y點來具有未來繪製點的外推函數。也許使用這樣的東西:https://stackoverflow.com/questions/32076041/extrapolation-in-java 但我一直相信,如果我有一個插值函數,我可以使用該函數來推斷。 – Johntk