Verfasst am: 10.08.2015, 12:12
Titel: 3D-Plot aus Koordinaten(x,y) und Funktionswert(en) (z)
Liebes Forum,
bestimmt ist dies ein ganz einfaches Problem, doch bei 3D-Plot tu ich mich meist schwer.
Wir haben eine Tabelle mit x,y-Koordinaten und eine Liste mit Funktionswerten, die genau zu diesen Koordinaten passen. Vielleicht kann man sich das so vorstellen, die Vermesser haben Höhen gemessen (z-Koordinate) und diese bestimmten x,y-Koordinaten zugeordnet.
Und ich möchte aus diesen Daten ein schönes Gebirge plotten.
Welcher Befehl(e) wäre da wie anzuwenden? Momentan stehe ich mit
surf
ziemlich auf dem Schlauch, weil die ja
meshgrid
voraussetzt (?) und das habe ich ja durch die Definition schon...
Meine Vektoren sind:
Code:
x = [x_1, x_2, x_3, ... , x_n] %Koordinate Rechtswert
y = [y_1, y_2, y_3, ... , y_n] %Koordinate Hochwert
z = [z_1, z_2, z_3, ... , z_n] %Höhe an den Stellen (x,y)
nein hast du nicht. du hast kein vollständiges gitter mit punkten die einander zugeordnet sind.
meshgrid
und
griddata
sind die dinge die du für deinen
surf
plot brauchst. denke ich
_________________
mir ist noch nicht ganz klar, was
meshgrid
genau macht. Ich habe ja die beiden Vektoren x und y (siehe unten bzw. oben ) deren Paare (x_1,y_1) einen Punkt in der Zeichenebene kennzeichnen. Wie kann ich daraus dann mit
meshgrid
was Verständliches für
surf
machen?
Wenn ich mir die Hilfe zu meshgrid angucke, dann stehen da geordnete Paare drin. Also alle Paare, die die gleiche x-Koordinate haben, sind in einer Spalte der Y-Matrix vorhanden. Usw. Ist das Richtig? Und gibt es einen einfachen Weg, das so zu ordnen, dass mir die (zeilenweise) Zuordnung der z-Werte nicht verloren geht?
bekannt. Ich glaube, dass ich das soweit verstanden habe. Nur eine Frage noch: stimmt die Zuordnung der z-Werte in der Matrix "Z" im Sinne der Matrix "Werte"?
Viele Grüße
Thomas
Zuletzt bearbeitet von Barny.G am 10.08.2015, 14:32, insgesamt einmal bearbeitet
jaha: bei dem Tutorial werden die Werte für z ja erst aus den Matrizen "x_mess"und "y_mess" berechnet. Das kann und möchte ich ja nicht. Vielmehr sind die schon da.
Aaabeeer: Kann ich das so machen wie ein bisschen weiter oben beschrieben? Ich bin mir eben nur bei der Zuordnung in Z nicht so ganz sicher...
jaha: bei dem Tutorial werden die Werte für z ja erst aus den Matrizen "x_mess"und "y_mess" berechnet. Das kann und möchte ich ja nicht. Vielmehr sind die schon da.
und worin besteht das problem die zeile durch deine zeile mit den zwerten zu ersetzen?
_________________
Ich verstehe das Problem auch nicht, du startest mit den Variablen x, y und z. Das Tutorial startet mit x_mes, y_mess, z_mess. Lass es doch einfach mal damit laufen und guck an, was passiert. Wo die Werte für z in dem Beispiel herkommen, spielt doch keine Rolle, es geht da nur ums Visualisieren.
Hm, ich finde schon, dass es eine Rolle spielt. Denn es macht schon einen Unterschied ob ein bestimmter Wert (z.B. ein Quasi-Singulariät) nun im linken, unteren Eck des betrachteten Gebietes ist oder eher in der Mitte.
Insofern möchte ich eben wissen, ob das, was ich da
Probiers doch einfach aus. Lass dir die Oberfläche anzeigen und zusätzlich mit plot3 die Datenpunkte.
Die Anordnung der originalen Punkte ist gleichgültig, da bei der Interpolation die Punkte nicht nach Reihenfolge, sondern Nähe zum Gitterpunkt gewählt werden.
sehr schön, dass Du Dich der "Sache" annimmst! Du schreibst
Zitat:
Die Anordnung der originalen Punkte ist gleichgültig, da bei der Interpolation die Punkte nicht nach Reihenfolge, sondern Nähe zum Gitterpunkt gewählt werden.
Heißt Das, selbst wenn ich die Anordnung meiner Gitterpunkte so manipuliere, dass eine ähnliche Struktur wie im Hilfebeispiel von MatLab herauskommt, trotzdem "jemand" interpoliert? Btw: Wer? Welche Funktion? Und: Warum eigentlich?
Ich hoffe das sind keine Fragen, die Dir den Abend klauen...
Den Vergleich zu
plot3
werde ich auf jeden Fall machen. Gute Idee - Danke!
trotzdem "jemand" interpoliert? Btw: Wer? Welche Funktion?
In dem Tutorial
griddata
. Das geht aber auch aus der Doku hervor.
Wenn man einen Code übernimmt, würde ich ja schon einen Blick in die Doku der beteiligten Befehle werfen.
Zitat:
Und: Warum eigentlich?
surf benötigt Daten auf einem rechteckigen Gitter in einem bestimmten Format, und dein Datenformat weicht davon ab. Im allgemeinen werden die Originaldaten auch nicht auf dem rechteckigen Gitter sein.
letztlich war es Dein Tipp, der mich weitergebracht hat. (siehe Anhang) So eine Verifiationsmöglichkeit hatte ich mir gewünscht. Schön sieht man, dass die vorberechneten Werte gut auf der von Matlab erzeugten Fläche liegen. Alles ist nun i.O.!!
entweder hast du sehr schön regelmäßige Daten oder du hast statt der Daten die interpolierten Werte in plot3 reingesteckt. Zur Verifizierung sollten es aber die Originaldaten sein.
das sind die Originaldaten. Ich habe auf einer Fläche an Gauß-Quadraturpunkten die Stärke eines Magnetfeldes ausgerechnet. Sind also Simulationsdaten.
Deswegen passen die auch so gut zusammen.
Viele Grüße
Thomas
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.