Mathematica:“15 位 Sqrt[x] 得到 42”百万位数字的x”

发布于 2024-10-09 04:00:54 字数 819 浏览 4 评论 0原文

我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深府石板幽径 2024-10-16 04:00:54

问题是 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}]

alt text

因此,您的分子以双倍形式增加指数。

10^-16 精度是在 a[25] 之前实现的:

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  

之后,您开始控制除法的精度,因为 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:

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}]

alt text

so, your numerators are increasing as a double exponential.

The 10^-16 precision is achieved much before a[25]:

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  

Afterward, you have start controlling the precision for the division as the Numerator for a[5] has already 20 digits.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文