Verfasst am: 01.11.2012, 13:31
Titel: Verschachtelte For-Schleife funktioniert nicht richtig
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.
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.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
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.
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).
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. "
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...
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
Einstellungen und Berechtigungen
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
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.