Metody obliczania pierwiastka kwadratowego

Oszacowanie

edytuj

Wiele metod obliczania pierwiastka kwadratowego z dodatniej liczby rzeczywistej S wymaga wartości początkowej. Jeśli ta wartość jest zbyt odległa od faktycznej wartości pierwiastka, obliczenia będą znacznie wydłużone. W związku z tym jest wysoce pożądane, aby mieć oszacowanie tej wielkości, które może być nawet bardzo niedokładne, ale proste do wyznaczenia. Jeśli S ≥ 1, niech D będzie liczbą cyfr po lewej stronie przecinka dziesiętnego. Jeśli S < 1, niech D będzie ujemną liczbą zer bezpośrednio na prawo od przecinka dziesiętnego. Wtedy oszacowanie jest następujące:

Jeśli D jest nieparzyste, D = 2n + 1, to  
Jeśli D jest parzyste, D = 2n + 2, to  

Wybrane zostały dwa i sześć ponieważ   i  

Metoda babilońska

edytuj
 
Wykres z zastosowania metody babilońskiej do aproksymacji pierwiastka kwadratowego ze 100 (10) przy użyciu wartości początkowych x0 = 50, x0 = 1, i x0 = −5. Ujemne wartości początkowe dają ujemny wynik.

Prawdopodobnie pierwszy algorytm użyty do aproksymacji   jest znany jako metoda babilońska od babilońskich matematyków[a], lub metoda Herona od greckiego matematyka z pierwszego wieku Herona z Aleksandrii, który podał pierwszy jasny opis tej metody[1]. Można ją uzyskać (ale jest znacznie starsza) z metody Newtona. Jest to algorytm zbieżny kwadratowo, co oznacza, że liczba prawidłowych cyfr aproksymacji średnio podwaja się z każdą iteracją. Kroki algorytmu są następujące:

  1. Rozpocznij z dowolną dodatnią wartością początkową x0 (im bliżej pierwiastka, tym lepiej).
  2. Niech xn+1 będzie średnią z xn i S / xn (użycie średniej arytmetycznej do aproksymacji średniej geometrycznej).
  3. Powtarzaj krok 2, aż zostanie osiągnięta pożądana dokładność.

Można go także przedstawić jako:

 
 
 

Przykład

edytuj

Aby obliczyć   gdzie S = 125348, do 6 cyfr znaczących, weźmy oszacowanie x0 z przepisu wyżej. Liczba cyfr w S to D=6=2·2+2. Z tego n=2 i oszacowanie:

 
 
 
 
 
 

W związku z tym  

Zbieżność

edytuj

Zdefiniujmy błąd względny w xn jako

 

a tym samym

 

Można wykazać, że

 

a tym samym, że

 

a w związku z tym zbieżność jest zapewniona pod warunkiem, że x0 i S są obie dodatnie.

Najgorszy przypadek zbieżności

edytuj

Przy zastosowaniu oszacowań z przepisu powyżej, najgorsze zbieżności są następujące:

 

Stąd w każdym przypadku,

 
 
 
 
 
 
 
 

Należy pamiętać, że błędy zaokrągleń mogą spowolnić zbieżność. Należy wyznaczać przynajmniej jedną cyfrę więcej, niż pożądana dokładność xn, aby zminimalizować błędy zaokrągleń.

Tożsamość wykładnicza

edytuj

Kalkulatory zwykle implementują dobre procedury na obliczanie funkcji wykładniczej i logarytmu naturalnego, i z tego obliczają pierwiastek kwadratowy z S wykorzystując tożsamość

 

Ta sama tożsamość jest używana do wyliczania pierwiastka kwadratowego przy użyciu tablic logarytmicznych lub suwaka logarytmicznego.

Metoda równego podziału

edytuj

Innym prostym sposobem znalezienia pierwiastka kwadratowego jest metoda więcej/mniej, podobnie jak w metodzie równego podziału. Ta metoda polega na zgadywaniu liczby na podstawie znanego kwadratu, a następnie sprawdzaniu czy jej kwadrat jest zbyt wysoki lub zbyt niski i odpowiednim poprawianiu wyniku.

