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

Jährliche Berechnung per Bedingung mit Bezug auf Spalten

 

Pasha007

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 12:26     Titel: Jährliche Berechnung per Bedingung mit Bezug auf Spalten
  Antworten mit Zitat      
Hi,
Habe folgende Matrix mit 3 Spalten. 1. Spalte Jahr. zweite und dritte Rendite. Die angegeben Matrix ist nur ein kurzer Ausschnitt aus der Urspungsmatrix.

Code:

1990   0,0160957848725792   -0,0310403905811889
1990   -0,00536851100615706   -0,0310403905811889
1990   -0,0104896825562975   -0,0310403905811889
1990   -0,0245646276071016   -0,0310403905811889
1990   -0,000869917561825148   -0,0310403905811889
1991   0,00847518201666652   -0,0245646276071016
1991   0,00283647078742261   -0,0245646276071016
1991   0,00192017614889438   -0,0245646276071016
1991   0,00323046224984551   -0,0245646276071016
1991   0,00668211909567443   -0,0245646276071016
1991   -0,00316593266015868   -0,0245646276071016
1992   -0,000472583597017481   -0,0237792322238353
1992   -0,00816535554342903   -0,0237792322238353
1992   -0,0135814127637945   -0,0237792322238353
1992   0,0117617287629366           -0,0237792322238353
1992   0,00132534025417009   -0,0237792322238353


Wie schaffe ich das nun, dass er für jedes Jahr Spalte 2 > Spalte 3 rechnet und das zusammen zählt.

Code:
countTraffic=sum(Rendite(:,2)<Rendite(:,3));


Also praktisch automatisch nur FÜR JEDES JAHR diese Rechnung durchführen und mir jedes Jahr ein Ergebnis ausspucken.

Danke für alle Antworten. Smile


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.01.2013, 12:45     Titel:
  Antworten mit Zitat      
1. Enthalten deine Daten Kommata, statt Punkte.

2. Aufgabenstellung.
Es soll also, sobald die zweite Zeile größer ist, als die dritte, ein Zähler um eins erhöht werden? Für 1990 müsste also als Ergebnis 5 rauskommen.

Oder doch das, was bei dir in der code-zeile steht? Welches stimmt nun? Z2<Z3, oder Z2>Z3?

Unabhängig von der Unklarheit:
Du musst die erste Spalte deiner Matrix z.B. per unique vereinzeln. Somit hast du einen Vektor mit den Jahren.
Nun kannst du z.B. in einer for-Schleife über jedes Jahr die Summe berechnen. Die von dir gepostete Anweisung muss aber auf eine neu erstellte Teilmatrix angewendet werden. Oder der Doppelpunkt entsprechend ersetzt werden.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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: 14.01.2013, 13:04     Titel: Re: Jährliche Berechnung per Bedingung mit Bezug auf Spalte
  Antworten mit Zitat      
Hallo Pasha007,

Zitat:
Wie schaffe ich das nun, dass er für jedes Jahr Spalte 2 > Spalte 3 rechnet und das zusammen zählt.

Das verstehe ich nicht. Was bedeutet "Spalte 2 > Spalte 3 rechnen" und was wird dann zusammen gezählt?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Pasha007

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 13:10     Titel:
  Antworten mit Zitat      
1. Ja das mit dem Komma hat er einfach beim kopieren i-wie transformiert. Im Matlab stehen Punkte.

2. Nein, er soll einfach nur aufzählen wie oft im Jahr Spalte 2 kleiner als Spalte 3 ist.
Sozusagen countTraffic für das Jahr 1990 ist 0. Da keine der Renditen in Spalte 2 größer sind als die Renditen in Spalte 3.

Als Ergebnis hätten wir gerne eine Matrix die z.b. so aussehen könnte:

1990 0
1991 2
1992 0
...usw.

Wäre auch nicht so schlimm, wenn im Ergebnis das Jahr nicht drinsteht, sondern nur ein Vektor, der die Anzahl in chronologischer Reihenfolge angibt.

0
2
0
....usw.

Vielen Dank für deine Hilfe! Smile
 
Pasha007

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 13:14     Titel:
  Antworten mit Zitat      
