MLoop7

Задача

Вычислите с точностью \epsilon значение функции f\left( x \right) = \tan x. При вычислениях допустимо использовать только арифметические операции.

Решение

Функцию [latex]f(x)=\tan x [/latex] можно представить в виде: [latex]f(x)=\frac{\sin x}{\cos x}[/latex] (по свойствам тангенса). Поэтому будем раскладывать в ряд две функции: [latex]\sin x[/latex] и [latex]\cos x[/latex].

Для решения задачи необходимо воспользоваться формулой Тейлора  с опорной точкой x_{0}=0 (ряд Маклорена). Для функции [latex]f(x)=\sin x[/latex]  она имеет следующий вид:

[latex]f(x)=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}-\cdots=\sum_{n=0}^{\infty}(-1)^{n}\frac{x^{2n+1}}{(2n+1)!}[/latex]

А для [latex]f(x)=\cos x[/latex]:

[latex]f(x)=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}-\cdots=\sum_{n=0}^{\infty}(-1)^{n}\frac{x^{2n}}{(2n)!}[/latex]

Далее нам нужно найти рекуррентные формулы для членов данных рядов.

[latex]\frac{a_n}{a_n-_1}=\frac{-x^{2}}{(2n+2)(2n+3)}[/latex];

[latex]\frac{b_n}{b_n-_1}=\frac{-x^{2}}{(2n+1)(2n+2)}[/latex]

При помощи функции fmod удалим период, так как тангенс [latex]\pi[/latex] периодичная функция.

Затем необходимо накапливать сумму текущих членов ряда для синуса и косинуса соответственно до тех пор, пока слагаемое не будет меньше заданной точности.

Код

 

Тесты

Входные данные Выходные данные
0.42 0.001 0.446569
1.52 0.001 19.9377
3.1415 0.0001 -0.000113798

Задача взята отсюда.

Код программы на Ideone.com.

Related Images:

3 thoughts on “MLoop7

  1. Вас смутили числа Бернулли в разложении тангенса? Там совсем не так сложно, как может показаться на первый взгляд. Решение через синус и косинус получить вроде проще, но всплывает много мелких камушков, о которые можно споткнуться.
    — Вы пишите «нам нужно найти рекуррентную форму для членов данного ряда». Но никакого ряда у Вас нет! У Вас частное. В числителе и знаменателе — суммы рядов. К счастью они сходятся и всё будет хорошо. Но частное это не ряд и общего члена у него соответственно нет.
    — Я даже не рискую предположить, какие ужасные ошибки скрываются за этой записью [latex]\frac{a_n}{b_n}=\frac{\frac{-x^{2}}{(2n+1)(2n+2)}}{\frac{-x^{2}}{(2n+2)(2n+3)}}[/latex] и что Вы при этом думали 🙂 Если увидит кто-то с кафедры матанализа…
    — Программа отнюдь не так безумна, как пояснения. Думаю, она бы меня вполне устроила. Жаль Вы так затянули с публикацией.

    Что нужно будет переделать? Нужно откровенно написать, что тангенс Вы в ряд раскладывать не будете. Вместо этого разложите в ряд синус и косинус. Для членов каждого из рядов Вы совершенно верно нашли отношение предыдущего к последующему. Только не нужно смешивать эти ряды. И запишите правильно обе найденные рекуррентные формулы.

    • Игорь Евгеньевич, исправила. Проверьте, пожалуйста.

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