Załóżmy, że chcemy znaleźć pierwiastek kwadratowy z 20. Wiemy, że kwadrat 5 wynosi 25, a kwadrat 4 to 16, czyli wynik musi być pomiędzy 4 i 5. Na początku zgadujemy, że 4,5. Kwadrat 4,5 wynosi 20,25 a to jest za dużo, więc zgadujemy dla 4,4. Wynik równa się 19,36 a to za mało. Z tego jednak wynika, że pierwiastek jest pomiędzy 4,4 i 4,5. Kontynuując ten schemat możemy uzyskać taką dokładność jaką tylko chcemy. Aby uzyskać trzy cyfry po przecinku:

4,452 = 19,8025 (za mało)
4,472 = 19,9809 (za mało, ale blisko)
4,482 = 20,0704 (za dużo)
4,4752 = 20,025625 (za dużo)
4,4732 = 20,007729 (za dużo, ale blisko)
4,4722 = 19,998784  (za mało)

Teraz wiemy, że wynik jest pomiędzy 4,472 a 4,473. Przyjmujemy, że pierwiastek kwadratowy z 20 dla dokładności do trzech miejsc po przecinku wynosi 4,472.

Aproksymacja Bakhshali

edytuj

Ta metoda znajdowania aproksymacji pierwiastka kwadratowego została opisana w starożytnym manuskrypcie zwanego manuskrypt Bakhshali. Jest ona równoważna dwóm iteracjom metody babilońskiej rozpoczynając od N. Oryginalna prezentacja jest następująca: Aby obliczyć   należy przyjąć liczbę naturalną N taką, że N2 jest najlepszym przybliżeniem S. Następnie oblicz:

 
 
 
 

To można także zapisać jako:

 

Przykład

edytuj

Znajdźmy  

 
 
 
 
 

Wyznaczanie cyfra po cyfrze

edytuj

Jest to metoda sekwencyjnego znajdowania kolejnych cyfr pierwiastka kwadratowego. Jest ona wolniejsza niż metoda babilońska, lecz ma kilka zalet:

  • jest prosta dla ręcznych obliczeń;
  • każda cyfra wyznaczanego pierwiastka jest prawidłowa, to znaczy nie zmieni się w toku dalszych obliczeń;
  • jeśli pierwiastek kwadratowy ma skończone rozwinięcie, algorytm kończy się po znalezieniu ostatniej cyfry. Można to wykorzystać do sprawdzenia czy zadana liczba całkowita jest kwadratem.

Kostki Napiera zawierają wskazówki do wykonania tego algorytmu.

Zapisujemy oryginalną liczbę pierwiastkowaną w postaci dziesiętnej. Liczby są zapisywane podobnie jak w dzieleniu pisemnym i podobnie wynik pierwiastkowania będzie zapisany nad linią. Następnie należy cyfry liczby pierwiastkowanej pogrupować w pary, rozpoczynając od przecinka dziesiętnego w obie strony. Przecinek dziesiętny będzie pozycją przecinka dziesiętnego wyniku nad linią. Jedna cyfra wyniku będzie się pojawiała nad każdą parą cyfr pod linią.

Rozpoczynamy od pierwszej pary cyfr od lewej i wykonujemy poniższą procedurę dla każdej kolejnej pary:

  1. Rozpoczynamy od lewej przepisując najbardziej znaczącą parę cyfr jeszcze nie używaną (jeśli zostały wykorzystane wszystkie zapisujemy „00”) i dopisujemy je z prawej strony reszty z poprzedniego etapu (w pierwszym kroku nie ma reszty). Innymi słowy, mnożymy resztę przez 100 i dodajemy liczbę wyrażoną przez kolejne 2 cyfry. Będzie to bieżąca wartość c.
  2. Znajdujemy p, y i x następująco:
    • Niech p będzie dotychczas obliczoną częścią wyniku pierwiastkowania zapisaną nad kreską, pomijamy przecinek dziesiętny. (W pierwszym kroku, p = 0).
    • Określamy największą cyfrę x taką, że   nie jest większe od c (czyli może być mniejsze lub równe).
      • Uwaga: 20p + x to oczywiście w zapisie cyfrowym dwa razy p z cyfrą x dołączoną po prawej.
      • Uwaga: Można znaleźć x biorąc liczbę p, czyli dotychczas zapisany wynik nad kreską, i zgadując, że kolejna cyfra x to c/(20·p), a następnie wykonując obliczenie y z ewentualną zmianą x w górę lub dół stosownie do porównania obliczonego y z c.
    • Umieszczamy cyfrę   jako następną cyfrę wyniku pierwiastkowania.
  3. Odejmujemy y od c i otrzymujemy nową resztę.
  4. Jeśli reszta wynosi zero i nie ma więcej cyfr do spisania, to algorytm jest zakończony. W innym przypadku wracamy do punktu 1 i kontynuujemy następną iterację.

