l'écart type de la taille de la matrice de java
Hé les gars, je vais avoir de la difficulté à trouver comment calculer la norme de la divination d'un tableau en Java. Comme vous pouvez le voir j'ai déjà calculé la moyenne, et je sais qu'à la fin je vais le diviser par la taille de l'échantillon moins 1 (n-1) et le carré de ce nombre. Le problème que je vais avoir est de savoir comment prendre le numéro de tous et de calculer dans quelle mesure il est loin de la moyenne, alors le carré de ce nombre. Je sais que je pourrais le faire tous les numéros de la série de données séparément, mais il y a un moyen plus facile. Toute aide serait appréciée, voici mon code.
public class CalculateArray
{
public static void main(String[] args)
{
int [] numbers = new int[]{1,2,3,4,5,6,7,8,9};
int sum = 0;
int max = 0;
int min = numbers[0];
double sd = 0;
for(int i=0; i<numbers.length; i++)
{
sum = sum + numbers[i];
}
double average = sum / numbers.length;
System.out.println("Average value is : " + average);
for(int i=0; i<numbers.length; i++)
{
if(numbers[i] > max)
{
max = numbers[i];
}
}
System.out.println("max number is : " + max);
for(int i=0; i<numbers.length; i++)
{
if(numbers[i] < min)
{
min = numbers[i];
}
}
System.out.println("min number is : " + min);
for (int i=0; i<numbers.length;i++)
{
//this is where im having problems
sd = ???
}
double standardDeviation = math.sqrt(sd/(numbers.length-1));
System.out.println("The standard deviation is : " + standardDeviation);
}
}
Qu'en est
std += pow(average - numbers[i], 2);
?
OriginalL'auteur user1905170 | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Pour calculer la distance d'un nombre est de la dire que vous utilisez le
-
de l'opérateur. Pour le calcul de la place, vous pouvez utiliserMath.pow
. Donc, étant donné que vous avez déjà calculé laaverage
plus tôt dans le programme:Par la manière, la façon de calculer la moyenne est actuellement interrompue. Vous devez définir
sum
comme double, non pas commeint
.Math.abs(numbers[i] - average)
, sinon il générer negetive nombre quandnumber[i]<avarage
.vous n'avez pas besoin de calculer la valeur absolue. a2 = |a|2.
Et à la fin vous aurez envie de diviser la somme des carrés des écarts par le nombre de points de données. Je pense que c'est une racine de la moyenne des carrés; dans les conditions ci-dessus, rms = sd / numéros.longueur
selon http://www.mathsisfun.com/data/standard-deviation-formulas.html
l'OP a déjà qui a couvert.
OriginalL'auteur Joni
En plus des deux pass algorithme décrit par d'autres (calcul des moyennes dans le premier passage et std dev dans le prochain) s'il vous plaît voir ce lien pour un exemple de la façon dont cela peut être fait en un seul passage. L'algorithme est le suivant:
Mise à JOUR
Ne pas le faire. Comme Joni explique dans son commentaire ci-dessous il y a un risque élevé d'erreur lors de l'application de la présente est un programme d'ordinateur. Pour une écurie algorithme en ligne, Joni nous oriente vers cette article de Wikipédia, qui, comme mentionné a été soigneusement analysé.
merci pour l'entrée. C'est fondamentalement une erreur de dépassement de capacité?
Le problème est surtout avec
sq_sum / n - mean * mean
: il calcule la différence de deux grandes près en nombre égal. L'annulation des chiffres signifie que l'erreur relative va jusqu'à la toiture - vous pouvez même vous retrouver avec un écart négatif. Wikipédia a pas mal de page sur ce type de problème numérique: en.wikipedia.org/wiki/Loss_of_significanceMerci @Joni, j'ai besoin d'apprendre à ne pas croire tout ce que j'ai lu sur internet. Je mets à jour ma réponse à votre commentaire
Eh bien, pour l'honneur de votre source, ils ne vous avertir: "Malheureusement, le résultat sera erroné lorsque le tableau contient un grand nombre". Il y a un mieux comportés 1 passe de l'algorithme: en.wikipedia.org/wiki/...
OriginalL'auteur Miserable Variable
pour trouver la moyenne, divisez
2k
par le nombre de termes que vous avez.Si la moyenne des termes est k. 😀
OriginalL'auteur user4266768