Mathematica:“15 位 Sqrt[x] 得到 42”百万位数字的x”
我在 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
a[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
展开(ab)^2),所以精度应该只有14位左右 (或者一般来说是 n 位数字)。
当然,牛顿法在 25 个数字中只能得出 15 个准确的数字 迭代似乎也很奇怪。
在上面的计算中我是否太早失去了精度?请注意:
N[Log[Sqrt[5]-a[25]]] // FortranForm
-35.35050620855721
同意上面的 15 位精度,即使我在 之后 执行了 N[] 记录日志(所以它应该是准确的)。
I did this in Mathematica to compute Sqrt[5]:
a[0] = 2
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1]
How close is a[25] to Sqrt[5]?
N[Sqrt[5]-a[25]] // FortranForm
4.440892098500626e-16
And how close is a[25]^2 to 5?
N[a[25]^2-5] // FortranForm
8.305767102358763e-42074769
This seems odd to me. My estimate: if x is within 10^-n of Sqrt[5],
then x^2 is within 10^(-2*n) of 5, give or take. No? In fact:
a[25]^2 = (Sqrt[5]-4.440892098500626e-16)^2 ~ 5 - 2*5*4.440892098500626e-16
(expanding (a-b)^2), so the accuracy should be only about 14 digits
(or n digits in general).
Of course, Newton's method yielding only 15 accurate digits in 25
iterations also seems odd.
Am I losing precision too early in the calculations above? Note that:
N[Log[Sqrt[5]-a[25]]] // FortranForm
-35.35050620855721
agrees w/ the 15 digit precision above, even though I do N[] after
taking the Log (so it should be accurate).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题是 Mma 如何计算你的序列。
a[n] 是有理数。让我们以双对数比例查看分子的数量级:
因此,您的分子以双倍形式增加指数。
10^-16 精度是在 a[25] 之前实现的:
之后,您开始控制除法的精度,因为 a[5] 的分子已经有 20 位数字。
The problem is how Mma is calculating your sequence.
a[n] are Rational numbers. Lets see the order of magnitude for the Numerators, in a loglog scale:
so, your numerators are increasing as a double exponential.
The 10^-16 precision is achieved much before a[25]:
Afterward, you have start controlling the precision for the division as the Numerator for a[5] has already 20 digits.