Математика · Алгоритми · Чисельний аналіз
📅 Квітень 2026 ⏱ ≈ 11 хв читання 🎯 Середній · Останнє оновлення: 28 травня 2026 р.

Метод Ньютона та квадратні корені — квадратична збіжність і швидкий обернений корінь

Метод Ньютона — елегантний алгоритм чисельної математики: наближення дотичною уточнює оцінку кореня, подвоюючи точність з кожною ітерацією. Для квадратного кореня це стародавній вавилонський метод; для оберненого кореня з бітовою хитрістю — легендарний алгоритм освітлення Quake III Arena.

1. Виведення методу Ньютона-Рафсона

Щоб знайти корінь рівняння f(x) = 0: починаємо з припущення x₀, проводимо дотичну пряму до кривої в точці (x₀, f(x₀)) і знаходимо, де вона перетинає нуль.

Дотична пряма в (xₙ, f(xₙ)): y - f(xₙ) = f'(xₙ)(x - xₙ) Покладемо y = 0: x_{n+1} = xₙ - f(xₙ) / f'(xₙ) Це формула ітерації методу Ньютона-Рафсона. Геометрична інтерпретація: замінюємо криву її лінійним наближенням (дотичною). Точка перетину дотичної з віссю x — це краща оцінка кореня. Повторюємо, поки |f(xₙ)| < допуск. Приклад: знайти √2 за допомогою f(x) = x² - 2, f'(x) = 2x x_{n+1} = xₙ - (xₙ² - 2)/(2xₙ) = (xₙ + 2/xₙ)/2 Починаючи з x₀ = 1: x₁ = (1 + 2)/2 = 1.5 x₂ = (1.5 + 2/1.5)/2 = 1.41667 x₃ = (1.41667 + 2/1.41667)/2 = 1.41421356... x₄ = 1.4142135623730950488... (вже 34 правильні цифри)

2. Доведення квадратичної збіжності

