Verfasst am: 12.10.2013, 11:16
Titel: Fehler bei logical Indexing
Hallo Zusammen,
ich habe einen logical index Fehler der wohl mit einer Schleife zusammenhängt, da der Code funktioniert wenn ich das ganze manuell durchführe.
Folgendes soll passieren:
Es wird eine Matrix die Spaltenweise mittels cumsum kumuliert wird auf Werte in den Spalten untersucht. Wird dabei eine Symmetrische Grenze (+/- 0.05) getroffen oder überschritten soll in der jeweiligen Spalte ab i+1 neu kumuliert werden.
Das komische ist, dass es für die erste Spalte perfekt funktioniert aber nicht für die anderen Spalten und dass für die anderen Spalten der ermittelte Spaltenindex aus Spalte eins verwendet wird. Es soll aber jede Spalte einen individuellen Spaltenindex haben der in einem Zeilenvektor gespeichert wird.
for i=1:T
%Exposure
%Exposure per currency per day: Days x Currencies
%Histweights_LCY und CurrencyMatrix werden vorbestimmt und sind definitiv fehlerfrei
EXP_Curr(i,:) = HistWeights_LCY(i,:) * CurrencyMatrix';
%rebalance all currencies
ifabs(Cum_Portf_EXP(i,1)) >= cut_off
EXP_Portf_reset = i;
end
%rebalance single currencies
%why does only pos eight not work??
CurrExpBreach = abs(Cum_Curr_EXP(i,:)) >= cut_off;
C(i,:) = logical(abs(Cum_Curr_EXP(i,:)) >= cut_off);
EXP_Curr_reset(1,logical(C(i,:))) = i + 1;
Ich denke dass ich so nicht indizieren kann, leider weiß ich aber nicht wie es richtig gemacht wird.
Mein Zeilen Vektor "EXP_Curr_reset" enthält am Anfang lauter Einsen, sobald in einer Spalte von "Cum_Curr_EXP" meine Grenze getroffen wird, soll in der entsprechenden Spalte in ""EXP_Curr_reset" der Zeilenindex die vorherige Zahl überschreiben (das passiert weiter unten im Code). Und dann soll bei der nächsten Iteration für die entsprechende Spalte in "Cum_Curr_EXP" ab dem in "EXP_Curr_reset" gespeicherten Zeilenindex bis zum Ende kumuliert werden. Es kann also durchaus vorkommen, dass innerhalb einer Iteration z.B.: Spalte 1 von Zeile 30-300 kumuliert wird, Spalte 2 von 1-300, Spalte 3 von 89-300, usw..
Du verwendest (vektor:end) als Index. Sollte da vielleicht ein i rein? Das würde erklären, warum es für die erste Spalte funktioniert, ansonsten aber nicht.
Gegenwärtig wird immer nur das erste Element von vektor berücksichtigt, was wohl nicht in deiner Absicht ist.
Grundsätzlich ist meine Empfehlung, zunächst mal funktionierenden, nicht ganz so "eleganten" Code zu schreiben. Wie man den Code dann schöner gestaltet, kann man sich danach immer noch überlegen.
Grüße,
Harald
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.