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 funktioniert nicht richtig

 

Konni_R
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 13:31     Titel: Verschachtelte For-Schleife funktioniert nicht richtig
  Antworten mit Zitat      
Hallo zusammen,

Da ich nicht so die ganz große Leuchte in Matlab bin, hoffe ich auf eure Hilfe:

Ich hab ein Problem mit einem Fetzen Code, der einfach nicht so will wie ich. Das Problem liegt im letzten Teil, der die davorigen habe ich zum besseren Verständnis mit hinzugefügt.

Code:

%% Teil 1: Berechnung lambda

lambda = zeros(length(L),length(a)); %Array für lambda

for i=1:length(L),
    for j = 1:length(a),
        lambda(i,j) = 10^(a(j)-log10(L(i)));  %Doppelschleife für die Parameter Auslage und Filter -> für jedes a(j) und jedes L(i) gibts ein Lambda(i,j)
    end  
end

%% Teil2: Berechnung Schichtmächtigkeiten

for i=1:(length(depth)-1),
    m(i,:)=depth(i+1)-depth(i);
end


%% Teil 3.1: Berechnung T(i,j,k)
T=zeros(length(L),length(a),length(rho)); %Array für T

for i=1:(length(L)),
    for j=1:length(a),
        T(i,j,length(rho)) = rho(length(rho)); %T der letzten Schicht ist immer letztes rho
    end
end

%%Teil 3.2
for i=1:length(L),
    for j=1:length(a),
        for k=length(rho):1,
            T(i,j,k-1) = (T(i,j,k)+rho(k-1)*tanh(lambda(i,j)*(m(k-1))))/(1+T(i,j,k)*tanh(lambda(i,j)*(m(k-1))));
        end
    end
end
 



Also um es schrittweise durchzugehen.

Teil 1:
lambda(i,j) ist von a und L abhängig. D.h. für jedes a mit jedem L soll es einen Wert geben. Das Ergebnis ist dann ein 2D Matrix. -> funktioniert

Teil 2: Lediglich ein Zwischenschritt um von Tiefen auf Mächtigkeiten zu kommen. -> funktioniert

Teil 3.1: T(i,j,k=max) soll rho(k=max) sein. Da es der Ausgangswert für eine rekursive Berechnung sein soll für die darunterliegenden T Werte
-> funktioniert, heraus kommt eine 3D Matrix, bei der nur die letzte Ebene der z-Dimension einen Wert hat und die Werte der anderen Ebenen null sind.

Teil 3.2:
Jetzt sollen die anderen T-Werte für jedes lambda(i,j) und jedes m(k) rekursiv berechnet werden. Ein Fehler tritt nicht auf, jedoch sieht die Matrix genauso aus wie vor diesem Schritt. Wenn ich statt diesen Schleifen einfach mal die Formel seperat mit manuell eingesetzten Indizes einfüge, so funktioniert es. Also muss der Fehler irgendwie an den Schleifen liegen, jedoch weiss ich nicht wo.


Ich hoffe auf eure Hilfe Wink

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2012, 13:40     Titel:
  Antworten mit Zitat      
Hallo,

auf den ersten Blick erstaunt mich
Code:


Sollte das nicht eher
Code:

heißen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konni_R
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 13:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

T soll ja für k rekursiv berechnet werden. D.h. im Prinzip fange ich bei k=max an, das dann gleich rho(k) ist und der erste richtige Berechnungsschritt ist dann T(i,j,k=max-1).

Oder hab ich da ein Denkfehler drin?

Grüße,
Konstantin
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: 01.11.2012, 13:59     Titel:
  Antworten mit Zitat      
dann muss die schrittweite mit angegeben werden glaub ich
Code:

for k=length(rho):-1:1,
 
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 14:01     Titel:
  Antworten mit Zitat      
Zitat:
for k=length(rho):-1:1

Veruschs mal damit.
Private Nachricht senden Benutzer-Profile anzeigen
 
Konni_R
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 14:08     Titel:
  Antworten mit Zitat      
Nein, geht leider nicht Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 14:25     Titel:
  Antworten mit Zitat      
Kommt mit dem geänderten Schleifenkopf eine Fehlermeldung?

Mit dem alten Schleifenkopf hat sich nichts geändert, weil wie schon erwähnt keine Schrittweite angegeben wurde und deswegen gar nicht in die Schleife gesprungen wurde (k=10:1 ein z.B. leeres Array).

Mit dem neuen Kopf würde ich eine Fehlermeldung erwarten,
du greifst auf das Element T(i,j,k-1) zu, wann dann im Fall k=1 0 wird. Hier sollte etwas wie
Zitat:
"??? Subscript indices must either be real positive integers or logicals. "

kommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Konni_R
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 14:57     Titel:
  Antworten mit Zitat      
Nein kommt gar nichts. Aber hast Recht, muss dann :2 am Ende stehen. Ändert aber leider auch nichts am Problem.

edit:
Also ich hab jetzt nochmal was anderes versucht. Und zwar erstmal die innere Schleife mit i=1 und j=1 getestet. Die funktioniert soweit.

Dann wieder zweite Schleife für i:length(L) und j=1 eingefügt und es geht immernoch. Dasselbe auch mit nur zwei Schleifen für j=length(a) und i=1.

Also auch die dritte Schleife wieder rein und es geht alles, obwohl es genauso aussieht wie vorher Shocked

Manchmal werd ich aus dem Programm nicht schlau Wink

Vielen Dank nochmal alle für ihre Tipps Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich werde leider aus deinen Erläuterungen nicht schlau.

Was ist der aktuelle Code? Was funktioniert daran nicht wie gewünscht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Konni_R
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 31.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2012, 19:03     Titel:
  Antworten mit Zitat      
Der aktuelle Code ist genau der, wie er oben steht. Nur jetzt funktioniert er nun auf einmal, nachdem ich schrittweise den Code neu geschrieben habe. Bis auf das k halt, dass jetzt nur noch bis 2 läuft. Wenn ich es bis 1 laufen lasse, kommt jetzt auch auch ein Fehler. Woran es jetzt gelegen hat kann ich nicht sagen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2012, 20:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Der aktuelle Code ist genau der, wie er oben steht.

Das kann ich mir ehrlich gesagt nicht vorstellen. z.B. wirst du die Schleife mit dem Vorschlag von Winkow angepasst haben.

Zitat:
Wenn ich es bis 1 laufen lasse, kommt jetzt auch auch ein Fehler.

Was nicht weiter verwunderlich ist, siehe Kommentar von tschun.

Grüße,
Harald
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: 02.11.2012, 15:08     Titel:
  Antworten mit Zitat      
Hallo Konni_R,

Immer, wenn Du im Forum etwas wie "kommt ein Fehler" im Forum schreibst, ist es wichtig, auch die komplette Fehlermeldung zu posten. Ansonsten muss man für eine Antwort zu viel raten. Und geratene Antworten können hinderlicher sein als gar keine Antworten.

Bitte poste nochmals den aktuellen Code und die vollständige Fehlermeldung.

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.