Przeczytaj
W e‑materiale Wyznaczanie przybliżonej wartości miejsca zerowego funkcji metodą stycznychWyznaczanie przybliżonej wartości miejsca zerowego funkcji metodą stycznych poznaliśmy algorytm wyszukiwania wartości miejsca zerowego funkcji z pewną dokładnością. Napiszmy zatem program w języku Python, który pozwoli dokonać obliczenia przybliżenia takiego pierwiastkapierwiastka.
Pamiętajmy, że kolejne przybliżenia (pierwiastki) wyznaczane są na podstawie następującego wzoru:
gdzie:
– punkt startowy; przybliżona wartość miejsca zerowego funkcji w przedziale ;
– przybliżona wartość miejsca zerowego funkcji w przedziale ; punkt przecięcia stycznej do wykresu funkcji w punkcie z osią ;
– wartość funkcji w punkcie ;
– pochodna funkcji w punkcie .
Styczna jest geometryczną interpretacją pochodnej.
Napiszmy program realizujący algorytm wyznaczania miejsca zerowego funkcji w przedziale z dokładnością do trzech miejsc po przecinku.
Tworzymy definicję funkcji o nazwie funkcja
. Jej rolą jest obliczenie i zwrócenie wartości analizowanej funkcji w punkcie x
zgodnie z wcześniej podanym wzorem.
Następnie tworzymy kolejną funkcję obliczającą pochodną funkcji, której miejsce zerowe chcemy wyznaczyć. Pochodna funkcji ma następujący wzór:
W programie nadajemy jej nazwę pochodna
.
Najważniejszą funkcją będzie metoda_stycznych
o następujących parametrach: punkt startowy xIndeks dolny 11
, wartość błędu bezwzględnego ex
oraz dokładność ey
, czyli maksymalna różnica pomiędzy kolejnymi przybliżeniami, przy której możemy zakończyć algorytm. W trakcie pisania programu będziemy korzystali z funkcji fabs
umożliwiającej obliczenie wartości bezwzględnejwartości bezwzględnej wyrażenia.
Na początek tworzymy dodatkową zmienną lokalną x2
, której przypisujemy wartość zmiennej x1
. W pętli nieskończonej while True
przypisujemy zmiennej x1
wartość zmiennej x2
. W tym momencie wartość zapisana w zmiennej x2
staje się nowym punktem startowym. Następnie zgodnie z przedstawionym wcześniej wzorem obliczamy miejsce zerowe i zapisujemy do zmiennej x2
. Jeżeli różnica pomiędzy kolejnymi przybliżeniami (wartość bezwzględna, którą obliczamy funkcją fabs()
) jest mniejsza lub równa wartości błędu bezwzględnego bądź wartość funkcji dla podanego argumentu jest mniejsza lub równa dokładności, wychodzimy z pętli i na koniec zwracamy wartość zmiennej x2
, czyli przybliżoną wartość miejsca zerowego funkcji.
W omawianym przykładzie wykonanie takiego programu będzie wyglądać następująco (użyjemy specjalnego formatowania liczb rzeczywistych):
Dobieranie punktu startowego oraz zbieżność
ZbieżnośćZbieżność nie zawsze musi zachodzić. Jeżeli źle dobierzemy punkt startowy, algorytm stycznej nie zwróci wyniku. W takim wypadku program może nigdy się nie kończyć, ponieważ w każdej iteracji będzie się oddalał od znalezienia miejsca zerowego. Taką zbieżność nazywamy lokalną. Aby uniknąć możliwej nieskończonej pętli, możemy do funkcji wprowadzić parametr, który ograniczy liczbę prób, np.:
Efekt wykonania takiego kodu dla dwóch wartości parametru x1
:
x1 = 99999999999999
x1 = 99999999999999999999999
O metodzie tej mówimy, że jest szybko zbieżna, ponieważ jej zbieżność jest kwadratowa, a nie liniowa; zależy ona jednak od różnych czynników, m.in. od przybliżenia założonego na starcie oraz od postaci funkcyjnej równania.
Słownik
metoda rozwiązywania problemów matematycznych za pomocą operacji na liczbach
bezwzględna różnica pomiędzy dokładną wartością a jej uzyskanym przybliżeniem (np. w wyniku obliczeń lub pomiarów)
funkcja wyrażana przez wielomian, czyli sumę co najmniej dwóch jednomianówjednomianów
iloczyn litery oznaczającej zmienną oraz liczby (nazywanej stałą)
inaczej: miejsce zerowe funkcji, czyli argument, dla którego wartość funkcji wynosi zero
miara szybkości, z jaką zmieniają się wartości funkcji; w ujęciu geometrycznym pochodną stanowi styczna do rozpatrywanej funkcji w ustalonym punkcie
linia prosta mająca jeden punkt wspólny z linią krzywą, np. wartością funkcji w punkcie, nieprzecinająca linii krzywej
odległość danej liczby od zera na osi liczbowej
zmierzanie do pewnej docelowej wartości granicznej wraz ze zwiększaniem się liczby iteracji