Verfasst am: 30.04.2008, 00:22
Titel: Problem bei 3D Diagrammerstellung mit 3 Vektoren
Hallo,
ich bin noch relativ neu im Umgang mit Matlab. Habe vor einiger Zeit mal was mit Simulink machen müssen, aber das ist jetzt auch schon ein Jahr her und hilft mir glaube ich auch nicht wirklich weiter.
Zum Problem:
Ich habe drei unterschiedliche Datenreihen: X = Anstellwinkel, Y= Höhe, Z=Widerstand.
also die Funktion meshgrid erzeugt dir ein regelmäßiges Koordinatengitter, ein Gitternetz sozusagen, nachdem du später die Funktionswerte im 3dimensionalen zuordnen kannst.
Auf der x-Achse stehen dir nach deinen Angaben 3 Werte (n=3), auf der y-Achse 6 Werte (m=6) zur Verfügung:
Das Element (i,j) mit Reihenindex i und Spaltenindex j gibt dir in der X-Matrix den zugehörigen x-Wert, in der Y-Matrix den y-Wert an.
Nun benötigst du eine dritte (m x n)-Matrix, die dir die zugehörigen Funktionswerte z=f(x,y) angibt.
Diese Matrix ergibt sich durch Umstellung deines Vektors z.
Dies erreichst du z.B. über
Mit dem Befehl [X,Y,Z]=meshgrid(x,y,z) hattest du impliziert dass der Vektor z nicht die Funktionswerte z=f(x,y) angibt, sondern die Koordinatenwerte der z-Achse angibt, und es dementsprechend für den Funktionsaufruf mesh oder surf eine 4. Variable u geben muss für die gilt: u=f(x,y,z).
Und zwar habe ich (nur mal zum Versuch- auch MATLAB Neuling ) aus dem FEM Programm ANSYS, X-Y Koordinaten mit dazugehörigen Punkt- Verformungsdaten eingelesen.
Nun wollte ich diese drei Vektoren (alle drei: <1x310 double>) als surface plot anzeigen lassen - das war mir aber nicht möglich.
Es funktioniert wunderbar die Punkte mit plot3 zu visualisieren - ich will aber einen schönen surf-plot!
Meine Frage also:
-wie ist es möglich die X-Y-Punktdaten mit zugehörigen Z-werten als surface zu plotten
-oder wie kann man solche Daten interpolieren und mit der Funktion arbeiten (gibt es eine Art 3-D interpolation?)
Freue mich über jede hilfreiche ANTWORT- DANKE im Voraus!
Aber was mir nicht ganz klar ist:
Ich habe anfangs drei <1x100> Vektoren und erzeuge dann mit diesen Befehlen einen <1x50> und einen <50x1> Vektor??? - Wieso?
Und mit diesem Befehl erzeuge ich dann meine Matrizen für den surf-Plot:
[X,Y,Z]=griddata(x_mess,y_mess,z_mess,x_int,y_int,'nearest');
Matlab Hilfe:
[XI,YI,ZI] = griddata(x,y,z,XI,YI) returns the interpolated matrix ZI as above, and also returns the matrices XI and YI formed from row vector XI and column vector yi. These latter are the same as the matrices returned by meshgrid.
Ich werde da nicht ganz schlau draus - könnte mir wer sagen was Matlab hier genau macht?
mit dem x_int und y_int werden nur die Anzahl der Stützstellen für die Interpolation mit griddata festgelegt.
Du könntest da statt 50 auch 20 oder 150 schreiben.
_________________
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.