MLoop 8

Условие:

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

Входные данные:

В единственной строке указаны два числа, разделенные пробелом: аргумент функции [latex]x[/latex] и точность [latex]\varepsilon[/latex].

Тесты:

Входные данные Выходные данные
[latex]x[/latex] [latex]\varepsilon[/latex] Результат
1 0.1 2.70833
1 0.001 2.71825
12 0.072 2.4155e+07

Решение:

Описание решения:

Для нахождения значения функции [latex]f(x)=e^x[/latex] (экспоненты) с точностью [latex]\varepsilon[/latex] воспользуемся формулой разложения Тейлора: [latex]f(x)=e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdots =\sum_{n=0}^{x^n}, x\in \mathbb{C}[/latex]. Запишем рекуррентное соотношение для нахождения каждого последующего члена: [latex]x_{n}=x_{n-1}\cdot\frac{x}{n}[/latex].Для нахождения искомого результата, будем прибавлять к значению [latex]result[/latex] новые члены до тех пор, пока они по модулю не станут меньше, чем [latex]\varepsilon[/latex].

Ссылка на код.

 

MLoop 15

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

Тесты

[latex]x[/latex] [latex]\varepsilon[/latex] Результат
42  0.3 -8.09848e-05
8 0.15 -0.0117188
55.5 0.04 -3.50972e-055
-12 0.6 0.00347222
-82 0.0001 -3.23677e-08

Код

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

Решение :

Косеканс — это тригонометрическая функция, которою можно определить формулой [latex]\csc x=\frac{1}{\sin x}[/latex]. Таким образом, мы можем разложить  функцию [latex]\sin x[/latex] в бесконечную сумму степенных функций, воспользовавшись формулой Тейлора. Получим, что [latex]\sin x=x-\frac{{x}^{3}}{3!}+\frac{{x}^{5}}{5!}-\dots=\sum_{n=0}^{\propto}\frac{{-1}^{n}\times{x}^{2n+1}}{\left(2n+1\right)!}[/latex]. Слагаемые данной суммы являются геометрической прогрессией, знаменатель который можно найти по формуле [latex]\frac{a_n}{a_{n-1}}=\frac{\frac{{-1}^{n}\times{a}^{2n+1}}{\left(2n+1 \right)!}}{\frac{{-1}^{n-1}\times{a}^{2n-1}}{\left(2n-1 \right)!}}=\frac{\left( -1\right){a}^{2}}{2n\times\left( 2n+1\right)}[/latex].  Будем вычислять сумму до тех пор, пока разность [latex]n[/latex]-го и  [latex]\left ( n+1 \right )[/latex]-го слагаемых  будет больше заданной точности.

MLoop 16

Постановка задачи

MLoop16.

Вычислите с точностью [latex]\epsilon[/latex] значение функции [latex]f\left( x \right) = \frac{\sin 2x}{x}[/latex]. При вычислениях допустимо использовать только арифметические операции.

Алгоритм решения

Разложим [latex]g \left( x \right) = \sin x[/latex] по формуле Тейлора с опорной точкой [latex]x_0 = 0[/latex] и остаточным членом в форме Лагранжа:
[latex]g \left( x \right) = P_n \left( x_0 ; x \right) + R_n \left( x_0 ; x \right)[/latex],
[latex]P_n \left( x_0 ; x \right) = g \left( x_0 \right) + \sum_{k = 1}^{n} \frac{g^{\left( k \right)} \left( x_0 \right) }{k!} \left( x — x_0 \right) ^k[/latex],
[latex]R_n \left( x_0 ; x \right) = \frac{g^{\left( n + 1 \right)} \left( \xi \right)}{\left( n + 1 \right) !}\left( x — x_0 \right) ^{n + 1} , x_0 < \xi < x[/latex].

Найдем производные [latex]g \left( x \right)[/latex]:
[latex]g’ \left( x \right) = \cos x = \sin \left( x + \frac{\pi}{2} \right)[/latex],
[latex]g» \left( x \right) = \cos \left( x + \frac{\pi}{2} \right) = \sin \left( x + 2 \frac{\pi}{2} \right)[/latex],
[latex]g»’ \left( x \right) = \cos \left( x + 2 \frac{\pi}{2} \right) = \sin \left( x + 3 \frac{\pi}{2} \right)[/latex],
[latex]\cdots[/latex]
[latex]g^{\left( k \right)} \left( x \right) = \cos \left( x + \left( k — 1 \right) \frac{\pi}{2} \right) = \sin \left( x + k \frac{\pi}{2} \right)[/latex].

Вычислим значение функции и ее производных в точке [latex]x_0[/latex]:
[latex]g \left( x_0 \right) = \sin x_0 = \sin 0 = 0[/latex],
[latex]g’ \left( x_0 \right) = \sin \left( x_0 + \frac{\pi}{2} \right) = \sin \frac{\pi}{2} = 1[/latex],
[latex]g» \left( x_0 \right) = \sin \left( x_0 + 2 \frac{\pi}{2} \right) = \sin \pi = 0[/latex],
[latex]g»’ \left( x_0 \right) = \sin \left( x_0 + 3 \frac{\pi}{2} \right) = \sin \frac{3 \pi}{2} = -1[/latex],
[latex]\cdots[/latex]
[latex]g ^{ \left( 2k — 1 \right) } \left( x_0 \right) = \sin \left( x_0 + \left( 2k — 1 \right) \frac{\pi}{2} \right) = \sin \left( \pi k + \frac{\pi}{2} \right) = \left( -1 \right) ^{k — 1}[/latex],
[latex]g ^{ \left( 2k \right) } \left( x_0 \right) = \sin \left( x_0 + 2k \frac{\pi}{2} \right) = \sin \pi k = 0[/latex].

