1. 程式人生 > >標準正態分佈函式表的程式實現

標準正態分佈函式表的程式實現

現在的很多程式中要想實現查詢正態分佈函式表,將幾百條資料用陣列存放起來 再在程式中查詢是非常笨拙的方法,現在提供一種實現的演算法(Java),可以避免這種笨拙的實現方式:

    /**
     * 根據分割積分法來求得積分值
     * -3.89~3.89區間外的積分面積 小於 0.0001,
     * 所以確定有效的積分割槽間為-3.89~3.89
     * 在實現分割的時候精度定為0.0001,得到的結果和查表得到的結果誤差在-0.0002~+0.0002之間(已經檢驗)
     * 
     * @param u      積分上限
     * @return       積分值
     */
    private static float selfCaculate(float u){
        float ret  = 0;
        if(u < -3.89){
            return 0;
        }
        else if(u > 3.89){
            return 1;
        }
        float temp = -3.89f;
        while(temp <= u){
            ret += 0.0001f * fx(temp);
            temp += 0.0001f;
        }
        return ret;
    }
    /**
     * 求被積函式的函式值    (1/(2 * PI)^(0.5))e^(-t^2/2)
     * @param x      變數x
     * @return       函式值
     */
    private static float fx(float x){
        float ret = 0;
        double a = 1.0 / Math.sqrt(Math.PI * 2);
        a  = a * Math.pow(Math.E, -0.5 * Math.pow(x, 2));
        ret = (float) a;
        return ret;
    }
 

上面的實現方式精度是定在0.0001的 若想提高精度 只要適當擴大積分的區間(-3.89~3.89
) 以及縮小分割區間(0.0001)就可以了