|
|
Wie berechnet man Cumulative Standard Deviation ohne 'for'? |
|
clustering_n00b |
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 23.09.2011, 16:51
Titel: Wie berechnet man Cumulative Standard Deviation ohne 'for'?
|
|
Hallo zusammen!
Habe ein ganz banales Problem für euch.
Ich die kumulative/progressive Standardabweichung, i.e. cumulative/progressive standard deviation berechnen, und zwar ohne die lästigen for-loops.
Mit for-loops habe ich es so gemacht:
Wie geht's denn ohne for-loops? Kann man es so ähnlich machen mit einer direkten Formel wie ich es für cummean gemacht habe?
Freue mich auf Ansätze
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 23.09.2011, 21:19
Titel:
|
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 24.09.2011, 07:45
Titel:
|
|
Hallo Harald!
Danke für deine Antwort!
Diesen Beitrag hatte ich schon gesehen, allerdings ist der Code nicht richtig
Beispiel:
x = [1 2 3 4 .... 10]
cummean = [1 1.5 2 2.5 ... 5.5]
Soweit ist alles richtig.
Für cumstd sollte jetzt (von Hand verifiziert):
[ 0.5000
0.8165
1.1180
1.4142
1.7078
2.0000
2.2913
2.5820
2.8723 ]
rauskommen.
Das tut es aber nicht
Sieht jemand den Fehler?
PS: Die for-Loop Lösung oben ist falsch. Richtig lautet es:
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.09.2011, 09:13
Titel:
|
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 24.09.2011, 11:03
Titel:
|
|
Hat funktioniert!!!
Vielen Dank!!
Aber wieso hat er anders skaliert? Mit einer anderen Skalierung (= falsche Formel) bekommt man ja einen falschen Wert?!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.09.2011, 18:17
Titel:
|
|
Hallo,
ich würde sagen, man bekommt unterschiedliche Werte. Beide Werte sind ein Maß für die Streuung der Daten.
Die Skalierung ist dieselbe wie in der Formel in Wikipedia.
Kann es sein, dass du eventuell "falsch" skaliert hast?
Grüße,
Harald
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 25.09.2011, 21:00
Titel:
|
|
Ok, ich hab's jetzt glaube ich begriffen
Nochmals vielen Dank!
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 29.09.2011, 12:39
Titel:
|
|
Ok, jetzt im Nachhinein habe ich was bemerkt...
Und zwar bekomme ich mit dem angegebenen Code auch negative Varianzen und dementsprechend komplexe Standardabweichungen
Da stimmt doch was nicht mit der Formel..
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.09.2011, 12:52
Titel:
|
|
Code-Beispiel dafür?
Grüße,
Harald
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 29.09.2011, 15:00
Titel:
|
|
Also die Funktion cumvalues sieht folgendermassen aus:
Beim folgenden Beispiel hat's gehappert:
Sieht jemand was falsch gelaufen ist?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 29.09.2011, 19:53
Titel:
|
|
Hallo,
wenn die Werte alle gleich sind, wären Varianz bzw. Standardabweichung beide 0. Bei numerischen Berechnungen die 0 genau zu treffen, ist nahezu unmöglich (und das ist im übrigen von der Programmiersprache unabhängig so). Beispiele:
In dem Link, den wir uns angeschaut haben, ist übrigens erwähnt, dass die Lösung aus numerischer Sicht nicht empfehlenswert ist.
Meine Empfehlung wäre eine kleine Anpassung des Codes:
Man muss sich allerdings darüber im klaren sein, dass es bei der Berechnung von im Vergleich zur Größe sehr kleine Varianzen (und 0 ist nunmal im Verhältnis zu allem *sehr* klein) zu Ungenauigkeiten kommen kann.
Grüße,
Harald
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 07:22
Titel:
|
|
Hm.. das erstaunt mich jetzt, dass MATLAB numerisch so ungenau ist.
Liegt der Fehler nicht immer um 0 herum? Also -0.14, -0.2, usw.
Aber nicht irgendwie -40 oder so?
Dänn wäre die Aufrundung auf 0 noch akzeptabel.
Sonst...
Macht es da nicht doch mehr Sinn die for-Schleifen zu benutzen?
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 09:00
Titel:
|
|
|
|
|
Hallo clustering_n00b,
MATLAB is so genau wie alle Programme, die die standardisierte IEEE754 Floating-Point-Arithmetik verwenden, also z.B. Fortran, C, C++, C#, Java, Basic, ... Siehe http://de.wikipedia.org/wiki/IEEE_754.
Die Benutzung von Schleifen ändert daran nichts.
CUMSUM verwendet genauso wie SUM einen 64-bit Akkumulator, der eine eingeschränkte Genauigkeit hat:
Zwar können moderne Prozessoren die Zwischenwerte auch in 80-Bit registern speichern, das wird aber z.B. nicht von den Microsoft MSVC compilern unterstützt. In der FEX gibt es eine funktion, um die Summe mit 64, ~72, 128 und 196 bit Genauigkeit zu berechnen: http://www.mathworks.com/matlabcentral/fileexchange/26800-xsum. Das ist für numerische Analysen wichtig, für den alltäglichen Gebrauch aber nicht. Die Nutzung von Floating Point Zahlen hat einfach nur eine begrenzte "Precision", und dadurch wird die "Accuracy" eines Algorithmus' beschränkt. Dies muss in jeder numerischen Software berücksichtigt werden.
Nebenbei sei bemerkt, dass dies sogar für die physikalische Realität gilt: Die Quantenmechanik stellt ebenfalls eine Begrenzung der "Precision" dar: Man kann z.B. keine Teilchen durch unendlich kleine Löcher schießen oder sie unbewegt an einem exakt bestimmten Ort festhalten. Die eingeschränkte "Precision" ist also nicht irgendwie besonders künstlich, sondern entspricht im gewissen Grad der physikalischen Natur.
Gruß, Jan
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 09:29
Titel:
|
|
Hallo,
ich möchte noch einmal betonen, dass dies unabhängig von der Programmiersprache so ist. Der Fehler wird relativ zum Quadrat der Größen, mit denen du rechnest, wahrscheinlich sehr klein sein - in der Größenordnung von 1e-14, was die Varianzen angeht.
Bei den Standardabweichungen dürfte der Fehler in der Größenordnung von 1e-7 relativ zu den Größen, mit denen du rechnest, sein.
Wenn du mit sehr großen Zahlen rechnest, werden also auch die Fehler sehr groß sein. Probiers mal mit:
Vorhersage: Fehler in Varianz bei 1e(2*50 - 14) = 1e86
Fehler in Standardabweichung bei 1e(50-7) = 1e43
Grüße,
Harald
|
|
|
clustering_n00b |
Themenstarter
Forum-Century
|
|
Beiträge: 129
|
|
|
|
Anmeldedatum: 05.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2011a, R2012b
|
|
|
|
|
|
Verfasst am: 01.10.2011, 16:13
Titel:
|
|
Ok... die technischen Details waren mir gar nicht bewusst.
Macht jetzt Sinn.
Ich habe deine max-Variante benutzt und es hat wunderbar geklappt
Etlichen Dank
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|