Тогда
[latex]P_n \left( x_0 ; x \right) = \sum_{k = 1}^{ \lceil \frac{n}{2} \rceil } \frac{ \left( -1 \right) ^{k — 1} \cdot x^{2k — 1} }{ \left( 2k — 1 \right) ! }[/latex],
[latex]R_n \left( x_0 ; x \right) = \frac{\sin \left( \xi + \left( n + 1 \right) \frac{\pi}{2} \right) \cdot x ^{n + 1} }{ \left( n + 1 \right) ! }[/latex],
[latex]g \left( x \right) = \sum_{k = 1}^{ \lceil \frac{n}{2} \rceil } \frac{ \left( -1 \right) ^{k — 1} \cdot x^{2k — 1} }{ \left( 2k — 1 \right) ! } + \frac{\sin \left( \xi + \left( n + 1 \right) \frac{\pi}{2} \right) \cdot x ^{n + 1} }{ \left( n + 1 \right) ! }[/latex],
[latex]f \left( x \right) = \frac{ g \left( 2x \right) }{ x } = \sum_{k = 1}^{ \lceil \frac{n}{2} \rceil } \frac{ \left( -1 \right) ^{k — 1} \cdot \left( 2x \right) ^{2k — 1} }{ x \cdot \left( 2k — 1 \right) ! } + \frac{\sin \left( \xi + \left( n + 1 \right) \frac{\pi}{2} \right) \cdot \left( 2x \right) ^{n + 1} }{ x \cdot \left( n + 1 \right) ! }[/latex].

Осталось найти такое [latex]n \in \mathbb{N}[/latex], чтобы выполнялось неравенство
[latex]\left| \frac{\sin \left( \xi + \left( n + 1 \right) \frac{\pi}{2} \right) \cdot \left( 2x \right) ^{n + 1} }{ x \cdot \left( n + 1 \right) ! } \right| \le \left| \frac{ \left( 2x \right) ^ {n + 1} }{ x \left( n + 1 \right) ! } \right| < \epsilon[/latex].

Для ускорения вычислений зададим реккурентную формулу для слагаемых суммы
[latex]\sum_{k = 1}^{ \lceil \frac{n}{2} \rceil } \frac{ \left( -1 \right) ^{k — 1} \cdot \left( 2x \right) ^{2k — 1} }{ x \cdot \left( 2k — 1 \right) ! }[/latex].
Представим каждое слагаемое суммы в виде
[latex]\alpha_k = \alpha_{k — 1} \cdot b_k = \frac{ \left( -1 \right) ^{k — 1} \cdot \left( 2x \right) ^{2k — 1} }{ x \cdot \left( 2k — 1 \right) ! }[/latex].
Выразим [latex]b_k[/latex]:
[latex]b_k = \frac{ \alpha_k }{ \alpha_{ k — 1 } } = \frac{ \left( -1 \right) ^ {k — 1} \cdot \left( 2x \right) ^ {2k — 1} \cdot x \left( 2 \left( k — 1 \right) — 1 \right) ! }{ x \left( 2k — 1 \right) ! \cdot \left( -1 \right) ^ { \left( k — 1 \right) — 1 } \cdot \left( 2x \right) ^ {2 \left( k — 1 \right) — 1} } = — \frac{4x^2}{\left( 2k — 2 \right) \left( 2k — 1 \right)}[/latex].
Тогда
[latex]\alpha_k = \begin{cases} 2 & k = 1, \\ \alpha_{k-1} \cdot b_k & k > 1. \end{cases}[/latex]

Тесты

Входные данные Выходные данные
[latex]x[/latex] [latex]\epsilon[/latex] [latex]f\left( x \right) = \frac{\sin 2x}{x} + \lambda, \lambda\in\left( -\epsilon;\epsilon \right)[/latex]
[latex]\frac{5\pi}{2}[/latex]  [latex]0[/latex]  [latex]\frac{2}{5\pi}[/latex]
 [latex]\pi[/latex]  [latex]0.01[/latex]  [latex]0[/latex]
 [latex]0[/latex]  [latex]0.1[/latex]  [latex]\emptyset[/latex]

Реализация

ideone: ссылка

MLoop 4

Настя Панько
Настя Панько

Latest posts by Настя Панько (see all)

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

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

Тесты

Входные данные Входные данные Выходные данные
x e sin(x)
1 0,01 0,841471
3 0,01 0,14112
4 0,001 -0,756802
7 0,0001 0, 656987

Решение

Необходимо использовать формулу Тейлора, а именно ряд Маклорена, чтобы представить функцию

[latex]f(x)[/latex] = [latex]\sin x[/latex]

Эта формула имеет такой вид [latex]\sin x[/latex] = [latex]\sum _ { n=0 }^{ \infty }{ { (-1) }^{ n } } \frac { { x }^{ 2n+1 } }{ (2n+1)! }[/latex].

Подключаем заголовочный файл cmath для использования функции abs(). Построим реккурентную формулу для [latex]x_n[/latex] через  [latex]x_{n-1}[/latex] для [latex]n > 1 \left(x_0=x\right)[/latex]. Для этого найдем отношение последующего члена ряда к предыдущему [latex]k = \frac{x_n}{x_{n-1}} = -\frac{x^2}{2n\cdot(2n + 1)}[/latex].

Используем функцию while, чтобы проверить является ли член ряда  [latex]x_n[/latex] больше [latex]e[/latex].

Ideone.com