wayne 发表于 2010-8-3 09:07:11

如果是拟合的话,最好还要给出各个参数的 置信区间,才有意义。

wayne 发表于 2010-8-3 09:19:14

俺也拟合了一下,选择的模型是
y=a+b/{c+x^d}
已经到了拟合的最高境界,几乎和插值的曲线重合了:

wayne 发表于 2010-8-3 09:24:36

上面的给出了拟合后的残差:
{-0.0000433106, 0.000332, -0.000493819, -0.0000886767, 0.0000499126, 0.00010533, 0.000119389, 0.000113152, 0.0000965446, 0.0000747279, 0.0000505189, 0.0000255045, 5.90665*10^-7, -0.0000237077, -0.0000471074, -0.0000694644, -0.0000907193, -0.000110864}

c,a,b,t的置信区间是
{{-0.22857, -0.205862}, {1.19589, 1.45906}, {0.592995, 0.593745}, {1.44409, 1.53653}}

我把上面的图再放大了一点,注意有两条线,一条是粉红色的,是内插曲线,一条是拟合曲线

KeyTo9_Fans 发表于 2010-8-4 16:59:25

置信区间是怎么得出来的?

这个数列比较特殊,越靠后的数据越有说服力。

前面几项的值基本不需要理会,如何重点利用最后几项的值才是关键。

不知道能不能加权处理。

比如:后一项的权重是前一项的$2$倍。

wayne 发表于 2010-8-4 17:34:27

参数估计这块我很久没涉及了,脑袋里装的还是那个正态分布【u-3s,u+3s】的模型。
不同的概率分布有不同的说法,好像大致就是95%的范围

此题感觉用外插更合适

wayne 发表于 2010-8-4 17:37:51

其实,俺这方面也没经验

Buffalo 发表于 2010-8-5 05:08:36

8# Buffalo
呵呵,你给的方法我那本书里面大篇幅介绍了
wayne 发表于 2010-8-1 15:36 http://bbs.emath.ac.cn/images/common/back.gif

大篇幅介绍你也没看,至少是没学会,跟没有一样

Buffalo 发表于 2010-8-5 05:25:13

对这种单调趋于某个极限的数列,可以假设A_n=A+\sum_{k=1}^{\infty}\frac{C_k}{n^k},如果能够想办法找出系数C_k,立刻就可以求出极限A=A_n-\sum_{k=1}^{\infty}\frac{C_k}{n^k}。实际做的时候不是求出系数C_k,而是想办法直接消掉C_k,一种方法如下:
用n^m乘以方程A_n=A+\sum_{k=1}^{\infty}\frac{C_k}{n^k}两边,得n^m A_n=An^m+\sum_{k=1}^{m}C_k n^{m-k}+\sum_{k=m+1}^{\infty}\frac{C_k}{n^k},两边对n作m阶差分得\sum_{i=0}^m \frac{m!}{i!(m-i)!}(-1)^i (n+i)^m A_{n+i}=A m!+\sum_{k=m+1}^{\infty}\frac{D_k}{n^k},也就是说,新数列\sum_{i=0}^m \frac{1}{i!(m-i)!}(-1)^i (n+i)^m A_{n+i}和原数列A_n趋于同一个极限,但是收敛的速度更快,至少是O(n^{-m-1})量级。
对于本题做到m=7、8就可以发现新数列出现比较明显的长周期(周期约为12,振幅衰减的)振荡现象,不再是单调的,如果不想花时间对付这一项的话就只能到此为止。
新数列的最后三项为0.592781, 0.592776, 0.592772,可以估计出原数列的极限约为0.59276~0.59278。

wayne 发表于 2010-8-5 10:12:03

17# Buffalo

呵呵,一语中的啊

KeyTo9_Fans 发表于 2010-9-16 15:19:13

18楼的方法看起来很不错,可是我怎么都学不会。

结果我还是用了自己的那套土方法。

我花了很大的成本,得到了$A_19$的值:

$A_19=0.5905853419876694$

拟合过程如下:#include<cstdio>
#include<math.h>

