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

Fließkommazahlen in Matrix, Spalteneinträge addieren

 

Stutzi
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2008, 22:31     Titel: Fließkommazahlen in Matrix, Spalteneinträge addieren
  Antworten mit Zitat      
Hallo,
ich verzweifel langsam.
Bin noch frisch am Matlab programmieren.
Nun habe ich eine Matrix eingelesen und möchte die Spalteneinträge addieren und diese anschließend durch die Anzahl der Zeilen teilen.
Dazu wollte ich zwei verschachtelte Schleifen benutzen:

Code:
r    % Matrix
[B,K]=size(r)
for m=1:K;
    for i=1:B;
        Summe(i,m)=sum(r(i,m))
        i+1;
    end
    r_H(m)=Summe(m)/B;
    m+1;
end


Das Ergebnis stimmt aber nicht.
Was ist daran falsch. Wäre euch sehr verbunden, da ich ehct wahnsinnig werde mit so einem einfach Porblem.

Edit: Code-Umgebung repariert.
mfg nschlange
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 23.08.2008, 23:54     Titel:
  Antworten mit Zitat      
Hi,

erstmal kannst Du das i+1 und m+1 weglassen, das hat hier keine Funktion. Wenn Du das Semikolon weglassen würdest, bekämst Du nur das aktuelle i bzw. m +1 angezeigt. Die Inkrementierung der Variablen um 1 je Durchlauf ist schon implizit im Schleifenkopf angegeben. Für ein anderes Inkrement kannst Du schreiben:
Code:

Jetzt würde k in jedem Durchlauf um 2 erhöht.

Dann machst Du
Code:
Summe(i,m)=sum(r(i,m))

i und m sind ja feste Werte, d.h.
Code:
berechnet immer nur die Summe eines Elementes der Matrix r.
Du legst hier nur eine Kopie von r in Summe ab.

Und hier
Code:
r_H(m)=Summe(m)/B;
greifst Du auf eine Matrix (Summe hat ja zwei Dimensionen) mit nur einem Index zu, das bedeutet 'linear indexing'. Sieh Dir das mal in der Hilfe an.

Edit: Rechtschreibfehler...
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"

Zuletzt bearbeitet von nschlange am 24.08.2008, 12:14, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Stutzi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 11:01     Titel:
  Antworten mit Zitat      
Moin nschlange,

danke für die schnelle Antwort und Analyse.
Ich habe nun einen anderen weg ausprobiert, aber bekomme für mein Matrix (170 Zeilen und 30 Spalten) teilweise Inf Lösungen heraus.
Code:

r
[B,K]=size(r)

% Berechnung historischer Renditen - Erwartungswert
for m=1:K;
    Summe(m)=sum(r(1:B,m));
    r_H(m)=Summe(m)./B;
end
r_H

Woran kann das liegen? In der Matrix sind keine NaN enthalten.

Viele Grüße,
Stutzi
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.08.2008, 11:15     Titel:
  Antworten mit Zitat      
Hi,

wenn in r NaN's enthalten wären, dann auch im Ergebnis.
Sind in r vielleicht Inf's? Von welcher Größenordnung sind die Zahlen in r?
Das könnte auch passieren, wenn B = 0 wäre, aber nicht in diesem Codeschnipsel.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Stutzi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 11:34     Titel:
  Antworten mit Zitat      
Hi,
in r sind weder NaN noch Inf enthalten.
Ich musste anfangs in der eingelesenen Matrix x die NaNs in Nullen ändern. Nun habe ich daraus die Matrix r gemacht, in der anstelle der NaNs Nullen stehen.
Beispiel Spalte 1:
Diese Spalte hat 170 Einträge, wovon 24 am Anfang Nullen sind.
Wende ich size(r) nur auf diese Spalte an, sagt er mir, dass ich 146 Einträge (B) und eine Spalte habe.
Nehme ich nun meinen Codeschnipsel, dann kommt auch das richtige Ergebnis heraus und es entsteht kein Inf.

Nun erweitere ich um die zweite Spalte.
Code:

[B,K]=size(r)
B=170
K=2
 

Bei jetziger Anwendung des Codes ist das Ergebnis für Spalte 1 Inf.
Muss an der Summenbildung liegen:
Code:

Summe(m)=sum(r(1:B,m))
 

Oder am B, da das für die Spalten unterschiedlich ist. Macht das Sinn?
Viele Grüße,
Stutzi
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.08.2008, 11:49     Titel:
  Antworten mit Zitat      
Kannst Du mal ein Beispiel geben, wo das Auftritt?

Code:
clear all;
clc;
r=[0 0   0 0;
   1 2   3 4;
   1 2 100 4;
   2 3   4 5;
   5 5 500 5];
[B,K]=size(r)

% Berechnung historischer Renditen - Erwartungswert
for m=1:K
    Summe(m)=sum(r(1:B,m));
    r_H(m)=Summe(m)./B;
end
r_H
klappt.

Das gleiche Ergebnis bekommst Du übrigens auch so:
Code:

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Stutzi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 12:05     Titel:
  Antworten mit Zitat      
Hi nschlange,

da meine Matrix so groß ist, habe ich nicht sofort gesehen, dass in der Spalte, in der die Nullen sind, der letzte Wert vor den normalen Einträgen ein Inf ist. Und das wird der Grund sein, warum am Ende ein Inf steht.
Sorry, aber das ist mir vorher nicht aufgefallen.

Viele Grüße Stutzi
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 24.08.2008, 12:09     Titel:
  Antworten mit Zitat      
Hey,

dafür gibt es die Befehle
Code:

Damit kannst Du bequem auf diese Werte prüfen und sie gegebenenfalls ersetzen. Dann wird auch keiner übersehen. Wink
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Stutzi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 23.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2008, 12:31     Titel:
  Antworten mit Zitat      
Hey,

danke für den Tipp.
isnan habe ich bereits benutzt. isinf kann ich durch deinen Tipp genauso gut ausnutzen.
Nun funktioniert es so, wie ich es will.
Nochmal danke und bis zur nächsten Schwierigkeit.
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 - 2024 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.