Pull to refresh

Задача, от которой отказался Ричард Фейнман

ProgrammingMathematics
Sandbox
В замечательной книге «Вы, конечно, шутите, мистер Фейнман!» есть эпизод, который привел меня к небольшой практической работе, что и послужило основой для создания данной статьи. А началось все с этого момента:
” Пол проходит по столовой, где все просто стоят на ушах. “Эй, Пол! – кричат они. – Фейнман – просто супер! Мы даем ему задачу, которую можно сформулировать за десять секунд, и он за одну минуту дает ответ с точностью до 10 процентов. Дай ему какую-нибудь задачу!” Почти не останавливаясь, он говорит: “Тангенс 10 градусов в сотой степени”. Я влип: для этого нужно делить на число пи до ста десятичных разрядов! Это было безнадежно!”.

В приведенном фрагменте переводчик ошибся. Пол Олам просит Фейнмана вычислить тангенс числа 10 в сотой степени. И речь идет о радианах, а не градусах. Именно в такой формулировке задача становится неподъемной для будущего нобелевского лауреата.
Я решил рассмотреть более простую задачу. А именно, как узнать сколько будет tg(10°) в сотой степени? Размышление над данным вопросом послужило толчком для проведения небольшого вычислительного эксперимента, результатами которого я и хочу поделиться. А начал я с того, что попросил Googlе вычислить названную величину. Ответ был дан мгновенно – 4,2842727е-76.
Тангенс это синус, деленный на косинус. Поэтому свои исследования я начал с решения более простой задачи. А именно, как найти синус 10 градусов и возвести его в сотую степень. Причем нам надо реализовать два различных метода, чтобы убедиться в правильности полученного результата. Все вычисления проводились на платформе 1С: Предприятие 8.2. Особенностью данной платформы является то, что результаты расчетов хранятся в текстовом виде, что снимает вопрос о количестве знаков после запятой и, как следствие, точности расчетов, по крайней мере, для операций сложения и умножения. Теперь определимся с вариантами расчета. Самый простой – это вычислить синус и затем умножить его на себя. Раз степень, в которую мы возводим четная, то вспомним про формулу косинуса двойного угла и запишем:

image


Поскольку при проведении расчетов, нам необходимо контролировать точность используемых данных, то косинус 20 градусов будем искать, как корень следующего уравнения:
4*cos³(20°)-3*cos(20°)=0,5
Данное уравнение получается из формулы для косинуса тройного угла. Для численного решения уравнения воспользуемся методом Ньютона. В дальнейшем найденное значение sin²(10°) умножаем само на себя 49 раз (можно, разумеется, сократить количество умножений, это в данном случае неважно).
Приведем таблицу с зависимостью проведенных расчетов от точности определения cos(20°).
image

Из полученных результатов видно, что точность в 10% достигается, когда входные данные содержат 4 значащих цифры после запятой.
Следующий пункт нашей исследовательской программы — поиск альтернативного способа расчета нужного произведения. Я делал расчет четной степени синуса, но использованный подход может быть применен и к тангенсу, просто это увеличит объем излагаемого материала. Заменим исходную функцию ее разложением в ряд Фурье. Разложение получим с использованием следующего тождества:
cos(α)*cos(β)=0,5*(cos(α-β)+cos(α+β))
Вот как мы его применяем.
sin²(x)* sin²(x)=(0,5-0,5cos(2x))(0,5-0,5cos(2x))
Раскроем скобки в правой части и затем заменим произведения косинусов их суммой. Затем полученную сумму опять умножим на (0,5-0,5 cos(2x)) опять раскроем скобки и еще раз проведем операцию замены произведения на сумму. Разумеется, изложенную процедуру я проводил с помощью программы на встроенном языке платформы 1С: Предприятие. В результате данных мероприятий было получено разложение исходной функции по базису из функций cos(2ix), где i меняется от 0 до 25. Найденное разложение мы в дальнейшем вычисляем в точке 10°=π/18. Приведем таблицу со значениями базисных функций в данной точке.



Для углов в диапазоне от 180° до 340° значения базисных функций будут отличаться от приведенных величин только знаком из-за сдвига на «пи». Теперь, когда есть значения базисных функции и есть коэффициенты разложения, можно провести альтернативный расчет. А вот в этом случае точность исходных данных должна быть сопоставима с точностью конечного результат, т.е не меньше чем 10⁻⁷⁷. Впрочем это и понятно. Когда мы складываем какие-то величины, то для получения нужной точности члены суммы должны быть рассчитаны с погрешностью не меньше предполагаемого результата. В следующей таблице приведены результаты расчета по изложенной методике для различной точности входных данных.

Приведенные числа согласуются с нашим замечанием о связи точности входных данных и конечного результата. В тоже время, они подтверждают достоверность предыдущих расчетов.
Ниже приведено изображение формы обработки, которую я применял в своих исследованиях

На данной форме, в частности, приведен спектр разложения в ряд Фурье функции sin¹⁰⁰ (x).
И так, с помощью вычислительной техники, которая стала значительно доступнее со времен атомного проекта, мы задачу решили. Но можно ли ее решить в уме, или хотя бы получить оценку порядка для конечного результата. Приведем возможную последовательность рассуждений.
Вспомним, что разложение функции tg²(x) по степеням sin²(x) имеет вид:
tg²(x)= sin²(x) +sin⁴(x)+sin⁶(x)+…
Оценку для sin(10°) получим из тождества:
sin(30°)=3sin(10°)-4sin³(10°)
Если отбросить кубический член, то оценка будет 1/6=0,166666, так как она занижена, то возьмем 0,17, а квадрат тангенса оценим в 0,03. Прологарифмируем искомую величину и получим
Ln(tg²(10°)⁵⁰)=50*(-2*Ln(10)+Ln(3))
Ln(3)=Ln(e*(1+0,3/e))≈1+Ln(1+1/9)=1,1
Вспомним, что Ln(10) ≈2,30.Тогда натуральный логарифм искомой величины будет равен
50*(-4,6+1,1)=-50*3,5=-2,3*50*35/23=2,3*50*(1+12/23)≈-2,3*50*(1+0,5*(1+1/24))=-2,3*50*1,52=-2,3*76.
Возведем e в полученную степень и приходим к результату 10⁻⁷⁶.

Заключение


В данной работе я не смог найти ответ на вопрос, который сформулировал Пол Олам. Тем не менее, приведенный анализ, с моей точки зрения, является неплохой демонстрацией того, как можно применять математические инструменты для решения задач, когда надо дойти до числа. Мне кажется, что изложенный материал можно использовать, как основу для практического занятия по вычислительной математике в старших классах.
Tags:численные методытригонометрия
Hubs: Programming Mathematics
Rating +41
Views 57.9k Add to bookmarks 99
Comments
Comments 33
WEB-разработчик
March 6, 202176,800 ₽GeekBrains
Программист iOS
March 6, 202157,600 ₽GeekBrains
Программист Android
March 6, 202167,200 ₽GeekBrains
PHP программист
March 6, 202138,400 ₽GeekBrains