Nehmen wir an, ich habe n Punkte, die eine Fläche auf der Z-Achse definieren
%Vor%Ich möchte jetzt f (x, y) approximieren können. Ich suche nach einem Algorithmus für eine lineare und insbesondere eine Spline-Approximation. Ein Beispiel Algorithmen oder zumindest einige Zeiger wären großartig.
Dies ist eine vage Beschreibung eines Ansatzes für eine lineare Annäherung.
(x_i,y_i)
) (x_i,y_i)
und (x_j,y_j)
, wenn es eine gibt Liniensegment von Punkten, so dass (x_i,y_i)
und (x_j,y_j)
äquidistant sind (und näher als jedes andere Paar). Im Folgenden werden die ersten beiden Schritte in Python implementiert. Die Regelmäßigkeit deines Raster kann Ihnen erlauben, Dinge zu beschleunigen (es kann auch die Triangulation durcheinander bringen).
%Vor%Die Interpolation auf irreguläre 2D-Daten ist nicht so einfach. Ich kenne keine echte Spline-Verallgemeinerung zu irregulärem 2D.
Neben den triangulationsbasierten Ansätzen können Sie auch Barnes ( Ссылка ) und Inverse Distance Weighting (< a href="http://en.wikipedia.org/wiki/Inverse_distance_weighting"> Ссылка ), oder allgemeiner RBF ( Ссылка ).
Wenn Ihr Punkt stark ungleichmäßig verteilt ist (dichte Cluster), kann es notwendig sein, die Größe der Funktionen adaptiv zu machen, oder eher auf Approximation als auf Interpolation zurückzugreifen.
Sie können Ihre Punkte als Kontrollpunkte einer Bézier (oder Bspline) -Oberfläche verwenden, besonders wenn (xi, yi)
ein Rechteck in der XY
-Ebene abtastet. In dieser Hinsicht ist keine Anpassung beteiligt.
Die Oberfläche, die Sie erhalten, befindet sich in der konvexen Hülle Ihrer Punkte und schneidet (interpoliert) die Punkte an der Grenze von {xi, yi}
.
Wenn Sie experimentieren möchten, Dieser Forenbeitrag scheint einfach zu sein Code in Matlab
, und Sie können GuIRIT verwenden, um dasselbe zu tun, wenn Sie dies nicht tun Habe Matlab
(obwohl es das Dateiformat des Programms herausfinden muss).