平均值(mean),方差(variance),標準差(standard deviation)是一組數據重要的指標。 平均值是一組數據的代表值,標準差衡量數據的分散程度,方差是標準差的平方。 對一組數據(數列) x[0], x[1], ..., x[N-1], 通常的計算公式如下: 1 mean = --- { x[0] + x[1] + ... + x[N-1] } N 1 2 2 2 variance = --- { (x[0]-mean) + (x[1]-mean) + ... + (x[N-1]-mean) } N (統計學上有時會把分母改成N-1,以便得到"不偏"的統計量) 數學上可證明 2 Variance = 數據平方之平均值(mean square) - mean 1 2 2 2 mean square = ---{ x[0] + x[1] + ... + x[N-1] } N ___________ standard deviation = | variance V 以數列 1,2,3,4,5,6,7,8,9,10 為例: 平均值 = (1+2+3+...+10)/10 = 5.5 數據平方之平均值 = (1+4+9+...+100)/10 = 38.5 2 標準差 = 根號(38.5-5.5 ) = 2.87228132326901 請利用函式的架構,寫一個程式可以分別計算出一組數據的平均值,數據平方之平均值,以及標準差。 第一~三版可用數列{1,2,3,4,5,6,7,8,9,10}確認結果: 第一版:寫出計算數列平均值的函式 (static double Mean(int [] x) ) 第二版:加上計算數據平方之平均值的函式 (static double MeanSquare(int [] x) ) 第三版:加上計算標準差的函式 (static double StdDev(int [] x) ) 第四版:用亂數產生100個1~50的整數取代原本的數列 hint 1: x宣告為一個一維陣列時,可用x.Length取得x的長度 hint 2: StdDev(int [] x) 裡面需要呼叫 Mean() 和 MeanSquare() 這兩個函式 hint 3: 開根號可以使用Math.Sqrt(a);平方可使用Math.Pow(b,2) 第三版輸出結果: 1 2 3 4 5 6 7 8 9 10 mean = 5.5, mean square = 38.5, std = 2.87228132326901 第四版輸出結果舉例: 32 21 48 1 26 27 11 38 16 46 23 3 49 10 41 39 43 24 9 3 6 18 11 16 50 13 37 2 26 11 24 30 12 7 9 31 10 41 23 48 19 46 22 4 49 11 50 18 49 49 18 19 15 44 39 15 1 1 33 2 11 41 7 10 3 23 41 39 43 49 8 30 3 2 9 32 8 44 5 18 37 11 20 1 25 44 6 13 19 19 45 21 25 37 10 8 10 34 17 29 6 mean = 23.11, mean square = 764.97, std = 15.1953249389409