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

Koordinaten in Strömungsfeld ohne Schleife berechnen?

 

Cowboy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2012, 11:40     Titel: Koordinaten in Strömungsfeld ohne Schleife berechnen?
  Antworten mit Zitat      
Guten Tag,

ich habe folgende Aufgabenstellung:
In einer Rohrströmung befinden sich Partikel, die durch diese Strömung fortbewegt werden. Ich möchte die Position der Partikel zu einem beliebigen Zeitpunkt berechnen.
Im einfachen Fall habe ich
v (x): Strömungsgeschwindigkeit, Abhängig von der Position im Kanal (x = 0 ist die Kanalmitte, x = R ist an der Rohrwand)
t: Die verstrichene Zeit
Damit kann ich leicht den Ort ausrechnen:
Ort = v(x) * t
Soweit, so gut.

Leider sieht es so aus, dass v nicht nur von x abhängt (parabelförmiges Stömungsprofil), sondern im Rohrverlauf veränderlich ist (bspw. durch ein sich verengendes Rohr), es ist also v(x,y). Bisher habe ich es so gelöst, dass ich eine Schleife programmiert habe. Zuerst wird ein Vektor mit den y-Koordinaten erstellt, der Teil läuft gut (Hier nicht gezeigt). Anschließend die Schleife:

Code:

t_Schritt = t / n_Schritte
for i = 1:n_Schritte
 if i == 1 % Initialisierung im ersten Schritt
  Ort(i) = x0
 else
  v_xmax = v0 + v0 * (Ort(i-1)/l_Kanal) % Linearer Geschwindigkeitszuwachs im Kanal von v0 auf 2*v0 in der Kanalmitte. Hier liegt das Problem: v_xmax ist vom zuletzt berechneten Ort abhängig! (Linearer Zuwachs ist nur ein Beispiel könnte ebenso sin-förmig sein...)
  v = (-4 * v_xmax / h_Kanal^2 * Ort_y(i) - h_Kanal/2)^2 + v_xmax % Berechnung der Geschwindigkeit (parabelförmiges Strömungsprofil!) in Abhängigkeit der y_Position
  Ort_x(i) = v * t_Schritt + Ort_x(i-1) % Der Ortsvektor Ort_x wird nach und nach mit den einzelnen Koordinaten gefüllt.
 end
end
 

Es wird also die Geschwindigkeit für den aktuellen Punkt aus der Position des zuletzt berechneten Punktes berechnet. Für ordentliche Ergebnisse ist n_Schritte recht groß (>1000) und da ich Octave nutze, dauert das ne ganze Weile. Lässt sich das Problem, dass Werte auf Basis des in dem Vektor zuvor stehenden Wertes berechnet werden, vektorisieren?

Ich bin auf die Antworten gespannt Smile

Gruß
Cord


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.07.2012, 12:44     Titel: Re: Koordinaten in Strömungsfeld ohne Schleife berechnen?
  Antworten mit Zitat      
Hallo Cowboy,

Um Laufzeit zu sparen würde ich zunächst mal alle wiederholten Berechnungen vermeiden:
Code:
t_Schritt = t / n_Schritte
h_Kanal_sq = h_Kanal^2;
h_Kanal_2 = h_Kanal / 2;
Ort(1) = x0;
for i = 2:n_Schritte
  v_xmax = v0 + v0 * (Ort(i-1) / l_Kanal);
  v = (4 * v_xmax / h_Kanal_sq * Ort_y(i) + h_Kanal_2)^2 + v_xmax;
  Ort_x(i) = v * t_Schritt + Ort_x(i-1);
end

Wieviel Laufzeit bringt dies?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Cowboy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2012, 13:18     Titel:
  Antworten mit Zitat      
Moin Jan,

herzlichen Dank für deine Antwort. All zu viel bringt das leider nicht. In meinem Programm messe ich folgende Zeiten:

Wiederholte Berechnungen in der Schleife:
0,9747 Sekunden
Wiederholte Berechnungen außerhalb der Schleife:
0,8779 Sekunden

Als Vergleich, wenn die Geschwindigkeit nicht von der y-Position abhängt:
0,0005519 Sekunden (!)

Da diese Berechnung wiederum innerhalb einer Schleife steht und einige tausend Mal ausgeführt wird (um die komme ich dann wirklich nicht mehr herum) ist mir sehr daran gelegen, dass dieser Schritt fixer wird Smile

Herzliche Grüße
Cord
 
Cowboy

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2012, 09:26     Titel:
  Antworten mit Zitat      
Hallo zusammen,

hat noch jemand eine Idee? Mir würde auch helfen zu wissen, dass das evtl. gar nicht möglich ist... dann brauche ich nicht weiter nach einer Antwort suchen und beiße lieber in den sauren Apfel Sad

Um die Motivation zu erhöhen, setze ich den Status mal auf "komplex" Wink

Gruß
Cord
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.07.2012, 13:49     Titel: Re: Koordinaten in Strömungsfeld ohne Schleife berechnen?
  Antworten mit Zitat      
Hallo Cowboy,

Was hast Du denn weiter versucht? Die grundlegende Strategie sollte ja nun klarer sein. Da Du aber keinen lauffähigen Code (mit Daten!) gepostet hast, können wir das ja auch nicht selber probieren.

Ein weitere Vorschlag: Vektorisiere ein wenig:
Code:
t_Schritt = t / n_Schritte
h_Kanal_sq = h_Kanal^2;
h_Kanal_2 = h_Kanal / 2;
Ort(1) = x0;

v_xmax_v = v0 + v0 .* (Ort ./ l_Kanal);
for i = 2:n_Schritte
  v_xmax = v_max_v(i - 1);
  v = (4 * v_xmax / h_Kanal_sq * Ort_y(i) + h_Kanal_2)^2 + v_xmax;
  Ort_x(i) = v * t_Schritt + Ort_x(i-1);
end

Nun liesse sich "v" genaus behandeln. Zum Schluß bliebe noch Ort_x: Hier wird zu jedem Punkt er Wert des vorherliegenden Punktes benötigt. Dies läßt sich üblicherweise per CUMSUM schaffen.

Gruß, Jan
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.