Задача. Вычислите с точностью [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 |
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <cmath> using namespace std; int main() { double x, e; cin>>x>>e; double sum1=x; // в случае, когда i=0 double sum2=-x*x*x/6; // в случае, когда i=1 for (int i=2; abs(1/sum2-1/sum1)>=e; i++) { sum1=sum2; sum2*=-x*x/((2*i)*(2*i+1)); } cout<<1/sum2<<endl; return 0; } |
Код программы на 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]-го слагаемых будет больше заданной точности.