2016-07-23 6 views
0

Ich möchte meine Datenpunkte grundsätzlich erhöhen, wenn ich eine 3D-Fläche meiner x, y-Koordinaten und ihren entsprechenden Funktionswert z (x, y) plotten möchte. Das Problem ist, dass meine Koordinaten nicht monoton ansteigen, so dass ich keine 2D-Interpolation in Matlab verwenden kann.Matlab: Interpolierende nicht-monotone Kordinaten- und Funktionswert-Kombinationen

Ein typisches x, y, z-Kombination für ein paar ersten Reihen könnte wie folgt aussehen:

15 15 184700.882736683 
15 30 215486.921407234 
15 45 205691.389050234 
15 60 215486.897031495 
15 75 209662.528668203 
15 90 215486.908134438 
15 105 211342.684211922 
15 120 215486.920131923 
15 135 212270.488286479 
15 150 215486.917843900 
30 30 275146.369280109 
30 45 262639.083693416 
30 60 275146.334615114 
30 75 267709.604291106 
30 90 275146.361678640 
30 105 269854.818605481 
30 120 275146.331709932 
30 135 271039.490475350 
30 150 275146.317264820 
30 15 235837.965849192 

Eigentlich kann ich Streudiagramm von ihnen plotten oder mit meshgrid Plot einer 3D-Oberfläche aus ihnen heraus, da aber Meine Datenwerte sind wenige und ich weiß, dass es keinen Wertsprung zwischen ihnen gibt, ich wollte nur die Anzahl der Datenpunkte durch Interpolation erhöhen und meine 3D-Oberfläche feiner, nicht zu grob erscheinen lassen.

Ich habe bereits 1, 2, 3 und 4, aber nicht von ihnen speziell auf eine Lösung für mein Problem zu beheben, da mein Fall ein 3d ist.

Bitte markieren Sie meine Frage nicht als duplizieren und kopieren; indem Sie einfach den Titel googeln. Vielen Dank.

+0

Sie haben 'z' als Funktion von' x' und 'y'. Wir würden diese 2D-Interpolation normalerweise nennen. Was stimmt nicht mit den Lösungen, mit denen Sie verknüpft sind? – Suever

+0

eigentlich, wenn Sie Interpolation 2D ausprobieren möchten, erhalten Sie Fehler, dass Ihre Daten monoton nicht zunehmen, und da ich z = f (x, y) habe, weiß ich nicht, wie man dieses monotone Problem, das heraufgekommen ist, repariert. Siehe das "x" ist monoton, aber y nicht, und z ist der Funktionswert, der offensichtlich nicht-monoton variieren kann. – Soyol

+0

Alle Threads, die Sie verknüpft haben, behandeln nicht-monotone Daten. – Suever

Antwort

1

Da Ihre Daten gestreut wird, müssen Sie entweder griddata oder scatteredInterpolant zu interpolieren z für ein bestimmtes x und y verwenden.

Hier ist ein kurzes Beispiel mit griddata.

% Sample at 1000 evenly spaced points over the x/y plane. 
[xq, yq] = meshgrid(linspace(min(x), max(x), 1000), ... 
        linspace(min(y), max(y), 1000)); 

zq = griddata(x, y, z, xq, yq); 

surf(xq, yq, zq) 

% Plot the original points as reference 
hold on 
plot3(x, y, z, 'o') 
+0

Danke, das ist der beste Weg – Soyol

+0

Hinweis: Ich denke, dass 'TriScatteredInterp' in neueren Matlab-Versionen in' ScatteredInterpolant' umbenannt wurde. –

+1

@TasosPapastylianou Ja hat es. Mein Gehirn funktionierte anscheinend nicht. Kann nicht mit der Abnutzungsrate von MATLAB mithalten. – Suever