Calcul de la Déviation Standard & la Variance de C++
donc j'ai posté quelques fois auparavant, et mes problèmes ont été assez vague
j'ai commencé le C++, cette semaine, et ont été faire un petit projet
donc je suis en train de calc déviation standard & variance
mon code charge un fichier de 100 entiers et les mettre dans un tableau, les compte, les cvac moyenne, somme, var et sd
mais je vais avoir un peu de mal avec la variance
je reçois un grand nombre - j'ai le sentiment que ça à faire avec son calcul
ma moyenne et de la somme sont ok
de l'aide ou des conseils?
NB:
Acclamations,
Jack
using namespace std;
int main()
{
int n = 0;
int Array[100];
float mean;
float var;
float sd;
string line;
float numPoints;
ifstream myfile(“numbers.txt");
if (myfile.is_open())
{
while (!myfile.eof())
{
getline(myfile, line);
stringstream convert(line);
if (!(convert >> Array[n]))
{
Array[n] = 0;
}
cout << Array[n] << endl;
n++;
}
myfile.close();
numPoints = n;
}
else cout<< "Error loading file" <<endl;
int sum = accumulate(begin(Array), end(Array), 0, plus<int>());
cout << "The sum of all integers: " << sum << endl;
mean = sum/numPoints;
cout << "The mean of all integers: " << mean <<endl;
var = ((Array[n] - mean) * (Array[n] - mean)) / numPoints;
sd = sqrt(var);
cout << "The standard deviation is: " << sd <<endl;
return 0;
}
Dans
Vous devriez utiliser des doubles au lieu de float
(Array[n] - mean)
n'est pas n
un de plus que le nombre d'éléments que vous avez lu? Aussi, while (!myfile.eof())
est presque toujours tortVous devriez utiliser des doubles au lieu de float
“
devrait être "
OriginalL'auteur Jack | 2015-10-21
Vous devez vous connecter pour publier un commentaire.
Que les autres de répondre par cheval correctement l'indique, vous aurez à utiliser une boucle pour calculer la variance sinon la déclaration
seront il suffit de considérer un seul élément du tableau.
Seulement une amélioration de fer à cheval est suggéré code:
Votre somme fonctionne bien, même sans l'aide de la boucle parce que vous êtes à l'aide de accumuler fonction qui dispose déjà d'une boucle à l'intérieur, mais ce qui n'est pas évident dans le code, prendre un coup d'oeil à l'équivalent comportement de accumuler pour une compréhension claire de ce qu'il fait.
Remarque:
X ?= Y
est court pourX = X ? Y
où?
peut être n'importe quel opérateur.Vous pouvez également utiliser
pow(Array[n] - mean, 2)
de prendre la place au lieu de multiplier par lui-même en le rendant plus rangé.techniquement il n'y a pas de différence entre le pour et la while boucles (à l'exception de la syntaxe), mais en général, quand vous avez besoin de: (1) l'initialisation d'une variable avant de commencer la boucle, (2) une augmentation de la variable à la fin de la boucle, puis (3) pour vérifier une condition de le réitérer; puis sur pour rend le code beaucoup plus lisible et garantit également que vous n'avez pas oubliez l'un de ces trois.
OriginalL'auteur Ahmed Akhtar
Votre calcul de l'écart est en dehors de la boucle et par conséquent c'est uniquement basée sur la
n== 100 value.
Vous avez besoin d'une boucle supplémentaire.Vous avez besoin:
Jason: oui, c'est vrai, mais Ahmeds solutions maintenant elle n'en résout très bien
Il est toujours bon de corriger vos fautes de frappe pour quelqu'un d'autre qui lit le code.
la boucle doit commencer avec
n=0;
pour accueillir le premier indice du tableau. "C'est toujours bon de corriger vos fautes de frappe pour quelqu'un d'autre qui lit le code. – Jason"Akhtar. Changé, thx
OriginalL'auteur horseshoe
Deux méthodes simples pour calculer la Déviation Standard & de la Variance dans le C++.
OriginalL'auteur D.Zadravec
Voici une autre approche à l'aide de
std::accumulate
mais sans l'aide depow
. En outre, nous pouvons utiliser une fonction anonyme pour définir comment calculer l'écart après nous calculons la moyenne. Notez que ce calcule la neutralité variance de l'échantillon.Un exemple d'utilisation de cette fonction:
OriginalL'auteur rayryeng
Plutôt que d'écrire des boucles plus, vous pouvez créer un la fonction de l'objet de passer à
std::accumulate
pour calculer la moyenne.Tant que nous y sommes, nous pouvons utiliser std::istream_iterator pour faire le chargement d'un fichier, et std::vector parce que nous ne savons pas combien de valeurs il y a au moment de la compilation. Ce qui nous donne:
OriginalL'auteur Caleth