Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Simulink Grundlagen und Beispiele

Fachkräfte:
weitere Angebote

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Aus einer 3D Fläche, 2D Plots generieren

 

Hunter96av
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2021, 13:21     Titel: Aus einer 3D Fläche, 2D Plots generieren
  Antworten mit Zitat      
Hallo Zusammen,

Bin neu hier in diesem Forum und benötige eure Hilfe.
Habe die Suchfunktion genutzt, leider nichts gefunden.

Mein Problem:
-habe 3 Vektoren und diese mit triscatteredinterp geplottet.
-daraus ergibt sich eine Fläche aus x Leistung, y Druck und Z Volumenstrom

Jetzt möchte ich ein Kennfeld aus dieser Fläche generieren für y=20hpa, y=40hpa und so weiter.

Wo ich dann für meine gewünschten Drücke einen Plot mit Leistung -Volumenstrom bekomme.

Wäre euch sehr dankbar! Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 23.418
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2021, 14:44     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Jetzt möchte ich ein Kennfeld aus dieser Fläche generieren für y=20hpa, y=40hpa und so weiter.

Soll das dann in getrennten Figure passieren? Oder in einem Figure, aber mit unterschiedlichen Farben?

Generell würde ich empfehlen, direkt mit den Daten zu arbeiten statt mit dem Plot, z.B.

Code:
plot(x(y==20), z(y == 20))


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2021, 15:58     Titel:
  Antworten mit Zitat      
Hi,
vielen Dank für die schnelle Antwort.

Am besten wäre es in einem Figure, damit ich die Kennlinien der verschieden Drücke in einem Figure habe.

Code:

F = TriScatteredInterp(x,y,z);
[qx,qy] = meshgrid(linspace(min(x),max(x),100),linspace(min(y),max(y),100));
qz= F(qx,qy);
surf(qx,qy,qz);
xlabel('x [W]')
ylabel('y [hPa]')
zlabel ('z [kg/h]')
 


Das ist der Code für meine Fläche.

Jetzt will ich ja meine Kennlinie für y=20hPa

Wenn ich nun das Kennfeld für meine interploierten Werte haben möchte gebe ich das ein

Code:
plot(x(y==20), z(y == 20))


Da kommt leider kein Plot.
Liegt das daran, dass meine qx, qy, qz jetzt ein Value von 100x100 double haben ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.418
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.09.2021, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

ich vermute eher, dass das daran liegt, dass der Wert qy = 20 nicht in dem Vektor vorkommt, sondern nur Werte ein wenig darüber und darunter.

Eigentlich müsste
Code:
plot(xq', yq', zq')

den gewünschten Plot generieren. Dann eben für die yq-Werte, die vorkommen.

Wenn das nicht weiterhilft, bitte einen kleinen Beispieldatensatz zur Verfügung stellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2021, 09:30     Titel:
  Antworten mit Zitat      
Hi,

sorry für die späte Rückmeldung, Hat geklappt Smile
hab schon das nächste problem....mache gleich ein neues thema
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2021, 09:35     Titel:
  Antworten mit Zitat      
Wenn ich mir jetzt einen Bereich anzeigen lasse, z.B.:
Code:

plot(x(990<y<1010),z(990<y<1010))
 


Bekomme ich ein Bild wie im Anhang angehängt.

Kann ich mir da direkt im Code schon eine Spline reinlegen?
Und diese Spline dann mit 1000mbar beschriften?

Ich möchte am Ende ein Kennfeld haben mit mehreren Drücken als Spline,
in Abhängigkeit von Spannung auf x-Achse, Massenstrom auf der y-Achse.

Vielen lieben Dank euch Smile

2021-09-20_09h31_17.png
 Beschreibung:

Download
 Dateiname:  2021-09-20_09h31_17.png
 Dateigröße:  16.79 KB
 Heruntergeladen:  15 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.418
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.09.2021, 11:10     Titel:
  Antworten mit Zitat      
Hallo,

wenn du den Code so eingibst, bekommst du ja eine Warnung in orange unterlegt. Diese sollte unbedingt beachtet werden!
Code:
plot(x(990<y & y<1010),z(990<y & y<1010))


Zudem ist es wahrscheinlich wenig sinnvoll, die Datenpunkte zu verbinden. Also eher:
Code:
plot(x(990<y & y<1010),z(990<y & y<1010, "."))


Und ja, du kannst natürlich eine Spline durchlegen, z.B. mit interp1 . Die Frage ist aber, ob das so sinnvoll ist, da eine Spline durch jeden Punkt geht. Regression kann hier sinnvoller sein.
Beschriften kannst du mit text oder über legend .

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.09.2021, 11:25     Titel:
  Antworten mit Zitat      
Hi Harald,

bekomme diesen Error:

Code:
Unable to use a value of type string as an index.


Sorry, dass ich immer so lange brauche, habe noch andere Messungen und hab nicht dauerhaft am Skript weiterzuarbeiten.

Bin Dir aber sehr dankbar für deine Antworten Smile
Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.418
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.09.2021, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

woran könnte das denn liegen? Überprüfe doch mal die Klammernsetzung.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2021, 11:44     Titel:
  Antworten mit Zitat      
Ja, tatsächlich

so ist es richtig:

Code:

plot(x(989<y & y<991), z(989<y & y<991), ".")
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Hunter96av
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 13.09.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.09.2021, 11:08     Titel:
  Antworten mit Zitat      
Hi,

habe ein Kennfeld wie im Anhang angehängt.
Dieses wurde aus den drei Vektoren x,y,z generiert.
Folgender code:
Code:

F = scatteredInterpolant(x,y,z,'linear','linear');
[qx,qy] = meshgrid(linspace(min(x),max(x),100),linspace(min(y),max(y),100));
qz = F(qx,qy);
surf(qx,qy,qz);
xlabel('x [V]')
ylabel('y [hPa]')
zlabel ('z [kg/h]')
 


Jetzt möchte ich aus diesem Kennfeld ein Figure:
für y=990hPa in 10er Schritten bis 1040hPa.

Dies kann ich ja nun aus meinem qx, qy, und qz rausziehen, welche jeweils 100x100 double sind.

990hPa hab ich da nicht gegeben, aber in Zeile 13 des 100x100 Matrix habe ich 990,3667 hPa, das würde auch gehen. Wie bekomme ich jetzt die Zeile 13 von qx und qz geplottet?

Der Befehl hat nicht funktioniert
Code:

plot(qx(qy==990.3667),qz(qy==990.3667))
 


2021-09-27_10h56_10.png
 Beschreibung:

Download
 Dateiname:  2021-09-27_10h56_10.png
 Dateigröße:  383.13 KB
 Heruntergeladen:  11 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.418
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.09.2021, 17:31     Titel:
  Antworten mit Zitat      
Hallo,

was hat denn an dem Befehl "nicht funktioniert"?
Mangels Daten kann man das nicht reproduzieren. Somit ist man darauf angewiesen, dass du das genau beschreibst.

Generell würde ich in Matrizen immer mit zwei Indizes (Zeilen und Spalten) indizieren, beispielsweise
Code:
plot(qx(13, :),qz(13, :))


Wenn du später die Kennfelder zu bestimmten Werten haben willst, machst du dir mit Gittervektoren wie linspace(min(y),max(y),100) meiner Meinung nach unnötig das Leben schwer. Wenn du ein Kennfeld für Druck 990:10:1040 haben willst, dann interpoliere doch für genau dieses Gitter?

Bitte auf den Status des Beitrags achten. Wenn er auf "beantwortet" gesetzt wurde, schaut evtl. niemand mehr rein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.