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

for-Schleife

 

Tyraphis
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 10:53     Titel: for-Schleife
  Antworten mit Zitat      
Hallo,

ich benötige eine for schleife die mir bei jedem Durchgang einen neuen Block hinzufügt, siehe Code. Dabei wird jedes mal eine Spalte aus einer MxN Matrix hinzugefügt. Momentan habe ich die Schritte einzeln programmiert. Da die Schleife aber mehrmals durchgelaufen werden soll, wird das ganze schnell unübersichtlich. Hoffe ihr könnt mir helfen.

Gruß,
Alex

Code:

for j=1
   
    for i=1:12
    metalini=1+(j-1)+(i-1);    
    flamez=flame;
    flamez=int2str(flame(i,j))
    end
end

for j=2
   
    for i=1:12
    metalini=1+(j-1)+(i-1);
    flamez=flame;
    flamez=int2str(flame(i,j))
    end
   
    for i=1:12
    metalini=1+(j-2)+(i-1);
    flamez=flame;
    flamez=int2str(flame(i,j-1))
    end
end

for j=3
   
    for i=1:12
    metalini=1+(j-1)+(i-1);
    flamez=flame;
    flamez=int2str(flame(i,j))
    end
   
    for i=1:12
    metalini=1+(j-2)+(i-1);
    flamez=flame;
    flamez=int2str(flame(i,j-1))
    end
   
    for i=1:12
    metalini=1+(j-3)+(i-1);
    flamez=flame;
    flamez=int2str(flame(i,j-2))
    end
   
end
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: 21.11.2016, 11:39     Titel: Re: for-Schleife
  Antworten mit Zitat      
Hallo Tyraphis,

Zitat:
ich benötige eine for schleife die mir bei jedem Durchgang einen neuen Block hinzufügt, siehe Code.

Es ist aus dem Code nicht ersichtlich, was "Block hinzufügen" bedeutet.

Zitat:
Dabei wird jedes mal eine Spalte aus einer MxN Matrix hinzugefügt.

Das ist auch nicht erkennbar. Bisher wird in jeder Schleife der Wert von "flamez" immer wieder überschrieben. Ansonsten geschieht nichts.

Bitte erkläre nochmal genauer, was der Code tun soll.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 12:22     Titel:
  Antworten mit Zitat      
Hallo Jan,
als Block meine ich die innere for i=1:12 Schleife.
bei j=1 1x bei j=2 2x usw.

Im ersten Durchlauf j=1 werden die Werte aus der ersten Spalte in Flamez geschrieben.
Im zweiten Durchlauf j=2 werden die Werte der ersten Spalte in Flamez geschrieben und anschließend die Werte der zweiten Spalte. usw.
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: 21.11.2016, 13:02     Titel:
  Antworten mit Zitat      
Hallo Tyraphis,

Du möchtest also ein Programm schreiben, das ein Programm schreibt?

Zitat:
Im ersten Durchlauf j=1 werden die Werte aus der ersten Spalte in Flamez geschrieben.

Nein. Der Wert von Flamez wird in jeder Iteration zunächst mit dem Inhalt von "flame" überschrieben und dann mit einem Element als String. Das ist nicht sinnvoll und deshalb verstehe ich nicht, welches Ziel der Code hat.
Zitat:
Code:

for j=1
    for i=1:12
    metalini=1+(j-1)+(i-1);    % Überflüssig?
    flamez=flame;                 % Wozu? Wird doch in der nächsten Zeile wieder überschrieben!
    flamez=int2str(flame(i,j))
    end
end

Das erzeugt das gleiche wie:
Code:
flamez = int2str(flame(12, 1))

Wozu dienen dann die Schleifen?
Was ist der Zweck von "for j=3"? "j=3" würde es auch tun, oder?

Ich werde also aus dem Code nicht schlau. Darum ist es schwer eine Veränderung vorzuschlagen.

Vielleicht versuchst Du es mal andersherum: Was sind Deine Inputs und welche Outputs möchtest Du bekommen?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 14:07     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Du möchtest also ein Programm schreiben, das ein Programm schreibt?

Ja der Code soll einen Ansyscode erzeugen.

Zitat:

Nein. Der Wert von Flamez wird in jeder Iteration zunächst mit dem Inhalt von "flame" überschrieben und dann mit einem Element als String. Das ist nicht sinnvoll und deshalb verstehe ich nicht, welches Ziel der Code hat.

Er schreibt jede Zelle von 1:12 in flamez.
flamez(1:12,1)
Den Stringbefehl brauche ich weil Ansys leider mit dem Integerwert nichts anfangen kann. Nach jeder Iteration wird der Wert als Ansysvariable gespeichert.
Zitat:

