Die Daten, die ich habe, sind immer auf einem Polynom zweiten Grades (quadratische Funktion). Ich möchte die Spitze der interpolierten Funktion so genau wie möglich finden.Genaueste Methode, um Daten zu interpolieren und den Peak zu finden?
Bisher habe ich interp1d
worden und dann den Spitzenwert extrahieren linspace
und eine einfache for
Schleife. Obwohl Sie eine große Anzahl von neu erzeugten Samples in linspace
verwenden können, können Sie mit der Ableitung des angepassten Polynoms noch genauer sein.
Ich habe keinen Weg gefunden, das mit interp1d
zu tun.
Jetzt die einzige Funktion, die ich gefunden habe, die die angepassten Polynomkoeffizienten zurückgibt, ist polyfit
, aber diese angepasste Funktion ist ziemlich ungenau (die meiste Zeit durchläuft die Funktion nicht einmal die Datenpunkte).
Ich habe versucht, UnivariateSpline
verwenden und die angepasste Funktion scheint ganz genau zu sein, und es ist sehr einfach, das Derivat Spline und seine Wurzel zu bekommen.
Andere polynomiale Anpassungsfunktionen (BarycentricInterpolator
, KroghInterpolator
, ...) geben an, dass sie aus Gründen der numerischen Stabilität keine Polynomkoeffizienten berechnen.
Wie genau ist UnivariateSpline
und seine Derivate, oder gibt es bessere Möglichkeiten da draußen?
Aber diese Methode basiert immer noch auf der Schrittweite von 'np.arange', die in diesem Fall _0.5_ ist. Ich möchte das Maximum der quadratischen Funktion auf Float/Double Precision reduzieren. –
@TjazBrelih Es gibt Ihnen Float/Doppelpunktpräzision. Ändere 'y.append ((i ** 2) +25)' zu 'y.append ((i ** 2) +25.086)'. Dann führe das Programm aus. Die Interpolation im Abstand von 0,5 findet den Minimalwert, obwohl dieser Wert in den ursprünglichen Daten nicht vorhanden war. –
Dies funktioniert nur, wenn die Funktion nicht entlang der X-Achse verschoben wird. Wenn Sie 'y.append ((i ** 2) +25)' zu 'y.append (((i + 0.2) ** 2) +25)' ändern, finden Sie nicht die wahre Spitze, nur die max/min Wert der interpolierten Funktion, die im Intervall von _0.5_ abgetastet wurde. –