Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3605121
А
Аноним
22 апреля 2026 17:23 · публичный вопрос
А
Аноним

Какая последовательность шагов в алгоритме нахождения корня уравнения f(x)=0 на [a; b] методом половинного деления

Ответ нейросети
22 апреля 2026 17:23

Ниже подробное решение и пошаговый алгоритм для поиска корня уравнения f(x) = 0 на [a, b] методом половинного деления (бисекции).

Цель: понять принцип и уметь применить метод.

  1. Предпосылки и условия
  • Предположим, что функция f непрерывна на интервале [a, b].
  • Нужно, чтобы на концах интервала выполнялось f(a)·f(b) ≤ 0. Тогда по теореме о знаках на промежуке существует корень в [a, b]. Если f(a) = 0 или f(b) = 0 — сразу имеем корень на границе.
  • Если условия не выполняются, метод бисекции не гарантирует существование корня или корректности приближений.
  1. Пошаговый алгоритм (бисекция)
  • Шаг 0. Вводим значения a, b и целевую точность tol (или максимальное число итераций). Пусть L = a, R = b.

  • Шаг 1. Проверяем конечное условие: если f(L) = 0, корень — L; если f(R) = 0, корень — R.

  • Шаг 2. Проверяем условие, чтобы метод применим: если f(L)·f(R) > 0, сообщаем, что корня в этом интервале нет гарантии; при необходимости используем другой интервал или метод.

  • Шаг 3. Инициализация: пока (R − L) > tol выполняем:

    • вычисляем середину: m = (L + R) / 2.
    • вычисляем f(m).
    • если f(m) = 0, корень найден — m.
    • иначе проверяем знак:
      • если f(L)·f(m) ≤ 0, корень лежит в [L, m], тогда устанавливаем R = m.
      • иначе корень лежит в (m, R], устанавливаем L = m.
    • повторяем цикл.
  • Шаг 4. Остановка по условию: если (R − L) ≤ tol, берем приближённый корень как c = (L + R) / 2 (или можно взять любой пункт внутри [L, R], например m последней итерации). При желании можно дополнительно проверить |f(c)| и использовать его, если он меньше заданной погрешности.

  • Шаг 5. Расчёт числа итераций (для оценки): после n итераций длина интервала удовлетворяет (R − L) ≤ (b − a)/2^n, то миним n, чтобы достичь tol, равно n ≥ log2((b − a)/tol). Это полезно для планирования количества шагов.

  1. Что понимаем в каждом шаге
  • Этап выбора середины m обеспечивает постепенное уменьшение длины интервала вдвое.
  • Условие f(L)·f(m) ≤ 0 гарантирует, что в одном из половин интервала присутствует корень (признак знака при непрерывной функции).
  • Точный нуль f(m) встречается редко; чаще используют критерий по длине интервала (tol) или по значению функции |f(m)|.
  1. Пример (пояснение работы алгоритма) Пусть f(x) = x^2 − 3, интервал [1, 2], tol = 1e-4.
  • Проверяем: f(1) = -2, f(2) = 1 — знаки разные, условие выполнено.
  • L = 1, R = 2.
  • m = (1+2)/2 = 1.5, f(m) = 1.5^2 − 3 = -0.75.
    • f(L)·f(m) = (-2)·(-0.75) > 0, значит корень лежит во второй половине: L = m = 1.5.
  • m = (1.5+2)/2 = 1.75, f(m) = 1.75^2 − 3 = 0.0625.
    • f(L)·f(m) = (-0.75)·(0.0625) < 0, значит корень в [1.5, 1.75]: R = m = 1.75.
  • m = (1.5+1.75)/2 = 1.625, f(m) = 1.625^2 − 3 = -0.359375.
    • f(L)·f(m) = (-0.75)·(-0.359375) > 0, значит корень в [1.625, 1.75]: L = 1.625.
  • m = (1.625+1.75)/2 = 1.6875, f(m) = 1.6875^2 − 3 = -0.56640625.
    • f(L)·f(m) = (-0.359375)·(-0.56640625) > 0, корень в [1.6875, 1.75]: L = 1.6875.
  • И так далее... После достаточно нескольких шагов интервал будет длины менее tol, и середина даст приближённое значение корня sqrt(3) ≈ 1.732050...

(Замечание: точное число итераций зависит от tol. Пример: чтобы достигнуть tol = 1e-4 на интервале длиной 1, понадобится не более ceil(log2(1/1e-4)) = ceil(13.287...) = 14 итераций.)

  1. Плюсы, ограничения и советы
  • Преимущество: простота и гарантированная скорость с точностью, равной tol, при условии непрерывности f и знакового изменения на концах.
  • Ограничения: требуется непрерывность на [a, b] и f(a)·f(b) ≤ 0. Если корней несколько или функция не непрерывна, метод может найти произвольную одну точку или не сработать.
  • Выбор tol: чем меньше tol, тем больше итераций и точнее приближённое значение.
  • В реальном коде можно: выйти сразу, если |f(m)| ≤ ε, где ε — небольшая величина, чтобы ускорить остановку.

Если хочешь, могу привести конкретный псевдокод или псевдокод на языке Python/Java/C++, или применить метод к твоей конкретной функции f и заданному интервалу [a, b].