none
如何寫出常態分配 RRS feed

  • 問題

  • 想請教各位:
                       我現要做模擬問題,請問我該如何才能產生 常態分配的樣本?
                                                                                                                    謝謝
    2008年2月9日 下午 12:07

解答

  • msdn 論壇的解答: Re: Normal Distribution

    public double CND(double X)
    {
        double L = 0.0;
        double K = 0.0;
        double dCND = 0.0;
        const double a1 = 0.31938153;
        const double a2 = -0.356563782;
        const double a3 = 1.781477937;
        const double a4 = -1.821255978;
        const double a5 = 1.330274429;
     
        L = Math.Abs(X);
        K = 1.0/(1.0 + 0.2316419*L);
        dCND = 1.0 - 1.0/Math.Sqrt(2*Convert.ToDouble(Math.PI.ToString()))*Math.Exp(-L*L/2.0)*(a1*K + a2*K*K + a3*Math.Pow(K, 3.0) + a4*Math.Pow(K, 4.0) + a5*Math.Pow(K, 5.0));
     
        if (X < 0)
        {
            return 1.0 - dCND;
        }
        else
        {
            return dCND;
        }
    }

    2008年2月9日 下午 05:04

所有回覆

  • 一般我是用數學手冊跟統計學書上記載的近似式:

    Code Snippet

    Private Function CDFofNormal(ByVal z)

    tz = Abs(z)
    b = 0.5 * (1 + 0.196854 * tz + 0.115194 * tz ^ 2 + 0.000344 * tz ^ 3 + 0.019527 * tz ^ 4) ^ (-4)
    If z >= 0 Then b = 1 - b
    CDFofNormal = b

    End Function

     

     

    不會用太複雜的方式去近似。

    2008年2月9日 下午 04:55
  • msdn 論壇的解答: Re: Normal Distribution

    public double CND(double X)
    {
        double L = 0.0;
        double K = 0.0;
        double dCND = 0.0;
        const double a1 = 0.31938153;
        const double a2 = -0.356563782;
        const double a3 = 1.781477937;
        const double a4 = -1.821255978;
        const double a5 = 1.330274429;
     
        L = Math.Abs(X);
        K = 1.0/(1.0 + 0.2316419*L);
        dCND = 1.0 - 1.0/Math.Sqrt(2*Convert.ToDouble(Math.PI.ToString()))*Math.Exp(-L*L/2.0)*(a1*K + a2*K*K + a3*Math.Pow(K, 3.0) + a4*Math.Pow(K, 4.0) + a5*Math.Pow(K, 5.0));
     
        if (X < 0)
        {
            return 1.0 - dCND;
        }
        else
        {
            return dCND;
        }
    }

    2008年2月9日 下午 05:04