Нехай r — справжній корінь: f(r) = 0. Визначимо похибку: eₙ = xₙ - r Розклад функції f у ряд Тейлора навколо r: f(xₙ) = f(r) + f'(r)eₙ + ½ f''(r) eₙ² + O(eₙ³) = f'(r)eₙ + ½ f''(r) eₙ² (оскільки f(r)=0) f'(xₙ) = f'(r) + f''(r)eₙ + O(eₙ²) Крок Ньютона: x_{n+1} = xₙ - f(xₙ)/f'(xₙ) e_{n+1} = x_{n+1} - r = xₙ - r - f(xₙ)/f'(xₙ) = eₙ - [f'(r)eₙ + ½f''(r)eₙ²] / [f'(r) + f''(r)eₙ] = eₙ · [1 - f'(r)/(f'(r)+f''(r)eₙ)] - ½f''(r)eₙ²/f'(r) + ... ≈ f''(r)/(2f'(r)) · eₙ² (у головному порядку) Отже: |e_{n+1}| ≈ C · eₙ² де C = |f''(r)/(2f'(r))| Це КВАДРАТИЧНА збіжність: якщо eₙ = 10⁻³, то e_{n+1} ≈ C × 10⁻⁶ (3 правильні цифри → 6 → 12 → 24...) Кількість правильних цифр приблизно подвоюється з кожною ітерацією. Умови: x₀ достатньо близько до r, f'(r) ≠ 0 (невироджений корінь)

3. Квадратний корінь методом Ньютона

Щоб обчислити √S: розв'язуємо f(x) = x² - S = 0 f'(x) = 2x Крок Ньютона: x_{n+1} = x - (x² - S)/(2x) = (x + S/x) / 2 Це середнє значення x і S/x. Середнє геометричне ≤ середнє арифметичне → кожне xₙ ≥ √S (за умови x₀ > 0) Послідовність монотонно спадає й обмежена знизу → завжди збігається. Реалізація на JavaScript: function sqrt(S, tolerance = 1e-10) { if (S < 0) throw new Error("negative input"); if (S === 0) return 0; let x = S > 1 ? S / 2 : 1; // початкове припущення while (Math.abs(x * x - S) > tolerance * S) { x = (x + S / x) / 2; } return x; } Збіжність для S = 2, x₀ = 1.5: Ітер | xₙ | похибка 0 | 1.5 | 0.0858 1 | 1.416667 | 0.00245 2 | 1.414216 | 8.4e-7 3 | 1.41421356 | 1.0e-13

4. Вавилонський метод

Ітерація x_{n+1} = (x + S/x)/2 для квадратних коренів була відома вавилонянам приблизно 1700 року до н. е. і записана на табличці YBC 7289. На табличці показано √2 ≈ 1.41421296..., обчислене з точністю до 6 шістдесяткових розрядів (за основою 60).

Геометрична інтерпретація вавилонського методу: якщо у вас є прямокутник площею S зі сторонами x і S/x, то середнє арифметичне (x + S/x)/2 — це сторона квадрата майже з тією самою площею — і воно завжди більше (або дорівнює) квадратному кореню за нерівністю про середнє арифметичне й геометричне (AM-GM). Кожен крок дає менш видовжений прямокутник, що збігається до квадрата.

Герон Александрійський (бл. 50 р. н. е.) описав той самий алгоритм, і в західній традиції його іноді приписують йому. Метод також називають «методом Герона». Це найдавніший відомий приклад ітераційного чисельного алгоритму.

5. Швидкий обернений квадратний корінь із Quake III

1999 року Quake III Arena від id Software містила функцію Q_rsqrt, яка обчислювала 1/√x із точністю ≈ 1.6% всього за кілька операцій — без ділення й виклику sqrt. Вона була потрібна для обчислення нормалей освітлення (нормалізація векторів вимагає ділення на їхню довжину).

// Початковий код Quake III (C), приблизно 1999 рік
// Приписується Джону Кармаку; магічна стала, ймовірно, від Cleve Moler / Greg Walsh
float Q_rsqrt(float number) {
    long i;
    float x2, y;
    const float threehalfs = 1.5F;
    x2 = number * 0.5F;
    y  = number;
    i  = *(long *)&y;            // бітова реінтерпретація float як цілого
    i  = 0x5f3759df - (i >> 1);   // початкове припущення з магічної сталої
    y  = *(float *)&i;            // бітова реінтерпретація цілого назад у float
    y  = y * (threehalfs - (x2 * y * y));  // ОДНА ітерація методу Ньютона-Рафсона
    return y;
}

Ключова ідея: число з рухомою комою IEEE 754 подається в пам'яті як (1+m)×2^e. Бітове подання — це (e + 127) у старших бітах і m у молодших. Тож log₂(x) ≈ i/L − 127, де i — це цілочисловий бітовий шаблон, а L = 2²³. Зсув праворуч (i >> 1) приблизно ділить log₂(x) на 2 — що у звичайному просторі ділить порядок на 2, тобто бере квадратний корінь. Віднімання від магічної сталої перетворює результат на 1/√x. Одна ітерація методу Ньютона-Рафсона (для f(y) = 1/y² − x = 0) дає y = y(3/2 − x/2 · y²), уточнюючи до похибки ~1.6%.

Сучасна актуальність: сучасні процесори та GPU мають апаратні інструкції sqrt і rsqrt. Хитрість із Quake застаріла, але магічна стала 0x5f3759df залишається одним із найвідоміших чисел в історії розробки ігор.

6. Коли метод Ньютона не працює

7. Методи вищого порядку

Метод січних (похідна не потрібна): x_{n+1} = xₙ - f(xₙ)·(xₙ - x_{n-1})/(f(xₙ) - f(x_{n-1})) Порядок збіжності: φ ≈ 1.618 (золотий переріз) — надлінійний, але субквадратичний. Метод Галлея (кубічна збіжність): x_{n+1} = xₙ - 2f(xₙ)f'(xₙ) / (2[f'(xₙ)]² - f(xₙ)f''(xₙ)) Потребує f''; потроює кількість правильних цифр за крок. Метод Брента: поєднує метод половинного ділення (гарантований, повільний) + метод січних (швидкий у гладких ділянках) Надійний резервний варіант: основний алгоритм у LAPACK, GNU GSL, Python scipy. Зокрема для квадратного кореня — алгоритм Гольдшмідта: масштабуємо x до [0.5, 1]; використовуємо таблицю для початкової оцінки y₀ ≈ 1/√x Потім ітеруємо: r_{n+1} = (3 - xₙ)/2, xₙ₊₁ = xₙ·rₙ² Квадратична збіжність, розроблена для апаратного конвеєра. Використовується в блоці sqrt процесора IBM POWER.
📐 Досліджуйте математику →