Verfasst am: 07.09.2011, 20:49
Titel: Ergebnisse einer for-Schleife werden nicht übernommen
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
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?
Verfasst am: 08.09.2011, 12:50
Titel: Re: Ergebnisse einer for-Schleife werden nicht übernommen
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
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.