Ю3.27

Задача:  Численно убедиться в справедливости равенства, для чего для заданного значения аргумента [latex]x[/latex] вычислить левую его часть и разложение, стоящее в правой части с заданной погрешностью [latex]\varepsilon [/latex]. Испытать разложение на сходимость при разных значениях аргумента, найти скорость сходимости, для чего вывести число итераций [latex]n[/latex] (слагаемых или сомножителей), необходимых для достижения заданной точности. В некоторых задачах указан интервал допустимых значений аргумента [latex]x[/latex], при которых сходимость гарантируется.

[latex]\ln \left(1-x \right)=-\left(x+\frac{x^{2}}{2}+\frac{x^{3}}{3}+\cdot \cdot \cdot +\frac{x^{n}}{n}+\cdot \cdot \cdot \right)[/latex],   [latex]x<1[/latex]
[latex]x[/latex] [latex]eps[/latex] Левая часть Правая часть Количество шагов
0.1 0.001 -0.105361 -0.105 3
0.1 0.000001 -0.105361 -0.105360 6
0.5 0.001 -0.693147 -0.692262 8
0.5 0.000001 -0.693147 -0.693146 17
0.95 0.001 -2.995732 -2.994775 101
0.95 0.000001 -2.995732 -2.995731 222

C++:

Java:

Для переменных [latex]x, eps, a, b, c[/latex] я использовала double, так как [latex]x<1[/latex] и [latex]eps[/latex] ([latex]\varepsilon [/latex]) — вещественные числа, которые вводит пользователь, [latex]a, b, c[/latex] используются для вычислений, поэтому тоже вещественные. Для переменной [latex]n[/latex] (в неё записывается количество шагов цикла) я использовала тип int, т.к. это целые числа.

Сперва вычисляем значение переменной [latex]a[/latex] — левую часть равенства.

Для вычисления правой части используем цикл for, который работает пока [latex]\left|a-b \right|\geq eps[/latex] (т.е. различие между правой и левой частью больше, чем погрешность, заданная пользователем).
При каждом шаге переменная [latex]n[/latex] увеличивается на единицу для подсчёта скорости сходимости.
Переменная [latex]c[/latex] обозначает элемент суммы, а [latex]b[/latex] — сумму элементов в правой части равенства.

Эта задача на Ideone:
C++
Java

Related Images:

6 thoughts on “Ю3.27

  1. Вы получили ответ «Не хватило шагов.» на третьем тесте, видимо, потому, что забыли присвоить переменной n (количество шагов) начальное значение. Вот отсчет шагов у Вас и начался не с нуля
    У Вас в отчете написано модуль a-b больше eps и n < limit, а в программе меньше или равно и больше или равно соответственно. Что из этого верно?
    Чтобы оценить «скорость сходимости» нужно для одного и того же x посчитать значение с разной точностью (все лучшей и лучшей точностью) и посмотреть как увеличивается необходимое количество слагаемых. И этот процесс желательно проделать при разных значениях x, например 0.1, 0.5 и 0.9, как Вы выбрали.

    Вместо функции pow степень можно вычислять рекуррентно, домножая уже подсчитанную степень на x.

  2. Вы не исправили:
    «Вместо функции pow степень можно вычислять рекуррентно, домножая уже подсчитанную степень на x.»
    В коде на ideone рекуррентное вычисление есть,

    но совсем не того, что нужно. Прочтите внимательно — рекуррентно у Вас можно считать только степень. А Вы еще и на i делите. В результате в знаменателе получаете факториал. Конечно, никаких шагов не хватит — левая и правая части у Вас не будут сближаться. А сходиться должно очень быстро.
    0.1 0.0001 — 4 шага
    0.95 0.0002 — 128 шагов (что это за ограничение в 100 шагов?)
    0.95 1e-12 — 477 шагов

    Будьте внимательны. Повторные проверки отнимают время у нас и заставляют Вас ждать заранее известного ответа. Да и повторные проверки обнаруживают новые недочёты.

    • Теперь точно исправила. Я так поняла, ограничивать количество шагов не нужно?

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