interpolate
Die Methode erwartet Arrays von Paaren (hier genannt x
und y
) und gibt eine Funktion (psf
), die diese Werte so gut wie möglich paßt.
Diese Funktion wird dann verwendet, um den yi-Wert eines gegebenen xi-Wertes zu interpolieren (der normalerweise nicht im x/y-Feld enthalten ist, das zur Definition der Funktion verwendet wird).
Sie haben also Paare mit x- und y-Werten, die eine Funktion definieren und diese Funktion verwenden, um fehlende Werte zu interpolieren.
Siehe die userguide auf Apache Commons (Kapitel 4.4: Interpolation).
Beispiel:
Die grünen Punkte sind Wertepaare bekannt. Diese sind durch die Wertefelder x
und y
definiert.
Beim Aufruf interpolate
gibt der zurückgegebene PolynomialSplineFunction
die Funktion zurück, die mit den bekannten Wertepaaren angenähert wird. Die Form der Funktion wird durch den Typ UnivariateInterpolator
definiert, der verwendet wird. Im Beispiel wird eine LinearInterpolator
verwendet. Die Zeichnung zeigt die von einem Spline-Interpolator zurückgegebene Funktion. Der rote Punkt symbolisiert einen Wert mit einem unbekannten y-Wert auf der interpolierten Funktion (dies wäre der Wert mit einem x-Wert von xi
im Frage-Beispiel).
Wenn brauchen Sie mehr als einen zusätzlichen Wert zu berechnen, verwenden Sie eine Funktion wie diese
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;
}
Ein Rechenbeispiel:
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);
}
}
Drei bekannte Wertepaare angegeben:
(0, 0)
(50, 50)
(100, 200)
Ein Wert unbekannt ist:
(? 70)
Die LinearInterpolator
die angegebenen Werte interpoliert und erzeugt ein Funktion mit zwei stückweisen, linearen Polynomen:
y = x (for x values < 50)
y = 50 + 3 * x (for x-values >= 50)
Der Wert der interpoliert xi
(hier: 70)
y = 50 + 3 * (70 - 50) = 110
Haben Sie die Interpolationsfunktion selbst, dh erstellen Bilder wie https://en.wikipedia.org/wiki/File:Interpolation_example_linear.svg darstellen möchten oder https://en.wikipedia.org/wiki/File:Interpolation_example_polynomial.svg mit einer Reihe von X/Y-Punkten? Oder möchten Sie die Y-Werte für X-Werte erhalten, die nicht in Ihrem ursprünglichen Datensatz enthalten sind, und diese grafisch darstellen? –
Ich möchte die Interpolationsfunktion selbst plotten, ich verwende 'highchart.js', um die Daten zu plotten. Mein oberstes Ziel ist es, eine Extrapolationsfunktion zu haben, um Punkte in der Zukunft zu zeichnen, indem ich meine Menge von X/Y-Punkten verwende. vielleicht mit etwas wie folgt: https://StackOverflow.com/Questions/32076041/Extrapolation-in-Java Aber ich wurde dazu gebracht zu glauben, wenn ich eine Interpolationsfunktion habe, kann ich diese Funktion zu extrapolieren. – Johntk