Pierwiastkowanie - metoda Newtona

Wprowadzenie

Metoda Newtona (znana także jako metoda Newtona-Raphsona) to potężny algorytm numeryczny służący do znajdowania przybliżeń pierwiastków funkcji i liczb. Jest szeroko stosowana w obliczeniach numerycznych ze względu na swoją szybką zbieżność.

W kontekście pierwiastkowania, metoda Newtona pozwala efektywnie obliczać √n bez użycia wbudowanych funkcji matematycznych.

Idea algorytmu: Iteracyjne przybliżanie wyniku poprzez poprawianie kolejnych oszacowań.

Metoda Newtona jest wykorzystywana w:

  • Obliczeniach numerycznych (pierwiastki, równania)
  • Grafice komputerowej (normalizacja wektorów, oświetlenie)
  • Algorytmach optymalizacyjnych (minimalizacja, maksymalizacja)
  • Naukach przyrodniczych (symulacje fizyczne)
  • Uczeniu maszynowym (optymalizacja funkcji kosztu)
  • Procesorach (jednostki FPU implementują algorytm w hardware)

Podstawy teoretyczne

Wzór metody Newtona dla √n

Aby znaleźć √n, rozwiązujemy równanie: x² - n = 0

Wzór iteracyjny:

x(k+1) = (x(k) + n/x(k)) / 2

gdzie: - x(k) = k-te przybliżenie - x(k+1) = następne (lepsze) przybliżenie - x(0) = początkowe oszacowanie

Intuicja: Jeśli x jest za duże, n/x jest za małe (i odwrotnie). Średnia daje lepsze przybliżenie.


Implementacja podstawowa

Pierwiastek kwadratowy

Wyjście:

=== Pierwiastek kwadratowy - metoda Newtona ===

n          √n (Newton)          √n (Python)          Różnica
---------------------------------------------------------------------------
4          2.000000000000000    2.000000000000000    0.00e+00
9          3.000000000000000    3.000000000000000    0.00e+00
16         4.000000000000000    4.000000000000000    0.00e+00
25         5.000000000000000    5.000000000000000    0.00e+00
2          1.414213562373095    1.414213562373095    0.00e+00
10         3.162277660168379    3.162277660168380    1.11e-15
100        10.000000000000000   10.000000000000000   0.00e+00
1000       31.622776601683793   31.622776601683793   0.00e+00

Wizualizacja procesu zbieżności

Wyjście:

=== Wizualizacja zbieżności ===

Obliczanie √50:

Iteracja   x(k)                      Błąd (x² - n)
------------------------------------------------------------
0          50.000000000000000        2.45e+03
1          25.500000000000000        6.00e+02
2          13.244117647058824        1.25e+02
3          7.825271689797831         1.24e+01
4          7.106727079312905         4.54e-01
5          7.071128353281618         4.79e-03
6          7.071067812518449         5.33e-07
7          7.071067811865475         6.66e-15
8          7.071067811865475         0.00e+00

Wynik końcowy: √50 ≈ 7.071067811865475
Sprawdzenie: 7.071067811865475² = 50.000000000000000
Liczba iteracji: 9

Optymalizacje algorytmu

1. Lepsze oszacowanie początkowe

Wyjście:

=== Porównanie oszacowań początkowych ===

