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

Meshgrid "filtern" über Logical Matrix?

 

Schmankerl
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2012, 22:50     Titel: Meshgrid "filtern" über Logical Matrix?
  Antworten mit Zitat      
Hallo miteinander!

Folgendes Problem:

Ich habe ein Rechengebiet welches aus Druck-und dazugehörigen Temperaturwerten besteht.
Dieses (annähernd rechteckige) Rechengebiet möchte ich mir nun in Matlab erstellen.

Dazu habe ich zwei Vektoren, jeweils einen für die Temperatur und einen für den Druck erstellt mit einer entsprechenden Schrittweite.
Das Gebiet wird durch einen minimalen und maximalen Druck sowie eine minimale und maximale Temperatur begrenzt.

Über die Funktion "meshgrid" erstelle ich mir nun diese Kombinationsmöglichkeiten (Druck- und Temperaturpunkte)

Da zu einem bestimmten Druckwert z.B. p=20bar nur Temperaturen bis 900K zugelassen sind, möchte ich alle Kombinationen mit p=20bar und Temperatur
größer als 900K quasi löschen.

Meine Frage ist nun, wie ich die "meshgrid" Funktion "filtere" um nur ganz bestimmte Kombinationen zuzulassen?

Diese Kombinationsmöglichkeiten möchte ich anschließend in eine Formel bzw. Funktion f=f(p,T) packen und die Funktionswerte berechnen lassen.

Wie gesagt, ich darf aber nur bestimmte meshgrid Kombinationen verwenden.

Weiß jemand wie das geht? Vielen


Mein Betreuer meinte, ich möchte so etwas über eine "Logical Matrix" haben?

Also bisher bin ich mit meinem Code so weit:

Code:
dt=1; %Schrittweite Temperatur festlegen
dp=1; %Schrittweite Druck festlegen
p0=2; %Startwert Druck
pmax=20; %Maximalwert Druck
T0=290; %Startwert Temperatur
Tmax=1400; %Maximalwert Temperatur

p=p0:dp:pmax; %Vektor Druck definieren
T=T0:dt:Tmax; %Vektor Temperatur definieren

[X,Y]=meshgrid(p,T);

f=X.*Y; %hier nur mal zum Test eine Funktion eingeben


Besten Dank für ein paar Hinweise Wink
Private Nachricht senden Benutzer-Profile anzeigen


dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2012, 23:19     Titel:
  Antworten mit Zitat      
Für die von dir beispielhaft genannte Grenzen ist eine logic Matrix recht schnell erstellt:

Code:
L=(X<=20)&(Y<=900)


Da wo die 1 ist, ist die grenze eingehalten.
Mit dem Filter kannst du jetzt das Grid filtern:
Code:
X_filtered=X(L)
Y_filtered=Y(L)
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.12.2012, 12:46     Titel:
  Antworten mit Zitat      
Ok super das hilft mir schonmal weiter, Danke! Nun muss ich die Bedingung ein wenig abändern.

Die Bedingung ist, dass wenn ich einen bestimmten
Druck p_i habe,
keine Temperaturen auftreten dürfen, die kleiner sind als

T<T0* (p_i / p_0)^(R/cp)

Beispiel:

Angenommen mein Meshgrid erstellt mir die Kombinationen für

p=3

dann darf die minimale Temperaturkombination nicht unter den Wert

T=T0* (3 / p_0)^(R/cp) fallen

(T0,p0,R,cp sind Konstanten und im Programm definiert)


Wie könnte man das programmieren, habe es so versucht:

Code:
R=287; %Gaskonstante
cp=1004.5; %Wärmekapazität
dt=1; %Schrittweite Temperatur festlegen
dp=1; %Schrittweite Druck festlegen
p0=2; %Startwert Druck
pmax=20; %Maximalwert Druck
T0=290; %Startwert Temperatur
Tmax=1400; %Maximalwert Temperatur

p=p0:dp:pmax; %Vektor Druck definieren
T=T0:dt:Tmax; %Vektor Temperatur definieren

[X,Y]=meshgrid(p,T);

L=(X==p)&(Y<T0*(p/p0)^(R/cp));

X_filtered=X(L);
Y_filtered=Y(L);




nur das ging irgendwie in die Hose Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 11:06     Titel:
  Antworten mit Zitat      
Hat jemand vielleicht eine Idee wie ich das einbauen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2012, 11:48     Titel:
  Antworten mit Zitat      
Hallo Schmankerl,
Zitat:
nur das ging irgendwie in die Hose

Bitte lass uns nicht raten, während Dir ja genau Informationen darüber vorliegen, was genau nicht wie erwartet funktioniert.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 13:29     Titel:
  Antworten mit Zitat      
Wie gesagt wollte ich oben beschriebenes erreichen:

Zitat:

Die Bedingung ist, dass wenn ich einen bestimmten
Druck p_i habe,
keine Temperaturen auftreten dürfen, die kleiner sind als

T<T0* (p_i / p_0)^(R/cp)

Beispiel:

Angenommen mein Meshgrid erstellt mir die Kombinationen für

p=3

dann darf die minimale Temperaturkombination nicht unter den Wert

T=T0* (3 / p_0)^(R/cp) fallen

(T0,p0,R,cp sind Konstanten und im Programm definiert)


Genau das habe ich mit
Code:
L=(X==p)&(Y<T0*(p/p0)^(R/cp));

versucht:

Die "Logical Matrix" soll nun folgendes machen:

Sie soll alle Drücke p durchlaufen die in X gespeichert sind und gleichzeitig zu jedem Druck p prüfen, ob die Temperatur die unter Y gespeichert ist größer als T0*(p/p0)^(R/cp) wobei hier der Druck p von X eingesetz wird.


Quasi am Beispiel:

X hat die Druckwerte (2,3,4,5,6...) und dazu jeweils die passende Temperatur also quasi

zum Druck 2 die Temperaturen (290,291,292,293...)
zum Druck 3 die Temperaturen (290,291,292,293,...)

nun sollen aber zum Druck 2 alle Temperaturen in Y herausfallen die kleiner als T0*(2/p0)^(R/cp) sind

und genau beim Druck p=3 alle Temperaturen in Y herausfallen die kleiner sind als T0*(3/p0)^(R/cp)


Hoffe das ist verständlich?

Und das habe ich eben durch meinen Befehl
Code:
L=(X==p)&(Y<T0*(p/p0)^(R/cp));
nicht hinbekommen Sad

Weiß jemand wie das gehen könnte (ohne Schleifenprogrammierung)?
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 14:02     Titel:
  Antworten mit Zitat      
Was genau hat p jetzt für eine Bedeutung, wenn sowiso immer p=X?
Private Nachricht senden Benutzer-Profile anzeigen
 
Schmankerl
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 19:24     Titel:
  Antworten mit Zitat      
Ja du hast recht, es gilt eigentlich immer X==p.

Ich möchte damit zum Ausdruck bringen, dass wenn X eben gerade einen bestimmten Druckwert hat, der zugehörige Y Wert eben eine bestimmte Bedingung erfüllen muss.

Weiß niemand wie so etwas gehen könnte?

Im Prinzip ist es quasi ein 2D Rechengebiet, welches eben bestimmte Grenzen hat, quasi Wertekombinationen die nicht vorkommen dürfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2012, 22:52     Titel:
  Antworten mit Zitat      
L=(Y<T0*(X/p0).^(R/cp));

Dann ist das dein Filter.

das "." vor den üblichen Rechenzeichen führt die Operationen jeweils elementweise aus.
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 - 2025 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.