edit: Im ersten Post habe ich geschrieben Spalte 2> Spalte 3, richtig ist natürlich wie im Code angegeben Spalte 2 < Spalte 3

@ Jan: Ziel ist die Häufigkeit wie oft ein Wert, pro Jahr, in Spalte 2 kleiner ist als in Spalte 3.
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.01.2013, 13:15     Titel:
  Antworten mit Zitat      
Pasha007 hat Folgendes geschrieben:

Als Ergebnis hätten wir gerne eine Matrix die z.b. so aussehen könnte:

1990 0
1991 2
1992 0
...usw.

Wäre auch nicht so schlimm, wenn im Ergebnis das Jahr nicht drinsteht, sondern nur ein Vektor, der die Anzahl in chronologischer Reihenfolge angibt.

0
2
0
....usw.


Dann probiere dich doch mal im Umsetzen mit den von mir oben geposteten Hinweisen.
1. aus Spalte 1 mittels unique eine neue Matrix mit den Jahren
2. for Schleife über diese neue Matrix
2.1 Jahr für Jahr berechnen -> evt. per neuer Matrix erstellen, die nur die Einträge des jeweiligen Jahres enthält
2.2 vergleich und Summenbildung
2.3 Ergbnismatrix mit [Jahr, Ergebnis]
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Pasha007

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 13:39     Titel:
  Antworten mit Zitat      
@Martina: Vielen Dank erstmal für deine Hilfe!
Verstehe ich aber nicht so ganz... Was bringt mir ein neuer Vektor nur mit den Jahren. ( Mit dem Befehl unique schneiden wir doch einfach die Jahre aus?)

Versteh auch nicht was die for-Schleife über den neue Matrix bezwecken soll...

Könntest du vlt. zur Verdeutlichung beispielhaft ein Code darstellen Shocked
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 14.01.2013, 14:02     Titel:
  Antworten mit Zitat      
Pasha007 hat Folgendes geschrieben:
@Martina: Vielen Dank erstmal für deine Hilfe!
Verstehe ich aber nicht so ganz... Was bringt mir ein neuer Vektor nur mit den Jahren. ( Mit dem Befehl unique schneiden wir doch einfach die Jahre aus?)

Deine obige Codezeile erledigt ja grundsätzlich schon das, was du willst, bis auf den kleinen unterschied, dass du nicht über alle Zeilen (Doppelpunkt), sondern über bestimmte Zeilen summieren willst.

Du also brauchst also zuerst einen Vektor, welcher die einzelnen zu unterscheidenden Elemente (hier Jahre) enthält.
Code:
B = unique(Rendite(:,1));


Pasha007 hat Folgendes geschrieben:

Versteh auch nicht was die for-Schleife über den neue Matrix bezwecken soll...

Nun möchtest du pro Jahr ( B(index) == Rendite(:,1) ) die Elemente aus der Rendite-Matrix rausfischen, musst also den Index kennen.
Code:
for indB =1:size(B,1)
    C = Rendite(:,1) == B(indB )
end
 


Dann entsprechend der obigen Bedingung summieren.
Code:
for indB =1:size(B,1)
    C = Rendite(:,1) == B(indB );
    countTraffic = sum(Rendite(C,2) <  Rendite(C,3) );
end
 


Dann noch in die richtige Darstellung bringen:
Code:

countTraffic = [];
B = unique(Rendite(:,1)); %Jahre vereinzelt
for indB =1:size(B,1)
    C = Rendite(:,1) == B(indB ); %Wahrheitsmatr.
    countTraffic = [countTraffic ; B(indB ), sum(Rendite(C,2) <  Rendite(C,3) )];
end
 

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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: 14.01.2013, 16:12     Titel:
  Antworten mit Zitat      
Hallo Pasha007,

Jetzt habe auch ich es langsam begriffen.
Code:
match = sum(Rendite(:,2) < Rendite(:,3));
years = Rendite(1, 1):Rendite(end, 1);
allYears = histc(Rendite(:, 1), years);
matchYears = histc(Rendite(match, 1), years);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Pasha007

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2013, 17:44     Titel:
  Antworten mit Zitat      
@Martina: Genauso meine ich das! Vielen Dank, hast mir sehr weitergeholfen! Very Happy Very Happy Very Happy
 
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.