Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта. Благодаря им мы улучшаем сайт!
Принять и закрыть

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.



Главная
Все книги
Назад
Читать: Рассказы о математике с примерами на языках Python и C - Дмитрий Дмитриевич Елисеев на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

14       3.208185652261944

15       3.079153394197428

16       3.200365515409549

17       3.0860798011238346

18       3.1941879092319425

19       3.09162380666784

20       3.189184782277596

21       3.0961615264636424

22       3.1850504153525314

23       3.099944032373808

24       3.1815766854350325

25       3.1031453128860127

26       3.1786170109992202

27       3.1058897382719475

28       3.1760651768684385

29       3.108268566698947

30       3.1738423371907505

31       3.110350273698687

32       3.1718887352371485

Как можно видеть, сделав 32 шага алгоритма, мы получили лишь 2 точных знака. Видно что алгоритм работает, но количество вычислений весьма велико. Как известно, в 15м веке индийский астроном и математик Мадхава использовал более точную формулу, получив точность числа Пи в 11 знаков:

Попробуем воспроизвести ее в виде программы, чтобы примерно оценить объем вычислений.

Первым шагом необходимо вычислить √12. Возникает резонный вопрос - как это сделать? Оказывается, уже в Вавилоне был известен метод вычисления квадратного корня, который сейчас так и называется “вавилонским”. Суть его в вычислении √S по простой формуле:

Здесь x0 - любое приближенное значение, например для √12 можно взять 3.

Запишем формулу в виде программы:

from decimal import Decimal

print ("Квадратный корень:")

number = Decimal(12)

result = Decimal(3)

for p in range(1, 9):

result = (result + number/result)/Decimal(2)

difference = result**2 - number

print(p, result, difference)

sqrt12 = result

Результаты весьма интересны:

Шаг      Значение             Погрешность

1       3.5                   0.25

2       3.464285714285714      0.00127

3       3.464101620029455      3.3890E-8

4       3.464101615137754      2.392873369E-17

Результат: √12 = 3.464101615137754

Как можно видеть, сделав всего 4 шага, можно получить √12 с достаточной точностью, задача вполне посильная даже для ручных расчетов 15 века.

Наконец, запрограммируем вторую часть алгоритма - собственно вычисление Пи.

sum = Decimal(1)

sign = -1

for p in range(1,32):

sum += Decimal(sign)/Decimal((2*p+1)*(3**p))

sign = -sign

print(p, sqrt12*sum)

print("Result:", sqrt12*sum)

Результаты работы программы:

Шаг       Значение

1       3.079201435678004077382126829

2       3.156181471569954179316680000

3       3.137852891595680345522738769

4       3.142604745663084672802649458

5       3.141308785462883492635401088

6       3.141674312698837671656932680

7       3.141568715941784242161823554



Поделиться книгой:



Регистрация