Algorytm Newtona - Raphsona Obliczanie przybliżonej wartości pierwiastka kwadratowego
Interpretacja geometryczna pierwiastka kwadratowego Poszukujemy długości boku kwadratu o zadanym polu, poprzez jego przybliżanie kolejnymi prostokątami o tym samym polu. p p
Ponieważ dana figura ma być kwadratem więc wartości x i p/x powinny być sobie równe. Jeśli nie są, to szukane rozwiązanie jest położone między nimi, czyli możemy przyjąć, że jest to średnia arytmetyczna tych dwóch wielkości.A zatem możemy wyznaczyć kolejne przybliżenia pierwiastka.
Mamy za zadanie obliczyć wartość pierwiastka kwadratowego z liczby dodatniej z zadaną dokładnością Nie możemy jednak posłużyć się funkcją standardową SQRT. Musimy sami podać przepis na obliczenie pierwiastka. Na szczęście jeden z takich przepisów został podany ponad 300 lat temu przez Newtona i Raphsona
Przepis Newtona - Raphsona Jako pierwsze przybliżenie bierzemy np.1, a jako kolejne – wyrażenie: średnią arytmetyczną z poprzedniego przybliżenia i liczby podzielonej przez poprzednie przybliżenie. Kiedy mamy skończyć ciąg obliczeń? Wtedy, gdy różnica między kolejnymi przybliżeniami będzie nie większa niż podana dokładność. Więc do pracy!!!
Wzór na ciąg kolejnych przybliżeń ma postać:
Lista kroków algorytmu Pobieramy wartość liczby podpierwiastkowej p oraz dokładność obliczeń Eps Przyjmujemy pierwsze przybliżenie poszukiwanego rozwiązania np. x=1 Jeśli |x – p/x|<=Eps to idziemy do 6. Obliczamy kolejne przybliżenie x:= (x+p/x)/2
Lista kroków c.d. Przechodzimy do 3. Wypisujemy wartość x. Koniec
A teraz schemat blokowy START Wprowadź liczbę p oraz dokładność Eps Pierwsze przybliżenie przyjmijmy równe 1 p, Eps x:=1 p>0 N T |x-p/x|<=Eps Podaj p>=0 Podałeś złą liczbę podpierwiastkową N x:=(x+p/x)/2 T x STOP Warunek pętli while…..do
Pętla while ……..do…… Dlaczego jej użycie jest tu poprawne? Konstrukcja while…do…. służy do opisywania iteracji ze sprawdzeniem warunku na początku. A tak właśnie jest w naszym schemacie.
Program w Pascalu program MetodaNewtonaRaphsona; {Program oblicza przybliżoną wartość pierwiastka kwadratowego z dowolnej liczby dodatniej. Jest to algorytm Newtona - Raphsona} {$APPTYPE CONSOLE} uses SysUtils; var Eps:real; {dokładność} p:real; {liczba podpierwiastkowa} x:real; {kolejne przybliżenie} begin { TODO -oUser -cConsole Main : Insert code here } x:=1; write('Podaj dokładność obliczeń, Eps= '); readln(Eps); write('Podaj wartość liczby podpierwiastkowej, p= '); readln(p);
Program w Pascalu c. d. if p>0 then begin while abs(x-p/x)>Eps do x:=((x+p/x)/2); writeln('Pierwiastek kwadratowy z liczby ',p:6:6,' wynosi: ',x:6:6) end else writeln('Liczba podpierwiastkowa nie może być ujemna!-Popraw'); writeln('Wciśnij klawisz ENTER' :60); readln; end.
Pogram w Excelu
Dziękuję za obejrzenie prezentacji Opracowała: Anna Ogórek Strona główna