double a={
        0,
        0.5,
        0.54119610014619698439972320536639,
        0.55929631600132353475576392078938,
        0.56972413396802715322804051835303,
        0.57581007321162765360503297431458,
        0.57970275713244352141943997833056,
        0.58235129508008298007347469183041,
        0.58424146648984767386035113239817,
        0.58564155686139651141699566635464,
        0.58671003405340635980469047312441,
        0.58754560137670707686509637674778,
        0.58821247060644326317197307974183,
        0.58875395365138276709785553207334,
        0.58920017119372364434464005947868,
        0.58957262470961612944817110769224,
        0.5898870137232585,
        0.5901550299615904,
        0.5903855332606833,
        0.5905853419876694
};

int i,n;
double b,c,d,e,f,g;

double f_(int i)
{
        return -1.4976171+0.26715566*i;
}

int main()
{
        n=20;
        for(i=1;i<n;i++)
        {
                b=exp(-log(a-a)/2.75);
        }
        for(i=2;i<n;i++)
        {
                c=b-b;
        }
        for(i=3;i<n;i++)
        {
                d=exp(-log(c-c)/2.712);
        }
        for(i=4;i<n;i++)
        {
                e=d-d;
        }
        for(i=5;i<n;i++)
        {
                f=exp(-log(e-e)/3.853369);
                printf("%d %.16lf %.16lf\n",i,f,f_(i));
        }
        for(i=n;i<999999;i++)
                f=f_(i);
        for(i=n;i<999999;i++)
                f=f+g;
        for(i=n;i<999999;i++)
                e=e+exp(-log(f)*3.853369);
        for(i=n;i<999999;i++)
                d=d+e;
        for(i=n;i<999999;i++)
                c=c-exp(-log(d)*2.712);
        for(i=n;i<999999;i++)
                b=b+c;
        for(i=n;i<999999;i++)
                a=a+exp(-log(b)*2.75);

        for(i=0;i<999999;i+=(i>31?i:1))
                printf("%6d: %.16lf\n",i,a);
        return 0;
}程序输出如下:5 -1.#IND000000000000 -0.1618388000000000
6 -1.#IND000000000000 0.1053168600000001
7 -1.#IND000000000000 0.3724725200000001
8 -1.#IND000000000000 0.6396281800000001
9 -1.#IND000000000000 0.9067838400000003
10 1.#QNAN00000000000 1.1739395000000001
11 1.2400299956402463 1.4410951599999999
12 1.7184718045516196 1.7082508200000002
13 1.9384902061929288 1.9754064800000004
14 2.2365949301518984 2.2425621400000004
15 2.5061186902492905 2.5097177999999998
16 2.7768734284468222 2.7768734600000000
17 3.0440290793828071 3.0440291200000003
18 3.3111847500498381 3.3111847800000005
19 3.5783404007816051 3.5783404399999998
   0: 0.0000000000000000
   1: 0.5000000000000000
   2: 0.5411961001461970
   3: 0.5592963160013236
   4: 0.5697241339680271
   5: 0.5758100732116277
   6: 0.5797027571324436
   7: 0.5823512950800830
   8: 0.5842414664898477
   9: 0.5856415568613965
    10: 0.5867100340534064
    11: 0.5875456013767071
    12: 0.5882124706064432
    13: 0.5887539536513827
    14: 0.5892001711937237
    15: 0.5895726247096161
    16: 0.5898870137232585
    17: 0.5901550299615904
    18: 0.5903855332606833
    19: 0.5905853419876694
    20: 0.5907597763774112
    21: 0.5909130395624155
    22: 0.5910484896187661
    23: 0.5911688369727856
    24: 0.5912762897683751
    25: 0.5913726623579062
    26: 0.5914594572711018
    27: 0.5915379278478790
    28: 0.5916091265966935
    29: 0.5916739428925802
    30: 0.5917331326283863
    31: 0.5917873417313245
    32: 0.5918371249591274
    64: 0.5924660692652847
   128: 0.5926612272674896
   256: 0.5927205350417009
   512: 0.5927383640078597
1024: 0.5927436941980384
2048: 0.5927452833002713
4096: 0.5927457564031907
8192: 0.5927458971557772
16384: 0.5927459390163858
32768: 0.5927459514637898
65536: 0.5927459551647473
131072: 0.5927459562650940
262144: 0.5927459565922527
524288: 0.5927459566891469结论:极限约为$0.59274596$,但是无法给出误差范围。

我接下来会给出详细步骤。

希望wayne等大牛仔细看,帮我估计一下最终结果的误差有多大。
页: 1 [2] 3 4
查看完整版本: 预测一个数列的极限