Wolfram mathematica Mathematica:“;15位Sqrt[x]产生42+;x的百万位数;
我在Mathematica中这样做是为了计算Sqrt[5]:Wolfram mathematica Mathematica:“;15位Sqrt[x]产生42+;x的百万位数;,wolfram-mathematica,precision,Wolfram Mathematica,Precision,我在Mathematica中这样做是为了计算Sqrt[5]: a[0] = 2 a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] a[25]与Sqrt[5]的距离有多近 N[Sqrt[5]-a[25]] // FortranForm 4.440892098500626e-16 [25]^2到5的距离有多近 N[a[25]^2-5] // FortranForm 8.305767102358763e-42074769 我觉得这很奇怪。我
a[0] = 2
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1]
a[25]与Sqrt[5]的距离有多近
N[Sqrt[5]-a[25]] // FortranForm
4.440892098500626e-16
[25]^2到5的距离有多近
N[a[25]^2-5] // FortranForm
8.305767102358763e-42074769
我觉得这很奇怪。我的估计:如果x在Sqrt[5]的10^-n范围内,
那么x^2在5的10^(-2*n)范围内,给定或获取。不事实上:
a[25]^2 = (Sqrt[5]-4.440892098500626e-16)^2 ~ 5 - 2*5*4.440892098500626e-16
(扩展(a-b)^2),因此精度应仅为14位左右
(一般为n位)
当然,牛顿的方法在25分钟内只能产生15个精确数字
迭代似乎也很奇怪
在上面的计算中,我是否过早地失去了精度?请注意:
N[Log[Sqrt[5]-a[25]]] // FortranForm
-35.35050620855721
同意上述15位精度,即使我不同意
取日志(因此它应该是准确的) 问题在于Mma如何计算您的序列 a[n]是有理数。让我们以对数比例查看分子的数量级:
a[0] = 2
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1]
ListPlot@Table[Log[10, Log[10, Numerator[ a[i]]]], {i, 1, 25}]
所以,你们的分子是以双指数的形式增加的
在[25]之前,10^-16精度已经达到:
For[i = 1, i < 5, i++,
Print["dif[", i, "]= ", N[a[i] - Sqrt[5], 16]]
]
dif[1]= 0.01393202250021030
dif[2]= 0.00004313361132141470
dif[3]= 4.160143063513508*10^-10
dif[4]= 3.869915959583412*10^-20
对于[i=1,i<5,i++,
打印[“dif[”,i,“]=”,N[a[i]-Sqrt[5],16]]
]
dif[1]=0.0139320250021030
dif[2]=0.000043133161132141470
dif[3]=4.160143063513508*10^-10
dif[4]=3.869915959583412*10^-20
之后,您就开始控制除法的精度,因为[5]的分子已经有20位了 您是否看到我对“N[a[25]^2-5]”的计算有问题。我猜这是准确的,因为结果是合理的,直到我做N[]?@barry你的计算很好。但是增加分子和分母会使N[]走入歧途。您在[4]处已经有了20个正确的数字!