下面这个类采用了什么数学模型?谁能看出来
static final class SmoothedStats {
private static final double NORM_CUMULATIVE[] = { 0.0013498980320000001D,
            0.0018658133009999999D, 0.0025551303310000001D,
            0.0034669738040000002D, 0.0046611880249999996D,
            0.0062096653260000001D, 0.0081975359259999995D,
            0.010724110021000001D, 0.013903447512999999D,
            0.017864420562000001D, 0.022750131948000001D,
            0.028716559815000001D, 0.035930319112000002D,
            0.044565462761999998D, 0.054799291698999997D,
            0.066807201270000005D, 0.080756659236000006D,
            0.096800484586000005D, 0.11506967022300001D, 0.13566606094799999D,
            0.158655253932D, 0.184060125347D, 0.21185539858300001D,
            0.24196365222399999D, 0.27425311775099998D, 0.30853753872599998D,
            0.34457825839D, 0.38208857781099997D, 0.42074029056200002D,
            0.46017216272299999D, 0.5D, 0.53982783727700001D,
            0.57925970943899996D, 0.61791142218899997D, 0.65542174161D,
            0.69146246127400002D, 0.72574688224899997D, 0.75803634777600004D,
            0.78814460141700005D, 0.815939874653D, 0.84134474606800003D,
            0.86433393905199996D, 0.88493032977700004D, 0.90319951541400001D,
            0.91924334076400005D, 0.93319279873000005D, 0.945200708301D,
            0.95543453723799998D, 0.96406968088800005D, 0.97128344018500001D,
            0.97724986805199998D, 0.98213557943800001D, 0.98609655248700001D,
            0.98927588997899996D, 0.99180246407399997D, 0.99379033467400002D,
            0.99533881197499996D, 0.99653302619600004D, 0.99744486966900003D,
            0.998134186699D, 0.99865010196799997D };    
        private double sum;        private double squaresSum;        private double n;
        
        int HORIZON = 50;        void add(double d) {
            double d1 = 1.0D - 1.0D / HORIZON;
            n = d1 * n + 1.0D;
            sum = d1 * sum + d;
            squaresSum = d1 * squaresSum + d * d;
        }        double getAvg() {
            return sum / n;
        }        boolean exceedsZ(double d, double d1) {
            double d2 = sum - n * d;
            return n > 1.0D && d2 * d2 > (n * squaresSum - sum * sum) * d1 * d1;
        }        double zScore(double d) {
            double d1 = sum / n;
            return (d - d1) / Math.sqrt(squaresSum / n - d1 * d1);
        }        double pLessThan(SmoothedStats smoothedstats) {
            double d = smoothedstats.sum / smoothedstats.n - sum / n;
            double d1 = (((squaresSum - (sum * sum) / n) + smoothedstats.squaresSum) - (smoothedstats.sum * smoothedstats.sum)
                    / smoothedstats.n)
                    / (n + smoothedstats.n);
            double d2 = d1 * (1.0D / n + 1.0D / smoothedstats.n);
            return d2 != 0.0D ? normCumulative(d / Math.sqrt(d2))
                    : d <= 0.0D ? 0 : 1;
        }
        
    private static double normCumulative(double d) {
        if (d < -3D)
            d = -3D;
        if (d > 3D)
            d = 3D;
        return NORM_CUMULATIVE[(int) (10D * (d + 3D))];
    }        SmoothedStats(double d) {
            n = 1.0D;
            sum = d;
            squaresSum = d * d;
        }
    }

解决方案 »

  1.   

    我看到的代码也是这样的啊,没注释,只猜测是根据历史数据(SmoothedStats的一个数组)来预测未来数据大小的。
      

  2.   


    NORM_CUMULATIVE[]:正态分布曲线上的数据
    n: 样品个数
    sum:Σx
    squaresSum: 平方和 Σ(x*x)
      

  3.   

    to:trumplet(检查) 那几个函数是干吗用的?
    能大致解释一下吗?
      

  4.   

    “NORM_CUMULATIVE[]:正态分布曲线上的数据”说错了,好像应该是“正态分布曲线上的 横坐标的 数据”------------------那几个函数,不太清楚,从字面意思上看,add 和 getAvg 最明显,add 是添加一个样品值
    getAvg 是计算样品的平均值别的不知道
      

  5.   

    NORM_CUMULATIVE[]:正态分布曲线上的数据”说错了,好像应该是“正态分布曲线上的 横坐标的 数据”------------------可能还是不对,既然是 横坐标 的数据,那么曲线就不一定是什么样的曲线 了。
      

  6.   

    to:trumplet(检查) 
    我觉得NORM_CUMULATIVE[]应该是概率,因为它的最大值为1,最小值为0。
    而下标才是横坐标。换到数学说,NORM_CUMULATIVE[i]是从0到i的积分。是不是这样?
      

  7.   

    我查了一本老古董的书,感觉这个象是“Logistic Curve”(逻辑增长曲线)Using a logistic curve, the input data are approximated to find the estimates value of y for the new value of x.General form of logistic curve: y = k / ( 1 + m * e^(-a * x))
      

  8.   

    to:trumplet(检查) :呵呵,你说的正态分布是对的,我查了标准正态分布表了,数据是一样的。
      

  9.   

    F(t) = k /(1 + a * e^(k*b*t))F(t)为t年的累积量,k为t→∞时的累计量,即累积量的最大值,a ,b为参数。
      

  10.   

    trumplet(检查) :
    呵呵 谢谢你。搞定以后我再开个帖给你分。我在搜索的过程中看到了这个:----------------别人的问题---------------------------
    QUOTE (roverlag @ Sep 4 2003, 09:23 AM) 
    感谢 ontime_99 兄的热情帮助,现在我发现真正需要的是去计算F的分布函数,即 F(x,m,n),应该是对密度函数积分,除去阶乘部分,剩下的需要积分,积分该怎样编程去计算呢?  
    --------------------------------------------------------------一个人给出的答案-------------------------
    随机模拟,就是mc方法不过那样的话还不如我说的通过随机数产生均匀分布->加和产生正态->平方产生chi-square->相除得到F
    -------------------------------------------这个的描述觉得和我的问题比较象,答案里的那个mc方法,知道是怎么个路子吗?