Implementacja metody Newtona‑Raphsona w języku Java

Metoda Newtona‑Raphsonametoda Newtona‑RaphsonaMetoda Newtona‑Raphsona służy do wyznaczania przybliżonej wartości pierwiastka kwadratowego. Geometryczna interpretacja algorytmu jest następująca: tworzymy kolejne prostokąty, coraz bardziej zbliżone do poszukiwanej figury. Załóżmy, że pierwiastkujemy pewną liczbę c, a pierwszy wielokąt wyglądać będzie następująco:

RmarJ3ppOrDmp
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Zapiszmy funkcję odpowiedzialną za proces wyszukiwania docelowej długości boku a kwadratu. Pamiętajmy, że jedną z niezbędnych zmiennych będzie również precyzja, której rolą zajmiemy się w następnym kroku. Na razie w funkcji znajdą się jedynie założenia początkowe, dotyczące długości boków pierwszego prostokąta.

Linia 1. public class Pierwiastkowanie otwórz nawias klamrowy. Linia 2. public static double pierwiastkowanie otwórz nawias okrągły double pierwiastkowany przecinek double precyzja zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. double a znak równości pierwiastkowany prawy ukośnik 2 średnik. Linia 4. double b znak równości pierwiastkowany prawy ukośnik a średnik. Linia 6. zamknij nawias klamrowy. Linia 7. zamknij nawias klamrowy.

W kolejnym kroku musimy stworzyć pętlę odpowiedzialną za wyliczanie kolejnych długości boków prostokąta. Operację tę przeprowadzamy do momentu, gdy wartość bezwzględna różnicy pomiędzy długościami obu boków będzie mniejsza niż zadana precyzja. Im mniejszą wartość zmiennej precyzja ustalimy, tym wynik będzie dokładniejszy. Długości boków prostokątów wyliczamy w następujący sposób:

a=a+b2
b=ca

gdzie ab oznaczają długości boków prostokąta, a  c jego pole powierzchni.

Mając już niezbędne informacje, możemy przejść do implementacji funkcji. Powtarzanie przedstawionych operacji, dopóki nie spełnimy wspomnianego warunku odnośnie do precyzji i różnicy boków, oznacza konieczność zastosowania pętli. Dodatkowo w warunku zastosujemy wartość bezwzględną. Użyjemy funkcji abs z biblioteki Math.

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Pierwiastkowanie otwórz nawias klamrowy. Linia 4. public static double pierwiastkowanie otwórz nawias okrągły double pierwiastkowany przecinek double precyzja zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. double a znak równości pierwiastkowany prawy ukośnik 2 średnik. Linia 6. double b znak równości pierwiastkowany prawy ukośnik a średnik. Linia 8. while otwórz nawias okrągły Math kropka abs otwórz nawias okrągły a minus b zamknij nawias okrągły zamknij nawias ostrokątny precyzja zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. a znak równości otwórz nawias okrągły a plus b zamknij nawias okrągły prawy ukośnik 2 średnik. Linia 10. b znak równości pierwiastkowany prawy ukośnik a średnik. Linia 11. zamknij nawias klamrowy. Linia 12. return a średnik. Linia 13. zamknij nawias klamrowy.

Teraz wystarczy już tylko pobrać od użytkownika pierwiastkowaną liczbę oraz żądaną precyzję. Po wywołaniu funkcji otrzymamy wypisany przybliżony wynik pierwiastkowania kwadratowego.

Linia 1. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 3. double c przecinek p średnik. Linia 5. System kropka out kropka println otwórz nawias okrągły cudzysłów Wprowadz liczbe do pierwiastkowania cudzysłów zamknij nawias okrągły średnik. Linia 6. c znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 8. System kropka out kropka println otwórz nawias okrągły cudzysłów Wprowadz precyzje cudzysłów zamknij nawias okrągły średnik. Linia 9. p znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 11. System kropka out kropka println otwórz nawias okrągły cudzysłów Wynik pierwiastkowania cudzysłów zamknij nawias okrągły średnik. Linia 12. System kropka out kropka println otwórz nawias okrągły pierwiastkowanie otwórz nawias okrągły c przecinek p zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 13. zamknij nawias klamrowy.

Cały program prezentuje się następująco:

Linia 1. import java kropka util kropka Scanner średnik. Linia 3. public class Pierwiastkowanie otwórz nawias klamrowy. Linia 4. public static double pierwiastkowanie otwórz nawias okrągły double pierwiastkowany przecinek double precyzja zamknij nawias okrągły otwórz nawias klamrowy. Linia 5. double a znak równości pierwiastkowany prawy ukośnik 2 średnik. Linia 6. double b znak równości pierwiastkowany prawy ukośnik a średnik. Linia 8. while otwórz nawias okrągły Math kropka abs otwórz nawias okrągły a minus b zamknij nawias okrągły zamknij nawias ostrokątny precyzja zamknij nawias okrągły otwórz nawias klamrowy. Linia 9. a znak równości otwórz nawias okrągły a plus b zamknij nawias okrągły prawy ukośnik 2 średnik. Linia 10. b znak równości pierwiastkowany prawy ukośnik a średnik. Linia 11. zamknij nawias klamrowy. Linia 12. return a średnik. Linia 13. zamknij nawias klamrowy. Linia 15. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy. Linia 16. Scanner scanner znak równości new Scanner otwórz nawias okrągły System kropka in zamknij nawias okrągły średnik. Linia 17. double c przecinek p średnik. Linia 19. System kropka out kropka println otwórz nawias okrągły cudzysłów Wprowadz liczbe do pierwiastkowania cudzysłów zamknij nawias okrągły średnik. Linia 20. c znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 22. System kropka out kropka println otwórz nawias okrągły cudzysłów Wprowadz precyzje cudzysłów zamknij nawias okrągły średnik. Linia 23. p znak równości scanner kropka nextDouble otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 25. System kropka out kropka println otwórz nawias okrągły cudzysłów Wynik pierwiastkowania cudzysłów zamknij nawias okrągły średnik. Linia 26. System kropka out kropka println otwórz nawias okrągły pierwiastkowanie otwórz nawias okrągły c przecinek p zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 27. zamknij nawias klamrowy. Linia 28. zamknij nawias klamrowy.

W ten sposób zapisaliśmy implementację metody Newtona‑Raphsona dla pierwiastków kwadratowych w języku Java.

Słownik

iteracja
iteracja

(łac. iteratio – powtarzanie) wielokrotne wykonywanie tej samej operacji

metoda Newtona‑Raphsona
metoda Newtona‑Raphsona

algorytm wyznaczania wartości pierwiastka funkcji, bazujący na wyliczaniu kolejnych przybliżeń, coraz bliższych rzeczywistej wartości pierwiastka; może być wykorzystywany między innymi do wyznaczania wartości pierwiastka kwadratowego

parametr
parametr

element składni w określonym języku programowania umożliwiający komunikację pomiędzy podprogramem wywołanym a programem wywołującym; parametry określa się wraz z deklaracją określonego podprogramu w jego nagłówku

warunek stopu
warunek stopu

warunek, po którego spełnieniu następuje zakończenie realizacji algorytmu