Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

C++ Program: Standard Deviation ของ Grouped Data (Class Interval)

Grouped Data: มี Class Interval (ช่วงขอบเขต) และ Frequency (ความถี่) หา Standard Deviation

สูตร

Midpoint = (Lower + Upper) / 2
Mean = Σ(f×mid) / Σf
SD = √[ Σ(f×mid²) - Σf×Mean² ] / (Σf - 1)

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

float calc_mean(float mid[], int freq[], int n) {
    float sum = 0, freqSum = 0;
    for (int i = 0; i < n; i++) {
        sum += mid[i] * freq[i];
        freqSum += freq[i];
    }
    return sum / freqSum;
}

float calc_deviation(float lower[], float upper[], int freq[], int n) {
    float mid[n], sum = 0, freqSum = 0;
    for (int i = 0; i < n; i++) {
        mid[i] = (lower[i] + upper[i]) / 2;
        sum += freq[i] * mid[i] * mid[i];
        freqSum += freq[i];
    }
    float mean = calc_mean(mid, freq, n);
    float sd = sqrt((sum - freqSum * mean * mean) / (freqSum - 1));
    return sd;
}

int main() {
    float lower[] = {50, 61, 71, 86, 96};
    float upper[] = {60, 70, 85, 95, 100};
    int freq[] = {9, 7, 9, 12, 8};
    int n = 5;

    cout << calc_deviation(lower, upper, freq, n) << endl;
    return 0;
}

ผลลัพธ์

15.757

ตารางข้อมูล

ClassMidpointFreqf×midf×mid²
50-6055949527225
61-7065.57458.530031.75
71-8578970254756
86-9590.512108698283
96-10098878476832
Sum453525.5287127.75

Mean = 3525.5/45 = 78.344
SD = √[(287127.75 - 45×78.344²)/44] ≈ 15.757 ✓