Mathematica: «15 цифр Sqrt [x] дают более 42 миллионов цифр x» - PullRequest
1 голос
/ 24 декабря 2010

Я сделал это в Mathematica для вычисления Sqrt [5]:

a[0] = 2 
a[n_] := a[n] = a[n-1] - (a[n-1]^2-5)/2/a[n-1] 

Насколько близко [25] к [5]?

N[Sqrt[5]-a[25]] // FortranForm 
4.440892098500626e-16 

А насколько близко [25] ^ 2 к 5?

N[a[25]^2-5] // FortranForm 
8.305767102358763e-42074769 

Это кажется странным для меня. Моя оценка: если x находится в пределах 10 ^ -n Sqrt [5], тогда x ^ 2 находится в пределах 10 ^ (- 2 * n) от 5, дать или взять. Нет? На самом деле:

a[25]^2 = (Sqrt[5]-4.440892098500626e-16)^2 ~ 5 - 2*5*4.440892098500626e-16 

(расширение (a-b) ^ 2), поэтому точность должна быть только около 14 цифр (или n цифр в целом).

Конечно, метод Ньютона дает только 15 точных цифр в 25 итерации также кажутся странными.

Я слишком рано теряю точность в приведенных выше вычислениях? Обратите внимание:

N[Log[Sqrt[5]-a[25]]] // FortranForm 
-35.35050620855721 

согласен с 15-значной точностью выше, хотя я и делаю N [] после взяв бревно (поэтому оно должно быть точным).

1 Ответ

1 голос
/ 24 декабря 2010

Проблема в том, как Мма вычисляет вашу последовательность.

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 достигается задолго до [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  

После этого вы начинаете контролировать точность деления, поскольку числитель для [5] имеетуже 20 цифр.

...