poniedziałek, 9 stycznia 2012

Numeryczne obliczanie miejsc zerowych

Wykonałem program, który oblicza miejsca zerowe funkcji za pomocą trzech najbardziej popularnych metod numerycznych. Miejsce zerowe funkcji to inaczej pierwiastek tej funkcji, albo argument dla którego wartość funkcji jest równa zero. Czyli f(x) = 0. Nie zawsze jest łatwe obliczenie dokładne miejsca zerowego. Dlatego z pomocą przychodzą metody numeryczne, które pozwalają wyznaczać miejsca zerowe w przybliżeniu, wręcz z żądaną dokładnością.

Program, który napisałem wykorzystuje trzy sposoby:
  1. Metodę bisekcji
  2. Metodę Newtona
  3. Metodę siecznych
Pierwsza z nich jest bardzo intuicyjna, a wykorzystuje ona własność Darboux. Zakładamy, że funkcja jest ciągła. Jeśli w punkcie A wartość funkcji jest ujemna w punkcie B wartość jest dodatnia. To znaczy, że po drodze funkcja osiąga wartość 0, czyli znajduje się tam miejsce zerowe. W tej metodzie:
  • Bierzemy przedział [A, B]
  • Przecinamy go w połowie w punkcie C
  • Mamy teraz dwa przedziały [A, C] i [C, B] 
  • Wybieramy ten którego krańce mają przeciwne znaki
  • Powtarzamy aż f(C) = 0

Metoda Newtona albo inaczej metoda stycznych. W tej metodzie korzystamy z pochodnych a kolejne przybliżenia miejsca zerowego obliczamy za pomocą wzoru:
Jest ona szybsza niż metoda bisekcji, jednak jej wadą jest to że nie zawsze za jej pomocą da się obliczyć miejsce zerowe. A w przypadku zbyt dalekiego wybrania punktu początkowego może wręcz zacząć oddalać się od miejsca zerowego.

Metoda siecznych jest o tyle wygodna, że nie wymaga liczenie pochodnych (co czasem może być pracochłonne), a jedynie dwu punktów początkowych za pomocą których przeprowadzimy sieczną. Ta metoda działa podobnie jak metoda stycznych. Kolejne sieczne również przybliżają się do miejsca zerowego.

Program został napisany w języku C++. Tutaj działa pod Linuksem, jednak jest przenośny i może być uruchomiony na Windowsie czy Macu.