MLoop 12

Задача. MLoop 12

Вычислите с точностью [latex]\varepsilon[/latex] значение функции [latex]f(x) = \arctan x[/latex]. При вычислениях допустимо использовать только арифметические операции.

Тесты

Входные данные Выходные данные
Точность Аргумент [latex]\arctan x[/latex] Погрешность
1 1 0.5 0.5 0.0363524
2 10 0.82 0.669293 0.0175249
3 100 0.77 0.652823 0.00335552
4 1000 1 0.666667 0.118731

Код программы

Для запроса на выполнение нажать здесь.

Решение

Для того, чтобы найти приблизительное значение [latex]\arctan x[/latex] возпользуемся формулой ряда Тейлора: [latex]\arctan x = x — \frac{x^3}{3} + \frac{x^5}{5} -[/latex] … [latex]= \sum_{n=0}^{\infty}\frac{(-1)^n}{2n+1}\cdot x^{2n+1}[/latex] для всех [latex]|x| \le 1[/latex]. Представим каждый член суммы как [latex]a_n = \frac{(-1)^n\cdot a^{2n+1}}{2n+1}[/latex], и будем рекурсивно вычислять числитель данной дроби [latex]m_n = m_{n-1} \cdot (- a^2)[/latex]. Тогда, будем находить значение очередного члена ряда по формуле [latex]a_n = \frac{m_n}{2n + 1}[/latex], пока [latex]a_n > \frac{1}{\varepsilon}[/latex].

Related Images:

7 thoughts on “MLoop 12

    • Спасибо, Игорь Евгеньевич, я исправила программу.

  1. Хорошо. Теперь гораздо легче читать структуру программы.
    Осталась проблема с реализацией. Вы правильно нашли рекурсивную формулу для вычисление очередного члена ряда по предыдущему. Но в Вашем случае рекурсивно следует вычислять только числитель (там, где степени). Знаменатель [latex]2i+1[/latex], Вы уже сосчитали рекурсивно, когда написали i++.
    Что нужно сделать? Заведите переменную для знаменателя и меняйте её по своей рекурсивной формуле — b *= -x*x;. А значение очередного члена ряда находите простым делением a = b / (2 * n + 1);.

    А почему нельзя так как делаете Вы? Т.е. на каждом шаге умножать на (2 * i - 1)) / (2 * i + 1). С математической точки зрения можно — числа в числителе и знаменателе будут сокращаться и получиться то, что нужно. Однако при компьютерных вычислениях возникает вычислительная погрешность связанная с хранением действительных чисел в виде конечной двоичной дроби. Это может приводить к накоплению погрешности и другим неприятным явлениям типа переполнения или исчезновения порядка.

Добавить комментарий