Метод Ньютона: быстрая сходимость по касательной

Если бисекция надёжна, но медленна, то метод Ньютона стремителен — он удваивает число верных цифр за шаг.

Метод Ньютона ищет корень, скользя по касательным: от текущей точки он идёт туда, где касательная к графику пересекает ось x.

Идея метода

Стоим в точке x. Проводим касательную к графику (её наклон — производная f'(x)). Касательная — прямая, её корень найти легко; принимаем его за следующее приближение:

x_next = x - f(x) / f'(x)

Повторяем. Если старт близко к корню и функция «приличная», метод сходится поразительно быстро.

       f(x)
        |   /
        |  /  <- касательная в точке x
   ─────+─●──────── x
        | x_next  <- корень касательной = новое приближение

Реализация на чистом Python

Найдём √2 как корень f(x) = x² − 2, у которого f'(x) = 2x:

def f(x):
    return x * x - 2

def df(x):
    return 2 * x

x = 1.0                         # стартовое приближение
for step in range(6):
    x = x - f(x) / df(x)        # шаг Ньютона
    print("шаг", step + 1, "->", x)

print("Точно sqrt(2) =", 2 ** 0.5)

Вывод:

шаг 1 -> 1.5
шаг 2 -> 1.4166666666666667
шаг 3 -> 1.4142156862745099
шаг 4 -> 1.4142135623746899
шаг 5 -> 1.4142135623730951
шаг 6 -> 1.414213562373095
Точно sqrt(2) = 1.4142135623730951

Смотрите, как стремительно: уже на 4-м шаге совпали 13 знаков. Это и есть знаменитая квадратичная сходимость — число верных цифр примерно удваивается за итерацию.

А в SciPy — одна строка

from scipy.optimize import newton

root = newton(lambda x: x**2 - 2, x0=1.0, fprime=lambda x: 2*x)
print(root)   # 1.4142135623730951

# производную можно не давать — SciPy оценит её численно (метод секущих)
root2 = newton(lambda x: x**2 - 2, x0=1.0)
print(root2)  # тоже ~1.41421356

Как работает под капотом

Откуда берётся квадратичная сходимость? Касательная — это первые два члена ряда Тейлора функции. Отбрасывая остаток (~ ошибка²), мы на каждом шаге «съедаем» квадрат предыдущей погрешности: если ошибка была 0.01, станет ~0.0001, потом ~0.00000001. Отсюда удвоение точных цифр. Но у скорости есть цена: метод требует производную и хороший старт. Если f'(x) близко к нулю (горизонтальная касательная), следующее приближение «улетит» далеко; при неудачном старте метод может зациклиться или разойтись.

Бисекция против Ньютона

СвойствоБисекцияНьютон
Сходимостьлинейная (×2 за шаг)квадратичная (очень быстро)
Нужна производнаянетда (или её оценка)
Гарантия сходимостида (при смене знака)нет (может разойтись)
Чувствительность к стартунизкаявысокая

Частые ошибки

  • Производная около нуля. Деление на крошечное f'(x) выбрасывает приближение в космос.
  • Плохой старт. Далеко от корня метод может уйти не туда или зациклиться между двумя точками.
  • Нет проверки сходимости. Всегда ставьте лимит итераций и порог по |f(x)|, иначе цикл может не закончиться.

Итог

  • Метод Ньютона идёт по касательной: x − f(x)/f'(x).
  • Квадратичная сходимость — число верных цифр удваивается за шаг.
  • Цена скорости: нужны производная и хороший старт; гарантии нет.
  • В SciPy — newton (с производной или без, тогда метод секущих).
Проверьте себя
1. По какой формуле метод Ньютона делает шаг?
Ax_next = (a + b) / 2
Bx_next = x - f(x) / f'(x)
Cx_next = x + h·f(x)
Dx_next = f(x) / x
2. Что означает «квадратичная сходимость» метода Ньютона?
AКорень возводится в квадрат
BЧисло верных значащих цифр примерно удваивается за каждую итерацию
CНужно ровно 2 шага
DСходится только для квадратных уравнений
3. В чём главный риск метода Ньютона?
AСлишком медленный
BПри f'(x)≈0 или плохом старте он может разойтись или зациклиться — гарантии сходимости нет
CТребует чётного числа шагов
DРаботает только с многочленами