Задача
Численно убедится в справедливости равенства для заданного значения аргумента [latex]x[/latex] на заданное значение погрешности [latex]\varepsilon[/latex]. Вывести число итераций.
[latex]sinx=[/latex][latex] x-\frac{x^3}{3!}+[/latex][latex]\frac{x^5}{5!}[/latex][latex]-\dots+[/latex][latex](-1)^{n-1}[/latex][latex]\frac{x^{2n-1}}{(2n-1)!}[/latex]Тест
[latex]x[/latex] | Delta | Результат(wolframalpha) | |
0 | 0 | 0.001 | 0 |
3.14 | [latex]\pi[/latex] | 0.0001 | 0.00161324 |
1.57 | [latex]\pi/2[/latex] | 0.00001 | 1 |
1.05 | [latex]\pi/3[/latex] | 0.0001 | 0.86602 |
2.06 | [latex]2\pi/3[/latex] | 0.0001 | 0.869296 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> #include <math.h> using namespace std; int main() { double x, elem, sum = 0, delta; cin >> x >> delta; double si = sin(x), rs = 1 + delta; elem = x; for (int i = 1; rs > delta; i++) { sum += elem; elem *= (-1) * x * x / (2 * i)/(2 * i + 1); rs = fabs( si - sum); } cout << " x = "; cout << " sin(" << x << ") = "<< sum << endl; return 0; } |
Решение
Каждый последующий член ряда рекурсивно выражается через предыдущий. Суть решения в том, что получая аргумент мы фиксируем левую часть выражения, вычисляя значение синуса от данного аргумента, а затем проверяем сколько слогаемых нам потребуется, чтобы вторая часть отличалась от первой на заданное значение дельта. А ответ показывает значения левой и итоговой правой частей.
Вроде всё хорошо. Детали обсудим на экзамене.