Metoda stycznych

Metoda stycznych to algorytm numeryczny wyznaczający przybliżoną wartość miejsca zerowego funkcji z pewną dokładnością. Innym algorytmem, który można wykorzystać do wyznaczenia przybliżonej wartości miejsca zerowego funkcji jest algorytm bisekcji, omówiony w e‑materiale Algorytmy numeryczne i przybliżonePdzAH5eTwAlgorytmy numeryczne i przybliżone.

  1. Działanie metody rozpoczyna się od wskazania punktu startowego x1, będącego pierwszym przybliżeniem miejsca zerowego. Punkt ten wybieramy z przedziału , w którym będzie znajdowało się dokładnie jedno miejsce zerowemiejsce zerowemiejsce zerowe funkcji.

  2. Następnym krokiem jest wyznaczenie kolejnego przybliżenia , które jest współrzędną  punktu przecięcia stycznej do wykresu funkcji w punkcie z osią . Przybliżenie to wyznaczamy według następującego wzoru:

x2=x1-fx1f'x1

gdzie:

  • x1 – punkt startowy; przybliżona wartość miejsca zerowego funkcji fx w przedziale ;

  • x2 – przybliżona wartość miejsca zerowego funkcji fx w przedziale ; punkt przecięcia stycznej do wykresu funkcji fx w punkcie z osią ;

  • fx1 – wartość funkcji fx w punkcie ;

  • f'x1 – pochodna funkcji fx w punkcie .

Styczna jest geometryczną interpretacją pochodnej.

  1. Jeżeli:

    • różnica pomiędzy kolejnymi przybliżeniami jest mniejsza lub równa wybranej dokładności  lub

    • wartość funkcji w punkcie jest bliska 0,

kończymy algorytm z wynikiem – przybliżoną współrzędną miejsca zerowego funkcji jest z dokładnością . W przeciwnym wypadku wartość staje się nowym punktem startowym () i wracamy do kroku drugiego.

Implementacja algorytmu w języku Java

Specyfikacja problemu:

Dane:

  • f – funkcja, której miejsce zerowe należy obliczyć

  • ex – wartość błędu bezwzględnegobłąd bezwzględnybłędu bezwzględnego; liczba rzeczywista

  • ey – dokładność rozwiązania; liczba rzeczywista

  • x1 – początkowe przybliżenie miejsca zerowego; liczba rzeczywista

Wynik:

  • x – przybliżona wartość miejsca zerowegomiejsce zerowemiejsca zerowego funkcji; liczba rzeczywista

W pierwszej kolejności musimy zapisać funkcję, której miejsce zerowe chcemy odnaleźć oraz wyznaczyć jej pochodną. Funkcja, której miejsca zerowego będziemy szukać, to fx=x2-2. Wiemy, że funkcja ta nie ma ekstremów ani punktów przegięciabłąd bezwzględnypunktów przegięcia w pobliżu miejsc zerowych, zatem możemy zastosować algorytm stycznych, oczywiście pod warunkiem, że odpowiednio dobierzemy początkową wartość x1.

Zapiszmy definicję funkcji oraz jej pochodnej:

Linia 1. public static double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return x asterysk x minus 2 średnik. Linia 3. zamknij nawias klamrowy. Linia 5. public static double fp otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return 2 asterysk x średnik. Linia 7. zamknij nawias klamrowy.

fx jest funkcją kwadratową. Ma ona dwa rozwiązania – są nimi punkty rozmieszczone symetrycznie po obydwu stronach osi Y w kartezjańskim układzie współrzędnych.

Zastosujmy warunek stopumiejsce zerowewarunek stopu, który zakłada, że różnica między przybliżonymi wartościami punktów zerowych w kolejnych iteracjach wynosi ±ε, gdzie ε jest określone na początku algorytmu.

Przekażemy funkcji parametr x1, który określa wstępne przybliżenie miejsca zerowego i zmienne ex oraz ey, czyli wartość błędu bezwzględnego oraz dokładność rozwiązania, których osiągnięcie zakończy działanie algorytmu i uzna ostatni uzyskany wynik za wystarczająco dobry.

Oto przykładowy kod, którym posłużymy się w celu wyznaczenia miejsca zerowego funkcji fx:

