C#基礎_C#計算樣本標准差和總體標准差


首先我們先了解樣本標准差和總體標准差:

樣本標准差=方差的算術平方根=s=sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/(n-1))
總體標准差=σ=sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n )

下面是簡單的區別:

上面的數據是用Excel來計算的,方便對我們軟件輸出的數據做對比。

https://jingyan.baidu.com/article/17bd8e5275d85985aa2bb855.html

這個是excel里對標准差函數的使用方法

 

 

 
了解了基本概念,下面就是C#代碼了,在窗體創建一個按鈕來測試
        private void button4_Click(object sender, EventArgs e)
        {
            float[] data = new float[] { 290, 517, 850, 484, 856, 784, 666, 865, 445, 243 };//不定長數組
            float 樣本標准差, 總體標准差;
            STDEV(data,out 樣本標准差,out 總體標准差);
            MessageBox.Show(樣本標准差.ToString() + "," + 總體標准差.ToString());
        }


        /// <summary>
        /// 樣本標准差和總體標准差計算
        /// </summary>
        /// <param name="arrData">數據數組</param>
        /// <param name="std_dev">樣本標准差</param>
        /// <param name="STDP">總體標准差</param>
        public void STDEV(float[] arrData,out float std_dev,out float STDP) //計算標准偏差
        {
            float xSum = 0F;//樣本總和
            float xAvg = 0F;//樣本平均值
            float sSum = 0F;//方差的分子
            //float tmpStDev = 0F;
            int arrNum = arrData.Length;//得到樣本數量,分母
            for (int i = 0; i < arrNum; i++)//循環計算得到樣本總和
            {
                xSum += arrData[i];
            }
            xAvg = xSum / arrNum;//計算得到樣本平均值
            for (int j = 0; j < arrNum; j++)//得到方差的分子
            {
                sSum += ((arrData[j] - xAvg) * (arrData[j] - xAvg));
            }
            std_dev = Convert.ToSingle(Math.Sqrt((sSum / (arrNum - 1))).ToString());//樣本標准差

            STDP = Convert.ToSingle(Math.Sqrt((sSum / arrNum)).ToString());//總體標准差
        }

計算結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM