【问题标题】:How do I fit cumulative distribution function of normal distribution to data points?如何将正态分布的累积分布函数拟合到数据点?
【发布时间】:2017-10-26 03:34:17
【问题描述】:

我有需要拟合公式的数据

y = a*CDF[NormalDistribution[m, s], x]

我需要在哪里找到 a、m 和 s

我已经用 Mathematica 测试了拟合,它发现拟合相当快,并且很好地拟合了数据。

但是,我需要用 c# 来实现。

目前我已经实现了一种通过下坡来估计参数的方法,但是我的实现非常慢(每次估计大约 0.5 秒)

最好的方法是什么?

【问题讨论】:

    标签: c# normal-distribution data-fitting


    【解决方案1】:

    John Cook 有一个实现:https://www.johndcook.com/blog/csharp_phi/

    我将在下面复制它:

    static double Phi(double x)
    {
        // constants
        double a1 = 0.254829592;
        double a2 = -0.284496736;
        double a3 = 1.421413741;
        double a4 = -1.453152027;
        double a5 = 1.061405429;
        double p = 0.3275911;
    
        // Save the sign of x
        int sign = 1;
        if (x < 0)
            sign = -1;
        x = Math.Abs(x) / Math.Sqrt(2.0);
    
        // A&S formula 7.1.26
        double t = 1.0 / (1.0 + p*x);
        double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t * Math.Exp(-x*x);
    
        return 0.5 * (1.0 + sign*y);
    }
    
    static void TestPhi()
    {
        // Select a few input values
        double[] x = 
        {
            -3, 
            -1, 
            0.0, 
            0.5, 
            2.1 
        };
    
        // Output computed by Mathematica
        // y = Phi[x]
        double[] y = 
        { 
            0.00134989803163, 
            0.158655253931, 
            0.5, 
            0.691462461274, 
            0.982135579437 
        };
    
        double maxError = 0.0;
        for (int i = 0; i < x.Length; ++i)
        {
            double error = Math.Abs(y[i] - Phi(x[i]));
            if (error > maxError)
                maxError = error;
        }
    
            Console.WriteLine("Maximum error: {0}", maxError);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-31
      • 2013-09-21
      • 2017-11-02
      • 2013-01-28
      • 2013-03-06
      • 2017-10-31
      • 2019-07-23
      • 2014-09-02
      • 2011-02-16
      相关资源
      最近更新 更多