Interpolation über ein array (oder zwei)
Ich bin auf der Suche nach eine java-Bibliothek oder eine Hilfe für das schreiben meiner eigenen Interpolations-Funktion. Ich habe zwei arrays von doubles, die möglicherweise unterschiedliche Größen, sind aber bestellt. Ich muss in der Lage sein, um eine Schätzung der Zwischenwerte, und legen Sie so, dass beide arrays werden die gleiche Größe. In der Tat ist die Gesamtzahl der Punkte, die in der interpolation ist die Summe der 2 array-Größen minus 1. Der Bereich jedes array muss die gleiche bleiben jedoch erhalten, so dort ist keine Hochrechnung erforderlich.
zB. a1 = [1, 4, 9, 16, 25, 36] und a2 = [6, 9, 14, 30]
konnten die Ergebnisse werden zB.
a1 = [1, 2.25, 4, 6.25, 9, 12.25, 16, 25, 36]
und
a2 = [6, 6.5625, 7.25, 9, 10.0625, 11.25, 14, 25.25, 30]
diese Beispiele sind f(x) = x^2 and g(x) = x^2 + 5
, doch hätte leicht jeder Polynom - der Punkt ist, einschätzen zu können/approximieren Sie die Funktion aus dem dataset gut genug, um anständig genug interpolation. Hier der x-Wert ist einfach der index des Arrays input. In der Ausgabe nur die y-Werte sind wichtig.
- Deine Frage ist ein wenig unklar. Könnten Sie uns eine triviale konkretes Beispiel?
- Ich habe editiert, um zu zeigen, ein Beispiel, obwohl es nicht unbedingt die Ausgabe, die eine Funktion könnte/geben würde, aber ich denke, es zeigt eine akzeptable Leistung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die anderen Antworten geben Sie lineare Interpolationen -- diese nicht wirklich funktionieren, für komplexe, nichtlineare Daten. Sie möchten eine spline-fit, (spline-interpolation), glaube ich.
Spline-fits beschreiben Datenbereiche, die mithilfe einer Reihe von Kontrollpunkten, von den Daten, wenden Sie dann ein Polynom interpolation zwischen den Kontrollpunkten. Mehr Punkte gibt Ihnen eine genauere Passform, weniger eine Allgemeine Passform. Splines sind viel genauer als die lineare passt, schneller zu bedienen als eine Allgemeine regression passen, besser als ein high-order polynomial, weil es nicht verrückte Dinge tun zwischen Kontroll-Punkte.
Kann ich mich an Namen nicht erinnern aus der Spitze von meinem Kopf, aber es gibt einige ausgezeichnete Passform-Bibliotheken in Java -- ich schlage vor, Sie für einen Blick eher als das schreiben einer eigenen Funktion.
**EDIT: Bibliotheken, die nützlich sein könnten: **
** Theorie/code, die nützlich sein können: **
Konzipiert für EINE Dimension data array
Weiß nicht, ob es hilft...
Es ist sehr schnell gecodet, also wenn jemand eine schönere /mehr Leistung Weg, das gleiche zu tun, danke für den Beitrag.
VERWENDUNG:
Ich weiß, das ist eine alte Antwort, aber es ist der erste google Treffer bei der Suche nach Java-interpolation. Die akzeptierte Antwort enthält einige hilfreiche links, aber JMSL gekauft werden müssen, und die JSpline+ website sieht skizzenhaften.
Apache Commons Math hat Implementierungen der linearen und spline-Interpolationen, die angezeigt werden einfache, funktionale und vertrauenswürdig.
http://commons.apache.org/proper/commons-math/
Einfache lineare interpolation berechnet werden kann, mit so etwas wie:
Funktioniert diese Hilfe?
Müssen Sie die x-Werte die entsprechenden y-Werte. Sonst kein Algorithmus in der Lage sein, um festzustellen, ob [1, 16, 81] x^2 für [1, 4, 9] oder x^4 [1, 2, 3]. Würden Sie interpolieren sechs Werte oder keiner?
Dann, wenn Sie die x-Werte, die Sie verwenden können, eine Art der interpolation (linear, kubic spline, you name it) zu approximieren, werden die fehlenden Werte.
Leicht-Gewicht-version von one-dimensional array linear interpolator:
sehr vorsichtig mit dem spline-fits und Polynom-fits. Diese beiden geben kann, unsinnige Verhalten, das kann entgleisen viele verwendet (was wird angenommen, dass eine Darstellung) der Daten.
Alles, was verwendet Ableitungen (Steigungen) von Daten kann völlig entgleist.
Beste Sache, die Sie tun können, ist eine Darstellung der Daten, verstehen, was es tut, und erst dann passen (linear, Polynom -, log-log) regression; sobald Sie das getan haben, sollten Sie Ihrem Grundstück passen über die originalen Daten, und stellen Sie sicher, dass Sie angemessene Vereinbarung. Das überspringen dieser Vergleich-step ist eine sehr schlechte Idee.
Bestimmte Daten-sets wird nicht nachgeben Anpassung von Polynomen, log-log, etc..; wenn die Daten-Punkte sind angemessen verteilt über die Daten, es ist nichts falsch mit stückweise-interpolation (linear oder Polynom etc.). Zu schlagen ein Totes Pferd, wenn Sie stückweise interpolation vermeiden Sie alles, was verwendet Derivate/hängen von Ihrem stückweise interpolation, da Sie Diskontinuitäten und bewirkt, dass die Dinge sich schlecht zu benehmen.
können Sie apache-commons-math interpolation Funktionen, wie SplineInterpolator