Code:

for j=1
    for i=1:12
    metalini=1+(j-1)+(i-1)*65;    % Überflüssig?
    flamez=flame;                 % Wozu? Wird doch in der nächsten Zeile wieder überschrieben!
    flamez=int2str(flame(i,j))
    end
end

Das erzeugt das gleiche wie:
Code:
flamez = int2str(flame(12, 1))


Metalini brauche ich für eine Zuweisung und flamez wird danach in eine Ansys Variable überschrieben.


Zitat:
Wozu dienen dann die Schleifen?
Was ist der Zweck von "for j=3"? "j=3" würde es auch tun, oder?


Ja das stimmt, die sind ein überbleibsel vom Versuch das ganze direkt als äußere Schleife zu programmieren.

Habe mal einen Excelauszug angehängt. Hoffe es wird dadurch verständlich was ich bezwecken will.

Unbenannt.png
 Beschreibung:

Download
 Dateiname:  Unbenannt.png
 Dateigröße:  21.24 KB
 Heruntergeladen:  344 mal
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: 21.11.2016, 16:22     Titel:
  Antworten mit Zitat      
Hallo Tyraphis,

Ich kenne "Ansyscode" nicht. Der gepostete Code sah nach Matlab aus.

Zitat:
Er schreibt jede Zelle von 1:12 in flamez.

Ja, das stimmt schon. Aber der Code überschreibt flamez danach sofort wieder. Am Schluss ist "flamez" also ein Skalar. Ist das beabsichtigt?

Zitat:
flamez(1:12,1)

?
Zitat:
Nach jeder Iteration wird der Wert als Ansysvariable gespeichert.
Und wird das dann auch irgendwo gespeichert?

Und wozu dient:
Code:
   flamez=flame;

wenn es gleich in der nächsten Zeile wieder überschrieben wird:
Code:
   flamez=int2str(flame(i,j))
end

Ich verstehe die Bedeutung des Excel-Screenshots nicht.

Geht es darum sinnvollen Matlab-Code zu erstellen oder ist das Ziel das Erzeugen eines Text-Files, das von einem ganz anderen Interpreter mit mir unbekannter Syntax verarbeitet wird?

Verwirrt, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Tyraphis
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.09.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2016, 17:12     Titel:
  Antworten mit Zitat      
Zitat:
Ich kenne "Ansyscode" nicht. Der gepostete Code sah nach Matlab aus.

Ja es handelt sich um einen Matlabcode. Dieser wird compiliert und erzeugt dann den Code für Ansys.

Zitat:
Ja, das stimmt schon. Aber der Code überschreibt flamez danach sofort wieder. Am Schluss ist "flamez" also ein Skalar. Ist das beabsichtigt?


Ja, muss so sein wegen Ansys. Hätte es gerne mit kompletten Spalten gemacht aber das funktioniert unter Ansys leider nicht.

Mir geht es darum ob es möglich ist eine Schleife zu schreiben die bei erneutem durchlaufen die innere Schleife selbst "vermehrt".

in Etwa so:

Code:
for j=1:3
     for i=1:12
          x=x
end
end



für j=1 --> x
j=2 --> x und x-1
j=3 --> x , x-1 und x-2
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: 21.11.2016, 20:48     Titel:
  Antworten mit Zitat      
Hallo Tyraphis

Zitat:
Ja es handelt sich um einen Matlabcode. Dieser wird compiliert und erzeugt dann den Code für Ansys.

Bitte äußere Dich mal dazu, dass die Zeilen:
Code:
   flamez=flame;
    flamez=int2str(flame(i,j))

so überflüssig aussehen. Ich kann mir nicht vorstellen, dass dies in irgendeiner Programmiersprache etwas Sinnvolles macht. Hast Du meinen Einwand zumindest wahrgenommen und kannst ihn irgendwie entkräften?

Zitat:
Mir geht es darum ob es möglich ist eine Schleife zu schreiben die bei erneutem durchlaufen die innere Schleife selbst "vermehrt".


Du kannst doch die for j-Schleife einfach nach innen ziehen, oder? Dann wird dieser Block mehrfach ausgeführt.

Code:
   for i=1:12
    for j = 1:3
      metalini=1+(j-1)+(i-1);
      flamez=flame;
      flamez=int2str(flame(i,j))
    end
  end

Vielleicht müsste man dann noch etwas mit dem j-Index anpassen.

Das ist allerdings wildes Raten von mir! Ich verstehe nicht, was der Code tun soll.

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.