Существует метод Монте-Карло работающий на рандоме: мы берем круг единичного радиуса и квадрат со стороной равной 2 (2 * R), центры должны совпадать, далее генерируем множество точек со случайными координатами внутри этого квадрата. Далее считаем сколько точек попало во внутрь круга, ну и запоминаем сколько мы сгенерировали всего точек, их соотношение будет числом пи, поделённым на 4. Мы будто вычисляем площади круга и квадрата, генерируя эти точки. Формульное выражение: Sкруга / Sквадрата = π R^2 / a^2 = π R^2 / (2 R )^2= π R^2 / (2 R)^2 = π / 4
В эту тему есть задача Бюффона по бросанию иглы на линованный лист. Мат ожидание пересечений = 2* длина иглы/ (расстояние разлиновки*pi). А из более действенных методов, для реального расчета часто используют формулу Рамануджана.
Здесь возникает дополнительная задача: сколько случайнух точек нужно набросать на этот квадрат, чтобы получить результат с заданной доверительной точностью, и эта задача отнюдь не проста. Более того, нужно иметь очень хороший датчик случайных точек. В частности, если между координатами (х,у) есть некоторая корреляция (напр., точки имеют тенденцию выстраиваться вдоль некоторой полосы, вы получите не отношение площадей круга и квадрата, а отношение площадей ПЕРЕСЕЧЕНИЯ полосы с кругом и квадратом). Как видите, этот путь, выглядящий простым, только кажется лёгким.
В популярном журнале ЮТ (советской эпохи) в 70-х было опубликована информация для эрудитов что в Японии один человек в течении двух часов называл число ПИ с каждым разом называя следующую цифру после запятой - десятую сотую тысячную десятитысячную и т.д...
Отличный контент :) Очень рекомендую поработать над дикцией и скоростью подачи. На мой взгляд, это основное, что отделяет канал от более популярных. ФП в массы!
Есть красивый способ вычисления π с точностью 6 знаков. Берём число 113355, режем его посередине и делим второе на первое: 355/113. В том, что это всё слепили из первых нечётных чисел, взятых по два раза, никакой теории нет, но как очень удобное правило для запоминания, прекрасно подходит. А теперь вопрос. Традиционно длину окружности вычисляют как предел периметра вписанных в неё ПРАВИЛЬНЫХ многоугольников. При этом явно используется как раз правильность многоугольников (см. текст программы в ролике). Но для корректности следует ещё показать, что результат не изменится, если многоугольники будут произвольными - лишь бы их максимальная сторона стремилась к нулю. Заранее нельзя быть уверенным, что, рассматривая многоугольники другого класса, мы не получим другое предельное значение периметра - т.е. другое значение для "числа π". К сожалению, этот момент упускают из виду.
было бы неплохо выводить не только количество знаков, но и время выполнения, чтобы было примерно понятна производительность алгоритма и языка. Самое производительное что я смог написать используя питон и тырнет, это функцию рассчитывающую 6 символов за 2 секунды и 10кк итераций цикла, причём увеличение количества циклов в 10 раз, в лучшем случае даст ещё 1 число(( я плохо знаю программирование и возможно есть более оптимальные варианты, но я их не нашёл. Единственное что я еще не пробовал, это распараллелить функцию на 2 потока, но надо сначала разобраться как это сделать))) def pi2(a,b): # Ряд Лейбница i01 = 0 i02 = 1 for i in range(a+2,b,4): i01 -= 1/(i) #print('iter1', i) for i in range(a+4,b,4): i02 += 1/(i) #print('iter2', i) return round(4*(i01+i02),20) P.S. 3.141592628586352 # Ряд Лейбница 3.1415926535897932384626433832795028841971693993 оригинал time ~2.062467575073242
Кому интересно, я нашел алгоритм, который вычисляет 999 знаков, причем очень быстро, но как это происходит я не вкурсе. Если я правильно понял, то он основан на алгоритме Чудновского язык: python import decimal from decimal import Decimal, getcontext def pi(): decimal.getcontext().prec += 2 # extra digits for intermediate steps three = decimal.Decimal(3) # substitute "three=3.0" for regular floats lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24 while s != lasts: lasts = s n, na = n + na, na + 8 d, da = d + da, da + 32 t = (t * n) / d s += t decimal.getcontext().prec -= 2 return +s# unary plus applies the new precision decimal.getcontext().prec = 1000 print(pi())
Архимед не оперировал алгебраическими методами, а только геометрическими. Понятие интеграл и предел тогда тоже не существовали. И нашел АРХИМЕД 22/7 не более
Услышал, как автор пару раз "многоугольник" не смог выговорить. Думаю, ну пиздец научпопа мне подкинуло. А это программист. Пока канал маленький - можно забить) но потом... либо обыгрывать, либо перезаписывать =( Неужали без интернета смог узнать как Пифагор расчитал радиус окружности? В школе наверное нам и рассказывали это, но уже столько лет прошло.. Я для себя просто запомнил, что можно 22/7 делить) точность до пятого знака кажется
С "Многоугольником" у меня туговато)) Спасибо за комментарий - буду исправлять) Конечно не без интернета - без интернета тоже только вспомнил 22/7)) ЗЫ Радиус окружности то известен - рассчитал сторону следующего многоугольника)) И не Пифагор - а Архимед)
@@wolf_code кстати на veritasium было видео, про то как число пи вычислял Ньютон, его способ естественно более быстрый. На wiki нашёл алгоритмы которые якобы удваивают число известных знаков после запятой каждую итерацию, но у меня они не работали. Если получится такой алгоритм написать, можешь снять видео
Существует метод Монте-Карло работающий на рандоме: мы берем круг единичного радиуса и квадрат со стороной равной 2 (2 * R), центры должны совпадать, далее генерируем множество точек со случайными координатами внутри этого квадрата. Далее считаем сколько точек попало во внутрь круга, ну и запоминаем сколько мы сгенерировали всего точек, их соотношение будет числом пи, поделённым на 4.
Мы будто вычисляем площади круга и квадрата, генерируя эти точки.
Формульное выражение: Sкруга / Sквадрата = π R^2 / a^2 = π R^2 / (2 R )^2= π R^2 / (2 R)^2 = π / 4
В эту тему есть задача Бюффона по бросанию иглы на линованный лист. Мат ожидание пересечений = 2* длина иглы/ (расстояние разлиновки*pi). А из более действенных методов, для реального расчета часто используют формулу Рамануджана.
Здесь возникает дополнительная задача: сколько случайнух точек нужно набросать на этот квадрат, чтобы получить результат с заданной доверительной точностью, и эта задача отнюдь не проста.
Более того, нужно иметь очень хороший датчик случайных точек. В частности, если между координатами (х,у) есть некоторая корреляция (напр., точки имеют тенденцию выстраиваться вдоль некоторой полосы, вы получите не отношение площадей круга и квадрата, а отношение площадей ПЕРЕСЕЧЕНИЯ полосы с кругом и квадратом). Как видите, этот путь, выглядящий простым, только кажется лёгким.
Отличное видео, интересная подача. Поработай мальца над дикцией( скороговорки и тп) и будешь топчиком😉
Контент 🔥 Продолжай в том же духе! Удачки!
В популярном журнале ЮТ (советской эпохи) в 70-х было опубликована информация для эрудитов что в Японии один человек в течении двух часов называл число ПИ с каждым разом называя следующую цифру после запятой - десятую сотую тысячную десятитысячную и т.д...
Интересная подача, стиль повествования и примеры с прикладным кодом
Продолжай в том же духе
Отличный контент :)
Очень рекомендую поработать над дикцией и скоростью подачи. На мой взгляд, это основное, что отделяет канал от более популярных. ФП в массы!
Очень интересный материал и подача мне понравилась. Жду еще больше твоего "научпопа"
Как Архимед число ПИ считал
Есть красивый способ вычисления π с точностью 6 знаков. Берём число 113355, режем его посередине и делим второе на первое: 355/113. В том, что это всё слепили из первых нечётных чисел, взятых по два раза, никакой теории нет, но как очень удобное правило для запоминания, прекрасно подходит.
А теперь вопрос. Традиционно длину окружности вычисляют как предел периметра вписанных в неё ПРАВИЛЬНЫХ многоугольников. При этом явно используется как раз правильность многоугольников (см. текст программы в ролике). Но для корректности следует ещё показать, что результат не изменится, если многоугольники будут произвольными - лишь бы их максимальная сторона стремилась к нулю. Заранее нельзя быть уверенным, что, рассматривая многоугольники другого класса, мы не получим другое предельное значение периметра - т.е. другое значение для "числа π". К сожалению, этот момент упускают из виду.
а потом пришёл товарищ Гаусс и сказал что всё считается не так)))
было бы неплохо выводить не только количество знаков, но и время выполнения, чтобы было примерно понятна производительность алгоритма и языка. Самое производительное что я смог написать используя питон и тырнет, это функцию рассчитывающую 6 символов за 2 секунды и 10кк итераций цикла, причём увеличение количества циклов в 10 раз, в лучшем случае даст ещё 1 число((
я плохо знаю программирование и возможно есть более оптимальные варианты, но я их не нашёл. Единственное что я еще не пробовал, это распараллелить функцию на 2 потока, но надо сначала разобраться как это сделать)))
def pi2(a,b): # Ряд Лейбница
i01 = 0
i02 = 1
for i in range(a+2,b,4):
i01 -= 1/(i)
#print('iter1', i)
for i in range(a+4,b,4):
i02 += 1/(i)
#print('iter2', i)
return round(4*(i01+i02),20)
P.S.
3.141592628586352 # Ряд Лейбница
3.1415926535897932384626433832795028841971693993 оригинал
time ~2.062467575073242
Кому интересно, я нашел алгоритм, который вычисляет 999 знаков, причем очень быстро, но как это происходит я не вкурсе. Если я правильно понял, то он основан на алгоритме Чудновского
язык: python
import decimal
from decimal import Decimal, getcontext
def pi():
decimal.getcontext().prec += 2 # extra digits for intermediate steps
three = decimal.Decimal(3) # substitute "three=3.0" for regular floats
lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
while s != lasts:
lasts = s
n, na = n + na, na + 8
d, da = d + da, da + 32
t = (t * n) / d
s += t
decimal.getcontext().prec -= 2
return +s# unary plus applies the new precision
decimal.getcontext().prec = 1000
print(pi())
круто
метод в видео не скажу что эффективен
просто он самый простой и понятрый и первый из придуманных способов
Супер, продолжай
Можно ли этот метод реализовать на языке СИ?
конечно
а что за язык на котором ты пишешь ?
Scala
Через матанчик пи лучше считать, при меньших вычислениях большая точность
Ага можно вывести ряд, ускорить его сходимость и потом на расслабоне и чиле
Архимед не оперировал алгебраическими методами, а только геометрическими. Понятие интеграл и предел тогда тоже не существовали. И нашел АРХИМЕД 22/7 не более
Ерм... Ну вообще-то.. число π - трансцендентое число🤓☝️
Кто-то посмотрел видео с канала веритасиум, но решил не палиться и не использовать метод Ньютона D:
Вдохновился точно тем видео, но там Дерек не необъяснил подробно как работает метод Архимеда)
Вот способ Ньютона ruclips.net/video/A3PL61fHzjs/видео.html
Мб лучше на джаве или колтлине. Не так много людей кто знает скалу и для него были бы ценны задачки такого уровня сложности.
Джава громоздкая (8, 11 точно)
Котлин я не изучал
П. С. одна из целей канала - популяризация scala))
линейной алгерой не получмтся только с интегралами
А шо это за демонический язык ? Какой нибудь лисп, джулия, скала, эрланг?
scala)
как же люди боятся неизведанного
как по мне (после плюсов, джавы) очень лаконичный синтаксис
@@wolf_code а как-же шарп?
@@Light-vu9kl крутой язык
Услышал, как автор пару раз "многоугольник" не смог выговорить. Думаю, ну пиздец научпопа мне подкинуло. А это программист. Пока канал маленький - можно забить) но потом... либо обыгрывать, либо перезаписывать =(
Неужали без интернета смог узнать как Пифагор расчитал радиус окружности? В школе наверное нам и рассказывали это, но уже столько лет прошло..
Я для себя просто запомнил, что можно 22/7 делить) точность до пятого знака кажется
С "Многоугольником" у меня туговато))
Спасибо за комментарий - буду исправлять)
Конечно не без интернета - без интернета тоже только вспомнил 22/7))
ЗЫ Радиус окружности то известен - рассчитал сторону следующего многоугольника)) И не Пифагор - а Архимед)
@@wolf_code кстати на veritasium было видео, про то как число пи вычислял Ньютон, его способ естественно более быстрый. На wiki нашёл алгоритмы которые якобы удваивают число известных знаков после запятой каждую итерацию, но у меня они не работали. Если получится такой алгоритм написать, можешь снять видео
@@sadwork4384 видео смотрел - крутое
да попробую конечно
22÷7=π