Die Berechnung der Standardabweichung der Winkel?

So, ich bin auf eine Anwendung, die Kompass-Winkel (in Grad). Ich habe es geschafft, um zu bestimmen, die Berechnung des Mittelwerts der Winkel, durch den folgenden (gefunden bei http://en.wikipedia.org/wiki/Directional_statistics#The_fundamental_difference_between_linear_and_circular_statistics) :

 double calcMean(ArrayList<Double> angles){
      double sin = 0;
      double cos = 0;
      for(int i = 0; i < angles.size(); i++){
           sin += Math.sin(angles.get(i) * (Math.PI/180.0));
           cos += Math.cos(angles.get(i) * (Math.PI/180.0)); 
      }
      sin /= angles.size();
      cos /= angles.size();

      double result =Math.atan2(sin,cos)*(180/Math.PI);

      if(cos > 0 && sin < 0) result += 360;
      else if(cos < 0) result += 180;

      return result;
 }

Also ich bekomme meine mittlere/Durchschnittliche Werte korrekt, aber ich bekomme keine richtige Varianz/stddev Werte. Ich bin mir ziemlich sicher, ich werde Berechnung meine Varianz falsch, aber kann nicht denken, der eine richtige Weg, es zu tun.

Hier ist, wie ich bin, Berechnung der Varianz:

 double calcVariance(ArrayList<Double> angles){

      //THIS IS WHERE I DON'T KNOW WHAT TO PUT
      ArrayList<Double> normalizedList = new ArrayList<Double>();
      for(int i = 0; i < angles.size(); i++){
           double sin = Math.sin(angles.get(i) * (Math.PI/180));
           double cos = Math.cos(angles.get(i) * (Math.PI/180));
           normalizedList.add(Math.atan2(sin,cos)*(180/Math.PI));
      }

      double mean = calcMean(angles);
      ArrayList<Double> squaredDifference = new ArrayList<Double>();
      for(int i = 0; i < normalizedList.size(); i++){
           squaredDifference.add(Math.pow(normalizedList.get(i) - mean,2));
      }

      double result = 0;
      for(int i = 0; i < squaredDifference.size(); i++){
           result+=squaredDifference.get(i);
      }

      return result/squaredDifference.size();
 }

Während es der richtige Weg, um zu berechnen, Varianz, ich bin nicht, was ich verwenden soll. Ich nehme an, die soll ich verwenden, Arkustangens, aber die standard-Abweichung/Varianz-Werte scheinen aus. Hilfe?

EDIT:
Beispiel: Eingabe der Werte 0,350,1,0,0,0,1,358,9,1 Ergebnisse mit dem durchschnittlichen Winkel von 0.0014 (da die Winkel sind also nahe null), aber wenn Sie einfach tun, eine non-Winkel Durchschnitt, erhalten Sie 72...die ist Weg. Da ich nicht weiß, wie Sie zu manipulieren, einzelne Werte zu sein, was Sie sein sollten, die Varianz berechnet wird 25074, was sich in einer Standardabweichung von 158 Grad, das ist verrückt!! (Es sollten nur ein paar Grad), Was ich denke ich tun müssen, ist richtig " normalisieren einzelnen Werte, so kann ich die richtige Varianz/stddev Werte.

  • Ich wollte nicht analysieren voll, aber dieser code scheint zu müssen, Math.atan2(y,x)
  • Ich hatte dies ursprünglich (und haben es wieder zurück in jüngster Zeit) und die Ergebnisse sind die gleichen. Ich habe versucht die oben genannte Methode zusammen mit atan2 und die Ergebnisse, die ich bekommen sind die gleichen, die innerhalb von 12 oder 13 Größenordnungen.
  • EDIT: Sieht aus, wie mit der atan2-Adressen Chechulin post. Werde ich Bearbeiten, meine Frage.
InformationsquelleAutor snotyak | 2012-12-18
Schreibe einen Kommentar