n          Start: n        Start: 2^(log2(n)//2)     Poprawa
----------------------------------------------------------------------
100        7               5                         2 iteracji
1000       9               6                         3 iteracji
10000      11              7                         4 iteracji
100000     13              8                         5 iteracji

2. Pierwiastek całkowity (Integer Square Root)

Wyjście:

=== Pierwiastek całkowity (isqrt) ===

n            isqrt(n)     Sprawdzenie: k² ≤ n < (k+1)²
------------------------------------------------------------
0            0            0² = 0, 1² = 1  ✓
1            1            1² = 1, 2² = 4  ✓
4            2            2² = 4, 3² = 9  ✓
8            2            2² = 4, 3² = 9  ✓
15           3            3² = 9, 4² = 16  ✓
16           4            4² = 16, 5² = 25  ✓
99           9            9² = 81, 10² = 100  ✓
100          10           10² = 100, 11² = 121  ✓
1000         31           31² = 961, 32² = 1024  ✓
1000000      1000         1000² = 1000000, 1001² = 1002001  ✓

Pierwiastki wyższych stopni

Pierwiastek n-tego stopnia

Wyjście:

=== Pierwiastki wyższych stopni ===

Wyrażenie    Wynik (Newton)       Sprawdzenie               Status
---------------------------------------------------------------------------
∛8           2.0000000000          2.0^3 = 8.000000       ✓
⁴√16         2.0000000000          2.0^4 = 16.000000      ✓
⁵√32         2.0000000000          2.0^5 = 32.000000      ✓
⁶√64         2.0000000000          2.0^6 = 64.000000      ✓
∛1000        10.0000000000         10.0^3 = 1000.000000   ✓

Zastosowania praktyczne

1. Obliczanie odległości (geometria)

Wyjście:

=== Odległość między punktami ===

Punkty                    Odległość            Wzór
----------------------------------------------------------------------
Początek do (3,4)         5.0000000000         √(3² + 4²)
(1,2) do (4,6)            5.0000000000         √(3² + 4²)
Początek do (1,1)         1.4142135624         √(1² + 1²)

2. Normalizacja wektorów

Wyjście:

=== Normalizacja wektorów ===

Wektor oryginalny         Długość         Wektor znormalizowany               Długość norm.
-----------------------------------------------------------------------------------------------
(3, 4)                    5.000000        (0.600000, 0.800000)                1.0000000000
(1, 1, 1)                 1.732051        (0.577350, 0.577350, 0.577350)      1.0000000000
(2, 0, 0)                 2.000000        (1.000000, 0.000000, 0.000000)      1.0000000000
(1, 2, 2)                 3.000000        (0.333333, 0.666667, 0.666667)      1.0000000000

3. Średnia kwadratowa (RMS)

Wyjście:

=== Średnia kwadratowa (RMS) ===

Dane                      RMS                  Średnia arytmetyczna
-----------------------------------------------------------------
Liczby 1-5                3.3166247904         3.0000000000
10, 20, 30                21.6024689947        20.0000000000
Od -2 do 2                1.4142135624         0.0000000000

Porównanie wydajności

Wyjście (przykładowe):

=== Benchmark metod pierwiastkowania ===

n               Metoda               Czas (μs)       Wynik
----------------------------------------------------------------------
100             Newton                    1.23     10.0000000000
100             Python math.sqrt          0.45     10.0000000000

10000           Newton                    1.45     100.0000000000
10000           Python math.sqrt          0.47     100.0000000000

1000000         Newton                    1.78     1000.0000000000
1000000         Python math.sqrt          0.48     1000.0000000000

100000000       Newton                    2.34     10000.0000000000
100000000       Python math.sqrt          0.51     10000.0000000000

Złożoność obliczeniowa

Analiza zbieżności

Metoda Newtona ma zbieżność kwadratową: - Liczba poprawnych cyfr podwaja się w każdej iteracji! - Złożoność: O(log log n)

Wyjście:

=== Analiza zbieżności dla √1234567 ===

Iter   x(k)                 Błąd bezwzględny     Poprawne cyfry
---------------------------------------------------------------------------
0      1234567.000000000000000 1.23e+06             -6.1
1      617284.499999594874680 6.17e+05             -5.8
2      308643.749495823308090 3.09e+05             -5.5
3      154323.874243969330564 1.54e+05             -5.2
4      77163.936106453301664  7.72e+04             -4.9
5      38584.965033685602248  3.86e+04             -4.6
6      19296.477384939696638  1.93e+04             -4.3
7      9652.221465084310435   9.65e+03             -4.0
8      4830.071388797165546   4.83e+03             -3.7
9      2419.965295953788690   2.42e+03             -3.4

Podsumowanie

Kluczowe własności metody Newtona

Zbieżność kwadratowa: Liczba cyfr podwaja się w każdej iteracji ✅ Wydajność: O(log log n) - bardzo szybka ✅ Prostota: Łatwa implementacja ✅ Uniwersalność: Działa dla pierwiastków dowolnego stopnia ✅ Dokładność: Precyzja ograniczona tylko przez typ zmiennoprzecinkowy

Wzory kluczowe

Pierwiastek kwadratowy (√n):
  x(k+1) = (x(k) + n/x(k)) / 2

Pierwiastek n-tego stopnia (ⁿ√x):
  t(k+1) = ((n-1) × t(k) + x / t(k)^(n-1)) / n

Pierwiastek całkowity:
  k = floor(√n)

Zastosowania

Geometria: Odległości, normalizacja wektorów ✅ Statystyka: Średnia kwadratowa, odchylenie standardowe ✅ Grafika: Obliczenia świateł, cieni ✅ Fizyka: Symulacje, obliczenia energii ✅ Optymalizacja: Minimalizacja funkcji


Co dalej?

Po opanowaniu metody Newtona, następne kroki to:

  1. Lekcja 72: Szybkie potęgowanie
  2. Algorytm binarny (exponentiation by squaring)
  3. Potęgowanie modularne
  4. Zastosowania w kryptografii RSA

  5. Dalsze tematy:

  6. Metody numeryczne (bisekcja, siecznych)
  7. Interpolacja i aproksymacja
  8. Równania różniczkowe

Zadania praktyczne

Zadanie 1: Pierwiastek sześcienny

Zaimplementuj dedykowaną funkcję do obliczania ∛n z optymalizacjami.

Zadanie 2: Odległość 3D

Napisz funkcję obliczającą odległość między punktami w przestrzeni 3D.

Zadanie 3: Odchylenie standardowe

Oblicz odchylenie standardowe dla zbioru danych używając metody Newtona.

Zadanie 4: Porównanie metod

Porównaj wydajność metody Newtona z metodą bisekcji dla √n.

Zadanie 5: Pierwiastek zespolony

Rozszerz metodę Newtona do obliczania pierwiastków liczb zespolonych.


Następna lekcja: Szybkie potęgowanie - algorytm binarny