Загрузка данных


import math

# ================== ЗДЕСЬ ЗАДАЁТСЯ УРАВНЕНИЕ ==================
def function(x):
    return 2 * math.log(x) - x ** 2 + 5      # 2*ln(x) - x^2 + 5 = 0
# ==============================================================

EPSILON = 0.0001

# Отрезки, на каждом из которых по одному корню (найдены по таблице знаков)
segments = [(0.01, 0.1), (2, 3)]

for left, right in segments:
    value_left = function(left)
    value_right = function(right)

    # Проверка знаков ДО цикла
    if value_left * value_right > 0:
        print(f"На отрезке [{left}; {right}] нет смены знака")
        continue

    previous_x = None
    iterations = 0

    while True:
        x = (left + right) / 2
        value_x = function(x)
        iterations += 1

        # Проверка 1: x - точный корень
        if value_x == 0:
            break

        # Проверка 2: |x(n) - x(n-1)| < EPSILON
        if previous_x is not None and abs(x - previous_x) < EPSILON:
            break

        # Выбор половины отрезка
        if value_left * value_x < 0:
            right = x
        else:
            left = x
            value_left = value_x

        previous_x = x

    print(f"Корень: {x:.8f}, итераций: {iterations}")