Przykłady

edytuj

Znajdź pierwiastek kwadratowy z 152,2756.

          1  2. 3  4 
       /
     \/  01 52,27 56                            

         01                   1*1 ≤ 1 < 2*2                  x = 1
         01                     y = x*x = 1*1 = 1
         00 52                22*2 ≤ 52 < 23*3               x = 2
         00 44                  y = (20+x)*x = 22*2 = 44                      
            08 27             243*3 ≤ 827 < 244*4            x = 3       
            07 29               y = (240+x)*x = 243*3 = 729
               98 56          2464*4 ≤ 9856 < 2465*5         x = 4       
               98 56            y = (2460+x)*x = 2464*4 = 9856
               00 00          Algorytm zakończony: Wynik to 12,34

Znajdź pierwiastek kwadratowy z 2.

          1. 4  1  4  2
       /
     \/  02,00 00 00 00

         02                  1*1 ≤ 2 < 2*2                  x = 1
         01                    y = x*x = 1*1 = 1
         01 00               24*4 ≤ 100 < 25*5              x = 4
         00 96                 y = (20+x)*x = 24*4 = 96                      
            04 00            281*1 ≤ 400 < 282*2            x = 1       
            02 81              y = (280+x)*x = 281*1 = 281
            01 19 00         2824*4 ≤ 11900 < 2825*5        x = 4       
            01 12 96           y = (2820+x)*x = 2824*4 = 11296
               06 04 00      28282*2 ≤ 60400 < 28283*3      x = 2
                             Osiągnięto pożądaną dokładność 
                             Pierwiastek kwadratowy z 2 wynosi około 1,4142

Nieodłącznym krokiem w algorytmie cyfra po cyfrze jest szukaj i sprawdź: znajdź cyfrę,   która dodana z prawej bieżącego rozwiązania   takiego, że   gdzie   jest pożądaną wartością pierwiastka. Rozwijając, otrzymujemy   Bieżąca wartość   – lub, zwykle, reszta – mogą być przyrostowo aktualizowane w systemie dwójkowym, gdzie wartość   jest jednobitowa, a operacje wymagane do obliczenia   i   można zastąpić szybszymi operacjami przesunięć bitów. W wyniku otrzymujemy prosty algorytm komputerowy[2]:

    short sqrt(short num) {
        short op = num;
        short res = 0;
        short one = 1 << 14; // The second-to-top bit is set: 1L<<30 for long
 
        // "one" starts at the highest power of four <= the argument.
        while (one > op)
            one >>= 2;
        
        while (one != 0) {
            if (op >= res + one) {
                op -= res + one;
                res = (res >> 1) + one;
            }
            else
              res >>= 1;
            one >>= 2;
        }
        return res;
    }

Zobacz też

edytuj
  1. Nie ma bezpośrednich dowodów wskazujących jak Babilończycy obliczali pierwiastki kwadratowe, mimo to są pewne przesłanki (pierwiastek kwadratowy z 2).

Przypisy

edytuj
  1. Thomas Heath: A History of Greek Mathematics. T. 2. Oxford: Clarendon Press, 1921, s. 323–324.
  2. Fast integer square root by Mr. Woo’s abacus algorithm. medialab.freaknet.org. [zarchiwizowane z tego adresu (2012-04-21)]..