MLoop 24

Условие задачи

Вычислите с точностью [latex]\varepsilon [/latex] сумму ряда [latex]\sum_{i=1}^{\infty} (-1)^{i}\cdot \frac{2^{i}}{\left ( 2\cdot i+1 \right )!} [/latex].

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

  1. В условии нужно найти сумму ряда,задан его общий член. Благодаря этому можно найти формулу, согласно которой каждый последующий член ряда выражается как предыдущий, умноженный на выражение: [latex]\frac{-2}{2 \cdot k + 3}[/latex].
  2. Вычисляется первый член ряда, предполагается, что он и будет равен сумме ряда, и этот член ряда сравнивается по модулю с заданной точностью [latex]\varepsilon [/latex].
  3. В случае, если требуемая точность не достигнута — подсчитывается следующий член ряда, он прибавляется к сумме и сравнивается по модулю с заданной точностью.
  4. Пункт 3 повторяется до тех пор, пока заданная точность не достигнута.

Код

Исправленный вариант

 

Тесты

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

(точность [latex]\epsilon [/latex])

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

(сумма ряда [latex]\sum_{i=1}^{\infty} (-1)^{i}\cdot \frac{2^{i}}{2\cdot i+1}[/latex])

e=1e-10 sum=-0.301544
 e=0.0001 sum=-0.301543
 e=0.001 sum=-0.301543
 e=0.01 sum=-0.301587
 e=0.1 sum=-0.3

Ссылки

7 thoughts on “MLoop 24

  1. — Лучше использовать \varepsilon как в Вашем учебнике мат. анализа.
    — В первой же формуле потеряли факториал в знаменателе. И давайте начинать не с нуля, а с единицы.
    — Зачем Вам два первых члена ряда? Вполне достаточно первого.
    — Ага, понятно. Вы просто неверно считаете погрешность. Погрешность это действительно модуль разности, но не между соседними членами ряда, а между соседними частичными суммами (если ряд сходится). А это и есть просто модуль next.
    — Вам не нужны одновременно два члена ряда. и нет смысла заводить две переменные prev и next. Т.е. ваш вариант сработает, но это совершенно излишне. Т.е. для перехода к следующему значению вполне достаточно написать next *= A.

  2. — Замените i += 1; на i++;. Это не ошибка, но выглядит как-то странно.
    — Где, собственно, тесты? Вы распечатали результаты работы программы для разных эпсилон. И это правильно. Но для тестирования нужно ещё сравнить с предположительно правильным результатом полученным другим способом. Вот, например, здесь получается другое число.
    eps=0.01; лучше читать из входного потока. Иначе программа получается рассчитанной только на одну и туже точность.

  3. Игорь Евгеньевич, спасибо, я нашла ошибку в вычислениях. Все исправила и сравнила с известным результатом из WolframAlpha.
    Кроме этого организовала ввод эпсилон из входного потока.

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