我这样做是为了计算Sqrt5:
a[0] = 2
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] a25离Sqrt5有多近?
N[Sqrt[5]-a[25]] // FortranForm
4.440892098500626e-16 a25^2到5有多近?
N[a[25]^2-5] // FortranForm
8.305767102358763e-42074769 这对我来说很奇怪。我的估计是:如果x在Sqrt5的10^-n之内,那么x^2在5的10^(-2*n)之内,给予或接受。不是吗?事实上:
a[25]^2 = (Sqrt[5]-4.440892098500626e-16)^2 ~ 5 - 2*5*4.440892098500626e-16 (展开(A)^2),因此精度应该仅为14位(或一般为n位)。
当然,牛顿的方法在25次迭代中只产生15位精确数字,这似乎也很奇怪。
在上面的计算中,我是不是过早地失去了精度?请注意:
N[Log[Sqrt[5]-a[25]]] // FortranForm
-35.35050620855721 同意w/ 15位以上的精度,即使我做了N[]后,采取了日志(所以它应该是准确的)。
发布于 2010-12-24 00:55:33
问题是Mma是如何计算你的序列的。
A是有理数。让我们看看分子的数量级,在一个日志标尺中:
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}]

所以,你的分子正以双指数的形式增长。
在a25之前,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 之后,您已经开始控制除法的精度,因为a5的分子已经有20位数。
https://stackoverflow.com/questions/4523098
复制相似问题