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

Verschachtelte for-Schleife

 

basti182
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 11.07.2013, 21:16     Titel: Verschachtelte for-Schleife
  Antworten mit Zitat      
Hallo,

ich habe eine Frage Frage zu einer Verschachtelung einer for-Schleife. Ich muss dazu sagen, dass ich noch ein Anfänger in Matlab bin. Hier mein code:

Code:

m=[0.3:0.1:0.5];
ro1=740;
v1=7.5*10^-6;

i=0;
 for d1=0.0005:0.0001:0.0012;
 i=i+1;  
 Re1_1(i)=4*m(:,1)/((ro1*v1*pi)*(d1));
 
 end
 
 p=0;
 for d1=0.0005:0.0001:0.0012;
 p=p+1;  
 Re1_2(p)=4*m(:,2)/((ro1*v1*pi)*(d1));

 end

 q=0;
 for d1=0.0005:0.0001:0.0012;
 q=q+1;  
 Re1_3(q)=4*m(:,3)/((ro1*v1*pi)*(d1));

 end


Jeder Wert des Vektors m muss mit d1 multipliziert werden, d.h. man erhält erhält 3 neue Vektoren mit jeweils 8 Spalten.
Wie kann man den code so weit vereinfachen, dass man statt drei Schleifen nur noch eine hat?
Und wie kann man diese 3 Vektoren dann am geschicktesten plotten, sodass eine Kurvenschar aus 3 Kurven entsteht, jeweils für einen Wert von m, wobei die Legende jeweils die eingegebenen Werte von m anzeigt (m sind verschiedene Werte von Massenströmen [Kg/h])?Die Werte von Re_i sollen jeweils über d1 dargestellt werden. Ich hoffe ich konnte mein Problem einigermaßen verständlich schildern und bin für eure Hilfe sehr dankbar. (Das Plottbeispiel ist angehängt)

Grüße basti182

Beispiel.jpg
 Beschreibung:

Download
 Dateiname:  Beispiel.jpg
 Dateigröße:  40.82 KB
 Heruntergeladen:  430 mal
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.07.2013, 12:47     Titel:
  Antworten mit Zitat      
Hallo

wenn du dir die Drei schleifen anschaust, kannst du doch die Ähnlichkeiten sehen?
Alle Schleifen laufen den gleichen Bereich ab (Schleifenkopf ist identisch),
deswegen werden die Zählvariablen i,p,q gleiche Werte haben.
Also kann man doch für alle 3 die gleiche Zählvariable nutzen,
wenn du nun in die 3 Schleifen diese Zählvariablen auf gleichen Namen veränderst, siehst du plötzlich, dass man dass auch einfach in einer schleife schreiben kann.

so sieht das Endresult aus:
Code:

m   = 0.3:0.1:0.5;
ro1 = 740;
v1  = 7.5*10^-6;

% nutzte statt Zahlvariable i andere Namen, weil i in Matlab für komplexe Zahlen reserviert ist
k   = 0;
for d1=0.0005:0.0001:0.0012;
   k=k+1;
   Re1_1(k)=4*m(:,1)/((ro1*v1*pi)*(d1));
   Re1_2(k)=4*m(:,2)/((ro1*v1*pi)*(d1));
   Re1_3(k)=4*m(:,3)/((ro1*v1*pi)*(d1));
end
 



Apropos man braucht in Matlab nicht immer Schleifen, das Matlab ist eine Matrix optimierte Sprache ist, und das könnte man dann so scheiben


Code:
 

m   = 0.3:0.1:0.5;
ro1 = 740;
v1  = 7.5*10^-6;
% ./ steht für Elementeweise in diesem Fall Division
Re1_1   = 4*m(:,1)./((ro1*v1*pi)*(d1));
Re1_2   = 4*m(:,2)./((ro1*v1*pi)*(d1));
Re1_3   = 4*m(:,3)./((ro1*v1*pi)*(d1));
Private Nachricht senden Benutzer-Profile anzeigen
 
basti182
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.07.13
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 15.07.2013, 22:53     Titel:
  Antworten mit Zitat      
Vielen Dank für deine schnelle Hilfe. Jetzt habe ich noch eine Frage. Ich möchte den Wertebreich für den m-Vektor beliebig eingeben können, sodass man bei der Berechnung von Re nicht mehr genau so viele Ausdrücke hinschreiben muss, wie der Vektor Spalten hat.
Angenommen der Bereicht von d1 ändert sich nicht und ich möchte einen m-Bereich von 3 bis 100 in einer-Schritten.

Code:

m   = 3:1:100;
ro1 = 740;
v1  = 7.5*10^-6;
Re1_1   = 4*m(:,1)./((ro1*v1*pi)*(d1));
Re1_2   = 4*m(:,2)./((ro1*v1*pi)*(d1));
Re1_3   = 4*m(:,3)./((ro1*v1*pi)*(d1));
.
.
.
.Re1_100   = 4*m(:,100)./((ro1*v1*pi)*(d1));
 

Gibt es da eine Möglichkeit, dass man statt den 100 Zeilen dann mit einer auskommt?

Grüße
Basti
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 15.07.2013, 23:15     Titel:
  Antworten mit Zitat      
for schleife mit Re1 als cellarray würde mir da spontan einfallen
Code:
for k=1:size(m,2)
Re1{k}=Re1_1   = 4*m(:,k)./((ro1*v1*pi)*(d1));
end

oder so
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.