WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Problem bei 3D Diagrammerstellung mit 3 Vektoren

 

Björn

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.04.2008, 01:22     Titel: Problem bei 3D Diagrammerstellung mit 3 Vektoren
  Antworten mit Zitat      
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.

Habe sie in folgender Form eingegeben:
Code:

x=[0   0   0   0   0   0   4   4   4   4   4   4   8   8   8   8   8   8]
y=[45000   47500   50000   51000   52500   55000   45000   47500   50000   51000   52500   55000   45000   47500   50000   51000   52500   55000]
z=[235499.1   201492.4   188305.5   180201.9   170837.6   151441.3   262974.8   223008.5   210222.2   199889.7   188525.2   170146.1   321586.9   268058.2   258895.9   238296.6   227797.8   205658.3]
 


Der einzige Befehl der geklappt hat war folgender, aber mit dem sieht die Diagrammfläche nicht so aus wie sie aussehen sollte:
Code:

x_int=linspace(0,8,12);
y_int=linspace(45000,55000,12);
y_int=y_int(:);
[X,Y,Z]=griddata(x,y,z,x_int,y_int,'v4');
figure;
surf(X,Y,Z);
title('method: v4');
 


Ich würde gerne die Funktion mesh, oder surf benutzen um den 3d-Graphen anzuzeigen, aber wenn ich
Code:

[X,Y,Z]=meshgrid(x,y,z)
mesh(X,Y,Z)

eingebe, dann kommt:
Code:

??? CData must be an M-by-N matrix or M-by-N-by-3 array.

Error in ==> mesh at 146
           hh = graph3d.surfaceplot(x,y,z,'FaceColor',fc,'EdgeColor','flat', ...
 

...und schon bin ich mit meinen eh nicht sehr ausgeprägten Latein am Ende.

Ich habe mir versucht das durch die Hilfe selbst beizubringen, aber es klappt einfach nicht.

Ich wäre überdankbar wenn mir einer von euch helfen könnte!
Danke im Voraus,
Björn


jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 30.04.2008, 09:47     Titel:
  Antworten mit Zitat      
Servus,

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:
Code:

x=[0 4 8];
y=[45000 47500 50000 51000 52500 55000];
 


Es genügt die einzelnen Koordinatenwerte nur einmal aufzuführen. Die weitere Zuordnung übernimmt dir später die Funktion meshgrid.

Der Befehl
Code:

[X, Y]=meshgrid(x,y);
 

erzeugt dir nun zwei Matrizen der Größe m x n:

Code:

X = [0 4 8;
        0 4 8;
        0 4 8;
        0 4 8;
        0 4 8;
        0 4 8];
Y = [45000 45000 45000;
       47500 47500 47500;
       50000 50000 50000;
       51000 51000 51000;
       52500 52500 52500;
       55000 55000 55000];
 


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

Code:


Nun kannst du mit mesh oder surf das Ergebnis darstellen lassen:
Code:

figure; mesh(X,Y,Z);
figure; surf(X,Y,Z);
 


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).

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
Michael Sams
Forum-Anfänger

Forum-Anfänger



Beiträge: 24
Anmeldedatum: 18.05.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 18.05.2008, 21:02     Titel:
  Antworten mit Zitat      
Hallo,

ich habe ziemlich dasselbe Problem:

Und zwar habe ich (nur mal zum Versuch- auch MATLAB Neuling Rolling Eyes ) 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!

Best Regards
Michael Sams
*Student*
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 18.05.2008, 23:12     Titel:
  Antworten mit Zitat      
Hi,

ich hatte dazu mal ein Beispiel gemacht.

Die x_mess, y_mess und z_mess wären darin Deine Daten aus Ansys.
Kommst Du damit weiter?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Michael Sams
Forum-Anfänger

Forum-Anfänger



Beiträge: 24
Anmeldedatum: 18.05.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 19.05.2008, 14:07     Titel:
  Antworten mit Zitat      
Hey - DANKE!

Klappt superb!

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? Shocked

x_int=linspace(-1,1,50);
y_int=x_int;
y_int=y_int(Smile;

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? Rolling Eyes

Danke
Best Regards
Michael Sams
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 19.05.2008, 20:49     Titel:
  Antworten mit Zitat      
Hi,

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.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Michael Sams
Forum-Anfänger

Forum-Anfänger



Beiträge: 24
Anmeldedatum: 18.05.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 20.05.2008, 10:45     Titel:
  Antworten mit Zitat      
Hi,

achso - das heißt, je mehr stützstellen ich definiere, desto genauer die interpolierte Fläche!?

-wenn ich jetzt z.B.: wie in meinem Beispiel zuvor beschrieben einen Vektor <1x310> habe --> dann müsste ich mit diesen definierten Stützstellen:
Code:

x_int=linspace(0,1,310);
y_int=x_int';
 

- eine tolle Interpolation erreichen.

Dankeschön
Best Regards
Michael
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.