Linia 1. public static double metodaStycznych otwórz nawias okrągły double x1 przecinek double ex przecinek double ey zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. double x2 znak równości x1 średnik. Linia 4. do otwórz nawias klamrowy. Linia 5. x1 znak równości x2 średnik. Linia 6. x2 znak równości x1 minus f otwórz nawias okrągły x1 zamknij nawias okrągły prawy ukośnik fp otwórz nawias okrągły x1 zamknij nawias okrągły średnik. Linia 7. zamknij nawias klamrowy while otwórz nawias okrągły otwórz nawias okrągły Math kropka abs otwórz nawias okrągły x2 minus x1 zamknij nawias okrągły zamknij nawias ostrokątny ex zamknij nawias okrągły ampersant ampersant otwórz nawias okrągły f otwórz nawias okrągły x2 zamknij nawias okrągły zamknij nawias ostrokątny ey zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 9. return x2 średnik. Linia 10. zamknij nawias klamrowy.

Musimy zastanowić się także, jaką wartość nadać parametrowi x1. Ponieważ badana funkcja ma dwa miejsca zerowe, x1 zadecyduje o tym, które z nich wyznaczymy. W przypadku naszej funkcji wystarczy, że przyjmiemy dowolną liczbę dodatnią, aby wyznaczyć dodatnie miejsce zerowe lub ujemną, aby wyznaczyć ujemny pierwiastek. Program może wyglądać następująco:

Linia 1. public class Main otwórz nawias klamrowy. Linia 2. public static double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. return x asterysk x minus 2 średnik. Linia 4. zamknij nawias klamrowy. Linia 6. public static double fp otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. return 2 asterysk x średnik. Linia 8. zamknij nawias klamrowy. Linia 10. public static double metodaStycznych otwórz nawias okrągły double x1 przecinek double ex przecinek double ey zamknij nawias okrągły otwórz nawias klamrowy. Linia 11. double x2 znak równości x1 średnik. Linia 13. do otwórz nawias klamrowy. Linia 14. x1 znak równości x2 średnik. Linia 15. x2 znak równości x1 minus f otwórz nawias okrągły x1 zamknij nawias okrągły prawy ukośnik fp otwórz nawias okrągły x1 zamknij nawias okrągły średnik. Linia 16. zamknij nawias klamrowy while otwórz nawias okrągły otwórz nawias okrągły Math kropka abs otwórz nawias okrągły x2 minus x1 zamknij nawias okrągły zamknij nawias ostrokątny ex zamknij nawias okrągły ampersant ampersant otwórz nawias okrągły f otwórz nawias okrągły x2 zamknij nawias okrągły zamknij nawias ostrokątny ey zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 18. return x2 średnik. Linia 19. zamknij nawias klamrowy. Linia 21. 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 22. double x1 znak równości metodaStycznych otwórz nawias okrągły 2 przecinek 0 kropka 00001 przecinek 0 kropka 00001 zamknij nawias okrągły średnik. Linia 23. double x2 znak równości metodaStycznych otwórz nawias okrągły minus 2 przecinek 0 kropka 00001 przecinek 0 kropka 00001 zamknij nawias okrągły średnik. Linia 24. System kropka out kropka println otwórz nawias okrągły cudzysłów f otwórz nawias okrągły cudzysłów plus x1 plus cudzysłów zamknij nawias okrągły znak równości cudzysłów plus f otwórz nawias okrągły x1 zamknij 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 f otwórz nawias okrągły cudzysłów plus x2 plus cudzysłów zamknij nawias okrągły znak równości cudzysłów plus f otwórz nawias okrągły x2 zamknij nawias okrągły zamknij nawias okrągły średnik. Linia 26. zamknij nawias klamrowy. Linia 27. zamknij nawias klamrowy.

Rezultatem działania programu będzie wypisanie dwóch wyników:

Linia 1. f otwórz nawias okrągły 1 kropka 4142156862745099 zamknij nawias okrągły znak równości 6 kropka 007304882871267E minus 6. Linia 2. f otwórz nawias okrągły minus 1 kropka 4142156862745099 zamknij nawias okrągły znak równości 6 kropka 007304882871267E minus 6.

Oznacza to, że z dużą dokładnością wyznaczone zostały dwa miejsca zerowe. Funkcja w tych miejscach przyjmuje wartości bliskie zeru.

Słownik

błąd bezwzględny
błąd bezwzględny

informuje o tym, ile różni się wartość dokładna od zmierzonej

funkcja ciągła
funkcja ciągła

wykresem funkcji ciągłej jest linia ciągła na całej dziedzinie

punkt przegięcia
punkt przegięcia

wartość argumentu, przy której następuje zmiana znaku drugiej pochodnej funkcji

warunek stopu
warunek stopu

wyrażenie logiczne, którego spełnienie powoduje zakończenie wykonywania algorytmu

miejsce zerowe
miejsce zerowe

argument funkcji, dla którego jej wartość wynosi 0