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

Standardabweichung berechnen

 

nbafreak654
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2012, 16:22     Titel: Standardabweichung berechnen
  Antworten mit Zitat      
Hallo,

Ich habe folgendes Problem, also ich kann das arithmetische Mittel berechnen, aber ich weiss leider nicht wie man die Standardabweichung berechnet.

Das aritmetische Mittel:

Code:

N=100
X_avg=0
for i=1:N
  X_avg=X_avg+X(i);
end
X_avg=X_avg/N
 


Es waere sehr nett, wenn ihr mir helfen koenntet.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.01.2012, 17:56     Titel:
  Antworten mit Zitat      
Hallo,

dafür gibt es fertige Funktionen wie MEAN oder STD.

Falls du zu Übungszwecken diese Funktionen selbst schreiben sollst, kannst du dir die Formel für die Standardabweichung ja ergoogeln und dann entsprechend der Berechnung für den Mittelwert umsetzen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
nbafreak654
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 13:42     Titel:
  Antworten mit Zitat      
Danke, fuer die Antwort. Nur leider bin ich mir nicht sicher, wie ich den Code schreiben soll.

Also STD=
Code:

N=100
X_avg=0
for i=1:N
  X_avg=X_avg+X(i);
end
X_STD=((X_avg/N-X_avg)^2)/N)


Ich bin mir sicher, dass da irgendetwas falsch ist, aber was?

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2012, 13:52     Titel:
  Antworten mit Zitat      
Hallo,

du solltest dir folgende Gleichung vor Augen halten:
http://de.wikipedia.org/wiki/Standardabweichung#Definition
Zitat:
STD(X) = sqrt(VAR(X)) = sqrt( E(X²) - ( E(X) )² )


Du musst also im Grunde den Mittelwert der Daten und den Mittelwert der quadrierten Daten berechnen:

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
nbafreak654
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2012, 17:09     Titel:
  Antworten mit Zitat      
Also etwa so:
Code:

N=100
X_avg=0
for i=1:N
  X_avg=X_avg+X(i);
end
X_STD=sqrt((X_avg-X(i))^2/(n-1))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.01.2012, 21:04     Titel:
  Antworten mit Zitat      
Hallo,

x(i) beinhaltet hier den letzten Wert. Die letzte Zeile ist also nicht sinnvoll.

Ich versuchs nochmal:

Code:
STD(X) = sqrt(VAR(X)) = sqrt( E2 - E1² )


Eine for-Schleife, die dir E1 berechnet, hast du schon:
Code:
X_avg=0
for i=1:N
  X_avg=X_avg+X(i);
end


Jetzt brauchst du noch eine for-Schleife, die E2 = Mittelwert der Quadrate berechnet. Diese for-Schleife wird der ersten seeeehr ähnlich sein.

Das Einsetzen sollte dann wirklich kein Problem mehr sein.

Grüße,
Harald
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: 24.01.2012, 00:00     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich vermisse die alte Implementierung von std.m, bei der die Standardabweichung noch explizit formuliert war. Wenn man also noch auf Matlab 6.5 hat, würde sich dieser Thread wohl erübrigen.

Welche Möglichkeiten gibt es heraus zu bekommen, in welcher Version std.m reduziert wurde, falls man nicht alle Releases installiert hat?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
nbafreak654
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 22.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2012, 17:11     Titel:
  Antworten mit Zitat      
Hmm, also so:

Code:

N=100
X_avg=0
for i=1:N
  X_ STD=X_STD+(X(i)-X_avg)^2
end
X_STD=sqrt(X_STD/N-1)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.01.2012, 18:04     Titel:
  Antworten mit Zitat      
Hallo,

@ Jan: in 2008a geht es jedenfalls schon über VAR. Mir persönlich ist kein Weg bekannt herauszufinden, wann das geändert wurde. Wenn ein tieferes Interesse dahintersteckt, kann ich aber wohl jemanden kontaktieren, der es herausfinden kann.

@ nbafreak:
Du hast jetzt eine andere Formel genommen.
Natürlich brauchst du für X_avg den zuvor bestimmten Mittelwert, zudem Klammern um N-1.
In der for-Schleife würde ich noch einen Strichpunkt setzen.

Am Ende kannst du ja dein Ergebnis mit dem der MATLAB-Funktion STD vergleichen, um deine Implementierung auf Korrektheit zu überprüfen.

Grüße,
Harald
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: 25.01.2012, 02:16     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke für das Angebot. Ich kontaktiere regelmäßig TMW-Mitarbeiter und schlage vor eine Datenbank mit der kompletten List-of-Changes zu implementieren. Beim Upgrade auf ein neues Release und wenn man für mehrere Labore programmiert, die jeweils eine andere Matlab-Version benutzen, wäre das sehr hilfreich. Zur Zeit gibt es auch (zu) viele undokumentierte Änderungen des Verhaltens sogar bei elementaren Funktionen wie \ und STRCMP. Dies wäre in einer Datenbank ebenfalls gut aufzuheben.

Eine solche Liste wäre sehr einfach zu implementieren. Wenn TMW keinen groben Unfug treibt, müssen die Informationen auch bereits in irgendeiner Form vorliegen. Ohne eine solche Liste ist es schrecklich herauszufinden, wieso sich die Ergebenisse mit z.B. Matlab 2006a und 2010b unterscheiden. Eine winzige Datenbank könnte das aber schnell klären:
Code:
ShowChanges(depfun('myFunction'), '2006a', '2010b')


Ich schlage das schon seit ein paar Jahren vor. Leider wurde dann aber doch Trendy zuerst entwickelt. Vielleicht gab es dafür ja den größeren Bedarf...

Gruß, Jan
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 - 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.