找回密码
 欢迎注册
查看: 40073|回复: 35

[讨论] 预测一个数列的极限

[复制链接]
发表于 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$的值?

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

用什么方法预测?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 14:20:06 | 显示全部楼层
本帖最后由 wayne 于 2010-8-1 14:23 编辑

这跟看序列找规律区别不大吧,呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-1 14:21:08 | 显示全部楼层
本帖最后由 KeyTo9_Fans 于 2010-8-1 14:30 编辑

好像是的。

拿个什么函数拟合一下,然后根据函数表达式求极限。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 14:31:03 | 显示全部楼层
我猜测,A2的准确值应该是
$1/{\sqrt{2+\sqrt{2}}}$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 14:36:08 | 显示全部楼层
老大,能否说说这道题的背景
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 14:47:11 | 显示全部楼层
看成是曲线拟合的话,会忽视掉 题干给的高精度的信息。
我感觉应该有一种预测方法,比曲线拟合更强的方法,要不插值试试.......
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 15:05:41 | 显示全部楼层
本帖最后由 wayne 于 2010-8-1 15:26 编辑

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

下载地址:
http://ifile.it/d5x87go/0521661595.rar
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 15:24:03 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-1 15:36:11 | 显示全部楼层
8# Buffalo
呵呵,你给的方法我那本书里面大篇幅介绍了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-2 18:18:23 | 显示全部楼层
我自己设计了一个很土的方法,预测出了一个极限值:

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

$c++$代码如下:
  1. #include<cstdio>
  2. #include<math.h>

  3. double a[999999]={0,
  4. 0.5,
  5. 0.54119610014619698439972320536639,
  6. 0.55929631600132353475576392078938,
  7. 0.56972413396802715322804051835303,
  8. 0.57581007321162765360503297431458,
  9. 0.57970275713244352141943997833056,
  10. 0.58235129508008298007347469183041,
  11. 0.58424146648984767386035113239817,
  12. 0.58564155686139651141699566635464,
  13. 0.58671003405340635980469047312441,
  14. 0.58754560137670707686509637674778,
  15. 0.58821247060644326317197307974183,
  16. 0.58875395365138276709785553207334,
  17. 0.58920017119372364434464005947868,
  18. 0.58957262470961612944817110769224,
  19. 0.5898870137232585,
  20. 0.5901550299615904,
  21. 0.5903855332606833};

  22. int i;
  23. double b[999999],c[999999],d[999999],e[999999];

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

  28. int main()
  29. {
  30.         for(i=1;i<19;i++)
  31.         {
  32.                 b[i]=exp(-log(a[i]-a[i-1])*4/11);        //将a数列的相邻两项作差,将差的(-4/11)次方记为b数列
  33.                 if(i>1)c[i]=b[i]-b[i-1];        //将b数列的相邻两项作差,记为c数列
  34.         }
  35.         for(i=3;i<19;i++)
  36.         {
  37.                 d[i]=exp(-log(c[i-1]-c[i])*4/10);                //将c数列的相邻两项作差,将差的(-4/10)次方记为d数列
  38.                 if(i>3)e[i]=d[i]-d[i-1];        //将d数列的相邻两项作差,记为e数列
  39.         }
  40.         for(i=5;i<19;i++)
  41.         {
  42.                 if(i>5)printf("%d %.16lf %.16lf\n",i,e[i]-e[i-1],f(i));        //输出e数列的相邻两项之差和f(i)的值,看看是否吻合得比较好
  43.         }
  44.         puts("");
  45.         for(i=19;i<999999;i++)
  46.                 e[i]=e[i-1]+f(i);        //根据f(i)的值延长e数列
  47.         for(i=19;i<999999;i++)
  48.                 d[i]=d[i-1]+e[i];        //根据e数列的值延长d数列
  49.         for(i=19;i<999999;i++)
  50.                 c[i]=c[i-1]-exp(-log(d[i])*10/4);        //根据d数列的值延长c数列
  51.         for(i=19;i<999999;i++)
  52.                 b[i]=b[i-1]+c[i];        //根据c数列的值延长b数列
  53.         for(i=19;i<999999;i++)
  54.                 a[i]=a[i-1]+exp(-log(b[i])*11/4);        //根据b数列的值延长a数列

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

  14.      0: 0.000000000
  15.      1: 0.500000000
  16.      2: 0.541196100
  17.      3: 0.559296316
  18.      4: 0.569724134
  19.      5: 0.575810073
  20.      6: 0.579702757
  21.      7: 0.582351295
  22.      8: 0.584241466
  23.      9: 0.585641557
  24.     10: 0.586710034
  25.     11: 0.587545601
  26.     12: 0.588212471
  27.     13: 0.588753954
  28.     14: 0.589200171
  29.     15: 0.589572625
  30.     16: 0.589887014
  31.     17: 0.590155030
  32.     18: 0.590385533
  33.     19: 0.590585342
  34.     20: 0.590759776
  35.     30: 0.591733134
  36.     45: 0.592235286
  37.     67: 0.592487243
  38.    100: 0.592616157
  39.    150: 0.592681661
  40.    225: 0.592714218
  41.    337: 0.592730303
  42.    505: 0.592738279
  43.    757: 0.592742224
  44.   1135: 0.592744172
  45.   1702: 0.592745132
  46.   2553: 0.592745605
  47.   3829: 0.592745838
  48.   5743: 0.592745952
  49.   8614: 0.592746009
  50. 12921: 0.592746037
  51. 19381: 0.592746050
  52. 29071: 0.592746057
  53. 43606: 0.592746060
  54. 65409: 0.592746062
  55. 98113: 0.592746063
  56. 147169: 0.592746063
  57. 220753: 0.592746063
  58. 331129: 0.592746063
  59. 496693: 0.592746063
  60. 745039: 0.592746063
复制代码
我可以看到,$e$数列的相邻两项之差从$i=13$开始与$f(i)$的值吻合得非常好。

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

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

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

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

如果能根据$1#$的数据直接实现一遍就更好了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-4 19:23 , Processed in 0.061780 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表