Хитрый синус [1]

Известно, что ряд Тейлора для синуса:

\(sin(x)=x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+...\)

сходится для всех значений \(x\). При этом, т.к. ряд знакопеременный, погрешность вычисления суммы ряда не превосходит первого отброшенного слагаемого. Теоретически можно использовать эту формулу и критерий остановки для расчета синуса с высокой точностью при любых значениях \(x\). Так ли это?

Задания

  • Напишите функцию вычисляющую сумму ряда с тчностью до \(10^{-18}\).
  • Проверьте ее работу для \(x=\pi/6\).
  • Для какого максимального \(n\), такого что \(x=\pi/6+2\pi*n\), функция работает правильно?
  • Постройте график логарифма погрешности вычислений от \(n\).
  • Почему правильная математическая формула дает при вычислении неверный результат?

Подсказки

  • Фрагмент кода может выглядеть так

    def my_sin(x,err=1e-18):
        """ функция вычисления синуса как сумму ряда с заданной точностью
        """
        k = 1
        a = x
        sum = a
        while abs(a) > err:
    #       a =   			# добавьте вычисление элемента ряда
            k += 2
            sum +=a
        return sum
    
  • Проанализируйте значение максимального эемента ряда для разных \(n\).

  • Постройте график зависимости \(log(NumericalError)\) от \(log(a_{max})\).

Решение

[1]Мак-Кракен Д., Дорн У. Численные метода и программирование на фортране. М:Мир 1977, 584с.