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

Ergebnisse einer for-Schleife werden nicht übernommen

 

cabvstmac
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2011, 20:49     Titel: Ergebnisse einer for-Schleife werden nicht übernommen
  Antworten mit Zitat      
Hallo zusammen,

ich komme beim Berechnen einer etwas komplexeren for-Schleife nicht weiter...

Es geht um die Berechnung dreier Größen - tau_RV, ABZ_sim und DNE_sim. tau_RV ist eine vierdimensionale Matrix, die beiden anderen sind dreidimensional. Da die Größen voneinander abhängen, müssen sie gleichzeitig berechnet werden, deshalb auch dieser kranke Term Smile
Damit Matlab schneller ist, sind die Dimensionen der Größen zunächst durch Nullmatrizen definiert. Die Nullen sollen später durch die Ergebnisse der for-Schleifen überschrieben werden.
Es müssen zwei for-Schleifen gerechnet werden (eine mit t==2, eine für den Rest), da z.T. auf Werte zurückgegriffen wird, die außerhalb der Matrix liegen.

Hier der Code:

Code:
DNE_sim=zeros(dauer,anzahl,4);
DNE_2008=19974/VPI_2008*100;   % liegt außerhalb der Matrix (nötig in t==2)
DNE_2009=20002/VPI_2009*100;   % 1. Zeile der DNE_sim-Matrix
DNE_sim(1,:,:)=DNE_2009;
ABZ_sim=zeros(dauer,anzahl,4);
ABZ_2009=38653000000/VPI_2009*100;   % 1. Zeile der ABZ_sim-Matrix
ABZ_2008=38240000000/VPI_2008*100;   % liegt ebenfalls außerhalb
ABZ_sim(1,:,:)=ABZ_2009;
tau_RV=zeros(dauer,anzahl,4,101);
tau_RV_2008=.199;    % außerhalb der Matrix
tau_RV(1,:,:,:)=.199;  % 1. Zeile der tau_RV-Matrix
for j=1:101
    for n=1:4
        for k=1:1000
            for t=2
                tau_RV(t,k,n,j)=(Z_R_sim(t,k,n,j)+Z_KV_sim(t,k,n,j)+Z_Reha_sim(t,k,n)+Z_Admin_sim(t,k,n)-ZBZ_sim(t,k,n))/(DBE_sim(t,k,n)*EWT_sim(t,k,n)+0.48*DNE_2009*AL_sim(t,k,n)... +(ABZ_sim(t-1,k,n)/tau_RV(t-1,k,n,j))*(DBE_sim(t-1,k,n)/DBE_2008));
                ABZ_sim(t,k,n)=max(ABZ_sim(t-1,k,n)*(DBE_sim(t-1,k,n)/DBE_2008)*(tau_RV(t,k,n,j)/tau_RV(t-1,k,n,j))-340000000,0);
                DNE_sim(t,k,n)=DBE_sim(t,k,n)*(1-tau_RV(t,k,n,j)*0.5-0.188);                
            end
            for t=3:52
                tau_RV(t,k,n,j)=(Z_R_sim(t,k,n,j)+Z_KV_sim(t,k,n,j)+Z_Reha_sim(t,k,n)+Z_Admin_sim(t,k,n)-ZBZ_sim(t,k,n))/(DBE_sim(t,k,n)*EWT_sim(t,k,n)+0.48*DNE_sim(t-1,k,n)... *AL_sim(t,k,n)+(ABZ_sim(t-1,k,n)/tau_RV(t-1,k,n,j))*(DBE_sim(t-1,k,n)/DBE_sim(t-2,k,n)));
                ABZ_sim(t,k,n)=max(ABZ_sim(t-1,k,n)*(DBE_sim(t-1,k,n)/DBE_sim(t-2,k,n))*(tau_RV(t,k,n,j)/tau_RV(t-1,k,n,j))-340000000,0);
                DNE_sim(t,k,n)=DBE_sim(t,k,n)*(1-tau_RV(t,k,n,j)*0.5-0.188);
            end
        end
    end
end
tau_RV(tau_RV<0)=0;


Die Berechnungen für tau_RV und DNE_sim laufen wunderbar.
Das Problem liegt bei ABZ_sim. Am Ende der Schleife sind nur die Einträge der 1. Zeile ungleich null (wie oben definiert). Der Rest bleibt null. Um zu überprüfen, ob die Formel für ABZ_sim stimmt, habe ich einen konditionierten Breakpoint bei t==5 gesetzt.
Die Formel scheint zu stimmen, denn dann werden die Werte der ersten fünf Zeilen wie gewünscht berechnet. Wird die Schleife jedoch zu Ende gerechnet, werden alle zuvor berechneten Werte wieder gleich null.
Irgendwie scheinen die Ergebnisse am Ende der Schleife also nicht in die Nullmatrix übertragen zu werden.

Ich habe keine Ahnung, wo mein Fehler liegt. Weiß vielleicht jemand Rat?

Danke schon mal!

VG,
cabvstmac
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: 08.09.2011, 12:50     Titel: Re: Ergebnisse einer for-Schleife werden nicht übernommen
  Antworten mit Zitat      
Hallo cabvstmac,

Es ist kaum möglich das Problem zu finden. Wir können den Code nicht laufen lassen, da wir die Daten nicht haben. Zudem ist der Code unübersichtlich, was -wie Du merkst- das Debuggen deutlich erschwert. Es ist empfehlenswert, ein Programm aus einfach zu debuggenden Unterfunktionen zusammenzusetzen, so dass sich Fehler leichter auffinden lassen. Das macht zwar das Programm etwas langsamer, aber was bedeuten schon 0.5 Sekunden Laufzeit, wenn man Tage mit Debuggen zubringt...

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.