KeyTo9_Fans 发表于 2010-8-1 14:13:54

预测一个数列的极限

已知一数列$\{A_n\}$具有某种规律,

当$n->\infty$时收敛于极限$c$,

并且知道前$18$项的近似值(小数点后$14$位有效):

$A_1=0.5000000000000000$
$A_2=0.5411961001461970$
$A_3=0.5592963160013235$
$A_4=0.5697241339680272$
$A_5=0.5758100732116277$
$A_6=0.5797027571324435$
$A_7=0.5823512950800830$
$A_8=0.5842414664898477$
$A_9=0.5856415568613965$
$A_10=0.5867100340534064$
$A_11=0.5875456013767071$
$A_12=0.5882124706064433$
$A_13=0.5887539536513828$
$A_14=0.5892001711937236$
$A_15=0.5895726247096161$
$A_16=0.5898870137232585$
$A_17=0.5901550299615904$
$A_18=0.5903855332606833$

能否根据这些值预测当$n->\infty$时,极限$c$的值?

精确程度可以达到几位小数?

用什么方法预测?

wayne 发表于 2010-8-1 14:20:06

本帖最后由 wayne 于 2010-8-1 14:23 编辑

这跟看序列找规律区别不大吧,呵呵

KeyTo9_Fans 发表于 2010-8-1 14:21:08

本帖最后由 KeyTo9_Fans 于 2010-8-1 14:30 编辑

好像是的。

拿个什么函数拟合一下,然后根据函数表达式求极限。

wayne 发表于 2010-8-1 14:31:03

我猜测,A2的准确值应该是
1/{\sqrt{2+\sqrt{2}}}

wayne 发表于 2010-8-1 14:36:08

老大,能否说说这道题的背景

wayne 发表于 2010-8-1 14:47:11

看成是曲线拟合的话,会忽视掉 题干给的高精度的信息。
我感觉应该有一种预测方法,比曲线拟合更强的方法,要不插值试试.......

wayne 发表于 2010-8-1 15:05:41

本帖最后由 wayne 于 2010-8-1 15:26 编辑

关于外插方法,推荐你一本书:
Practical Extrapolation Methods: Theory and Applications
书里面开篇就谈到了问题背景:


下载地址:
http://ifile.it/d5x87go/0521661595.rar

Buffalo 发表于 2010-8-1 15:24:03

http://mathworld.wolfram.com/WynnsEpsilonMethod.html

wayne 发表于 2010-8-1 15:36:11

8# Buffalo
呵呵,你给的方法我那本书里面大篇幅介绍了

KeyTo9_Fans 发表于 2010-8-2 18:18:23

我自己设计了一个很土的方法,预测出了一个极限值:

$lim_{n->\infty}A_n=0.592746063$

$c++$代码如下:#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};

int i;
double b,c,d,e;

double f(int i) //f(i)是二次函数(a+bi+ci^2)的倒数,a、b、c的值是根据误差最小的原则拟合出来的。
{
        return 1/(51.339415-11.69409*i+0.64923801*i*i);
}

int main()
{
        for(i=1;i<19;i++)
        {
                b=exp(-log(a-a)*4/11);        //将a数列的相邻两项作差,将差的(-4/11)次方记为b数列
                if(i>1)c=b-b;        //将b数列的相邻两项作差,记为c数列
        }
        for(i=3;i<19;i++)
        {
                d=exp(-log(c-c)*4/10);                //将c数列的相邻两项作差,将差的(-4/10)次方记为d数列
                if(i>3)e=d-d;        //将d数列的相邻两项作差,记为e数列
        }
        for(i=5;i<19;i++)
        {
                if(i>5)printf("%d %.16lf %.16lf\n",i,e-e,f(i));        //输出e数列的相邻两项之差和f(i)的值,看看是否吻合得比较好
        }
        puts("");
        for(i=19;i<999999;i++)
                e=e+f(i);        //根据f(i)的值延长e数列
        for(i=19;i<999999;i++)
                d=d+e;        //根据e数列的值延长d数列
        for(i=19;i<999999;i++)
                c=c-exp(-log(d)*10/4);        //根据d数列的值延长c数列
        for(i=19;i<999999;i++)
                b=b+c;        //根据c数列的值延长b数列
        for(i=19;i<999999;i++)
                a=a+exp(-log(b)*11/4);        //根据b数列的值延长a数列

        for(i=0;i<999999;i+=(i>19?i/2:1))
                printf("%6d: %.9lf\n",i,a);        //输出a数列
        return 0;
}运行结果如下:6 1.#QNAN00000000000 0.2199037834745008
7 1.#QNAN00000000000 0.7731276358192092
8 1.#QNAN00000000000 -1.5104089226742774
9 1.#QNAN00000000000 -0.7580833345696476
10 -0.3713578484461415 -1.4756140029866442
11 0.5864595799163581 0.7922522734689024
12 0.1712273296721794 0.2221921798644612
13 0.1107856277919126 0.1106504524996588
14 0.0669381691118112 0.0672368126045807
15 0.0456397026485718 0.0454408775614979
16 0.0328465962300193 0.0328526923554737
17 0.0248567106136584 0.0248944042293199
18 0.0195452906191100 0.0195316657192975

   0: 0.000000000
   1: 0.500000000
   2: 0.541196100
   3: 0.559296316
   4: 0.569724134
   5: 0.575810073
   6: 0.579702757
   7: 0.582351295
   8: 0.584241466
   9: 0.585641557
    10: 0.586710034
    11: 0.587545601
    12: 0.588212471
    13: 0.588753954
    14: 0.589200171
    15: 0.589572625
    16: 0.589887014
    17: 0.590155030
    18: 0.590385533
    19: 0.590585342
    20: 0.590759776
    30: 0.591733134
    45: 0.592235286
    67: 0.592487243
   100: 0.592616157
   150: 0.592681661
   225: 0.592714218
   337: 0.592730303
   505: 0.592738279
   757: 0.592742224
1135: 0.592744172
1702: 0.592745132
2553: 0.592745605
3829: 0.592745838
5743: 0.592745952
8614: 0.592746009
12921: 0.592746037
19381: 0.592746050
29071: 0.592746057
43606: 0.592746060
65409: 0.592746062
98113: 0.592746063
147169: 0.592746063
220753: 0.592746063
331129: 0.592746063
496693: 0.592746063
745039: 0.592746063我可以看到,$e$数列的相邻两项之差从$i=13$开始与$f(i)$的值吻合得非常好。

根据$f(i)$的值反推$A$数列,得到$A$数列的极限:$0.592746063$。

不知道这个方法是否正确,也不知道准确度有多高。

我没有时间阅读大量的相关文献。

如果谁知道正规一点的方法,请回帖告知。

如果能根据$1#$的数据直接实现一遍就更好了。
页: [1] 2 3 4
查看完整版本: 预测一个数列的极限