Задача: Численно убедиться в справедливости равенства [latex]\frac{1}{4}\ln{\frac{1+x}{1-x}}+\frac{1}{2}\arctan{x}=\quad x+\frac{{x}^{5}}{5}+\dots+\frac{{x}^{4n+1}}{4n+1}+\dots[/latex], для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части, с заданной погрешностью [latex]e[/latex]. Испытать разложение на сходимость при разных значениях аргумента, оценить скорость сходимости, для чего вывести число итераций [latex]n[/latex] слагаемых, необходимых, для достижения заданной точности. Интервал для этой задачи: [latex]-1<x<1[/latex].
Ввод | Вывод | ||
[latex]x[/latex] | Погрешность | Output | Комментарий |
-0.99 | 1e-4 | 148 | Пройден |
0.99 | 1e-4 | 148 | Пройден |
0.99 | 1e-14 | 685 | Пройден |
0.7 | 1e-10 | 14 | Пройден |
-0.3 | 1e-13 | 6 | Пройден |
0.001 | 1e-13 | 1 | Пройден |
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, e; //Переменная и погрешность scanf("%lf %le", &x, &e); double curr = 1./4.*log((1.+x)/(1.-x)) + (1./2.)*atan(x); //Левая часть выражения int count = 0; //Счетчик double y = x; //i-тое слагаемое double sum = x; //Сумма for(; fabs(sum-curr) > e; count++){ double n = (4.*count+1.)/(4.*count+5.); y = y*x*x*x*x*n; sum += y; } count++; printf("%d", count); return 0; } |
Каждую итерацию цикла инкрементируем счетчик [latex]count[/latex]. Переменную [latex]y[/latex], которая соответствует i-тому слагаемому суммы, увеличивают до значения следующего слагаемого и прибавляют к сумме. Далее проверяем разность частичной суммы и заданного значения [latex]curr[/latex]. Если эта разность будет удовлетворять нашей точности, то число [latex]count[/latex] и будет количеством слагаемых в правой части.
Замечание: После цикла значение [latex]count[/latex] вновь инкрементируется, это сделано по следующей причине: сумма изначально содержала в себе первое слагаемое. Если сумма бы изначально содержала в себе 0, то нам пришлось бы вычислять лишнее слагаемое.
— Название кода взято из другой задачи. Оно и там было не совсем корректно, а здесь еже и вовсе неуместно. Наведите порядок.
— «i-тый слагаемое»
— (1./4.)*log — скобки излишни
— «проверяем разность суммы и заданного значения» — частичной суммы
Исправлено
Принято