Wszechnica Wszechwiedzy - Baner

Numeryczne rozwiązywanie równań nieliniowych

Wiele problemów matematycznych, technicznych i naukowych prowadzi do równań, których nie można rozwiązać za pomocą prostych przekształceń algebraicznych. Niekiedy rozwiązanie dokładne nie istnieje w postaci elementarnego wzoru, a czasami jego wyznaczenie byłoby zbyt skomplikowane lub niepraktyczne.

W takich sytuacjach stosuje się numeryczne metody rozwiązywania równań. Nie wyznaczają one zazwyczaj pierwiastka w sposób symboliczny, lecz tworzą ciąg kolejnych przybliżeń coraz bliższych poszukiwanemu rozwiązaniu.

W artykule omówimy cztery podstawowe metody rozwiązywania równań nieliniowych:

Różnią się one szybkością zbieżności, wymaganiami dotyczącymi punktów początkowych, koniecznością obliczania pochodnej oraz gwarancją otrzymania rozwiązania.

Podstawowe znaczenie algorytmów przybliżonych, zbieżności i stabilności zostało omówione w artykule Metody numeryczne – czym są i do czego służą?.

Czym jest równanie nieliniowe?

Równanie jednej zmiennej można najczęściej sprowadzić do postaci:

\[f(x)=0.\]

Liczbę \(\alpha\), dla której:

\[f(\alpha)=0,\]

nazywamy pierwiastkiem albo miejscem zerowym funkcji \(f\).

Równanie jest nieliniowe, jeżeli niewiadoma nie występuje wyłącznie w pierwszej potędze i równania nie można zapisać w postaci:

\[ax+b=0.\]

Przykładami równań nieliniowych są:

\[x^3-x-2=0,\]

\[\cos x-x=0,\]

\[e^{-x}-x=0,\]

\[x\sin x-1=0.\]

Rozwiązanie równania \(f(x)=0\) można interpretować geometrycznie jako współrzędną punktu przecięcia wykresu funkcji \(y=f(x)\) z osią \(x\).

Dlaczego potrzebujemy metod numerycznych?

Dla równania liniowego rozwiązanie otrzymujemy bezpośrednio:

\[ax+b=0\quad\Longrightarrow\quad x=-\frac{b}{a}.\]

Istnieją również wzory rozwiązujące równania kwadratowe, sześcienne i równania czwartego stopnia. Nie ma jednak ogólnego wzoru wyrażonego za pomocą działań algebraicznych i pierwiastników dla wszystkich równań wielomianowych stopnia piątego i wyższych.

Jeszcze częściej spotyka się równania zawierające funkcje wykładnicze, logarytmiczne lub trygonometryczne, których pierwiastków nie można przedstawić w prostej postaci dokładnej.

Metody numeryczne pozwalają wtedy znaleźć wartość:

\[\widetilde{\alpha}\approx\alpha\]

z dokładnością wystarczającą do konkretnego zastosowania.

Lokalizacja pierwiastka

Przed rozpoczęciem iteracji warto ustalić, gdzie może znajdować się pierwiastek. Można to zrobić za pomocą:

Szczególnie ważne jest twierdzenie o wartości pośredniej. Jeżeli funkcja \(f\) jest ciągła na przedziale \([a,b]\) oraz:

\[f(a)\cdot f(b)\lt 0,\]

to w przedziale \((a,b)\) istnieje co najmniej jeden pierwiastek równania:

\[f(x)=0.\]

Warunek zmiany znaku wykorzystują metoda bisekcji i metoda regula falsi.

Warunek ten jest wystarczający, ale nie jest konieczny. Funkcja może dotykać osi \(x\), nie zmieniając znaku. Dzieje się tak na przykład dla pierwiastka parzystej krotności.

Dla funkcji:

\[f(x)=(x-1)^2\]

liczba \(x=1\) jest pierwiastkiem, mimo że po obu jego stronach funkcja pozostaje nieujemna.

Wspólny przykład obliczeniowy

Działanie omawianych metod porównamy na równaniu:

\[x^3-x-2=0.\]

Definiujemy funkcję:

\[f(x)=x^3-x-2.\]

Obliczamy wartości na końcach przedziału \([1,2]\):

\[f(1)=1-1-2=-2,\]

\[f(2)=8-2-2=4.\]

Ponieważ:

\[f(1)\cdot f(2)=-8\lt 0,\]

w przedziale \((1,2)\) znajduje się co najmniej jeden pierwiastek. Jego wartość z większą dokładnością wynosi około:

\[\alpha\approx 1{,}5213797068.\]

Metoda bisekcji

Metoda bisekcji, nazywana również metodą połowienia przedziału, jest jedną z najprostszych i najbardziej niezawodnych metod rozwiązywania równań nieliniowych.

Zakładamy, że funkcja \(f\) jest ciągła na przedziale \([a,b]\) oraz:

\[f(a)\cdot f(b)\lt 0.\]

Obliczamy środek przedziału:

\[c=\frac{a+b}{2}.\]

Następnie sprawdzamy znak \(f(c)\). Zachowujemy tę połowę przedziału, na której końcach funkcja ma przeciwne znaki.

Algorytm bisekcji

  1. Wybierz przedział \([a,b]\), dla którego \(f(a)f(b)\lt 0\).
  2. Oblicz środek przedziału:
    \[
    c=\frac{a+b}{2}.
    \]
  3. Oblicz \(f(c)\).
  4. Jeżeli \(f(c)=0\), zakończ obliczenia.
  5. Jeżeli \(f(a)f(c)\lt 0\), przyjmij \(b=c\).
  6. W przeciwnym przypadku przyjmij \(a=c\).
  7. Powtarzaj dzielenie przedziału aż do osiągnięcia wymaganej dokładności.

Przykład bisekcji

Dla równania:

\[x^3-x-2=0\]

rozpoczynamy od przedziału:

\[[a_0,b_0]=[1,2].\]

Iteracja\(a\)\(b\)\(c=(a+b)/2\)\(f(c)\)
1121,5−0,125
21,521,751,609375
31,51,751,6250,666016
41,51,6251,56250,252197
51,51,56251,531250,059113

W każdej iteracji długość przedziału zmniejsza się dwukrotnie. Kolejne przedziały coraz dokładniej ograniczają położenie pierwiastka.

Infografika przedstawiająca metodę bisekcji, podział przedziału na połowy, warunek zmiany znaku funkcji, algorytm, kryterium stopu oraz zbieżność liniową
Metoda bisekcji polega na kolejnym dzieleniu przedziału zawierającego pierwiastek na połowy i wybieraniu podprzedziału, na którego końcach funkcja ma przeciwne znaki.

Zbieżność i oszacowanie błędu

Po \(n\) podziałach długość przedziału wynosi:

\[b_n-a_n=\frac{b_0-a_0}{2^n}.\]

Jeżeli jako przybliżenie przyjmiemy środek przedziału:

\[c_n=\frac{a_n+b_n}{2},\]

to błąd spełnia oszacowanie:

\[|\alpha-c_n|\leq\frac{b_0-a_0}{2^{n+1}}.\]

Aby zagwarantować błąd nie większy niż \(\varepsilon\), należy wykonać co najmniej:

\[n\geq \left\lceil \log_2\left(\frac{b_0-a_0}{2\varepsilon}\right) \right\rceil\]

podziałów.

Bisekcja ma zbieżność liniową. Nie jest bardzo szybka, ale pozwala z góry oszacować liczbę potrzebnych iteracji.

Zalety i ograniczenia bisekcji

Metoda regula falsi

Metoda regula falsi, nazywana metodą fałszywego położenia, podobnie jak bisekcja rozpoczyna się od przedziału \([a,b]\), na którego końcach funkcja przyjmuje wartości przeciwnych znaków.

Zamiast wybierać środek przedziału, prowadzimy prostą przechodzącą przez punkty:

\[(a,f(a))\qquad\text{oraz}\qquad(b,f(b)).\]

Prosta ta jest sieczną wykresu funkcji. Jej punkt przecięcia z osią \(x\) przyjmujemy jako nowe przybliżenie pierwiastka.

Wzór na to przybliżenie ma postać:

\[c= b-\frac{f(b)(b-a)}{f(b)-f(a)}.\]

Równoważnie:

\[c= \frac{af(b)-bf(a)}{f(b)-f(a)}.\]

Algorytm metody regula falsi

  1. Wybierz przedział \([a,b]\), dla którego \(f(a)f(b)\lt 0\).
  2. Wyznacz punkt przecięcia siecznej z osią \(x\):
    \[
    c=b-\frac{f(b)(b-a)}{f(b)-f(a)}.
    \]
  3. Oblicz \(f(c)\).
  4. Jeżeli spełnione jest kryterium stopu, zakończ obliczenia.
  5. Jeżeli \(f(a)f(c)\lt 0\), przyjmij \(b=c\).
  6. W przeciwnym przypadku przyjmij \(a=c\).
  7. Powtarzaj obliczenia dla nowego przedziału.

Przykład metody regula falsi

Dla funkcji:

\[f(x)=x^3-x-2\]

oraz przedziału \([1,2]\) pierwsze przybliżenie wynosi:

\[c_1= 2-\frac{4(2-1)}{4-(-2)} = 2-\frac{4}{6} = 1{,}333333.\]

Ponieważ:

\[f(c_1)\approx-0{,}962963,\]

nowy przedział ma postać:

\[[1{,}333333,\ 2].\]

IteracjaPrzybliżenie \(c_k\)\(f(c_k)\)
11,333333−0,962963
21,462687−0,333339
31,504019−0,101818
41,516331−0,029895
51,519919−0,008675
61,520957−0,002509
Infografika przedstawiająca metodę regula falsi, sieczną przechodzącą przez końce przedziału, punkt przecięcia z osią x, algorytm i kryteria zbieżności
W metodzie regula falsi nowe przybliżenie pierwiastka wyznacza się jako punkt przecięcia siecznej z osią argumentów, zachowując przy tym przedział ze zmianą znaku funkcji.

Zbieżność metody regula falsi

Metoda zachowuje przedział zawierający pierwiastek, dzięki czemu przy odpowiednich założeniach jest bezpieczniejsza od metod otwartych. Jej zbieżność jest zazwyczaj liniowa.

Często działa szybciej niż bisekcja, ponieważ wykorzystuje wartości funkcji, a nie tylko ich znaki. Może jednak wystąpić sytuacja, w której jeden koniec przedziału przez wiele iteracji prawie się nie zmienia. Powoduje to spowolnienie obliczeń, nazywane niekiedy zastojem metody.

Zalety i ograniczenia regula falsi

Metoda siecznych

Metoda siecznych również wykorzystuje prostą przechodzącą przez dwa punkty wykresu funkcji. W przeciwieństwie do metody regula falsi nie zachowuje jednak przedziału ze zmianą znaku.

Do rozpoczęcia obliczeń potrzebne są dwa przybliżenia:

\[x_0\qquad\text{oraz}\qquad x_1.\]

Sieczna przechodząca przez punkty:

\[(x_{k-1},f(x_{k-1}))\]

oraz:

\[(x_k,f(x_k))\]

przecina oś argumentów w kolejnym przybliżeniu:

\[x_{k+1} = x_k- \frac{f(x_k)(x_k-x_{k-1})} {f(x_k)-f(x_{k-1})}.\]

Wzór można interpretować jako modyfikację metody Newtona, w której pochodna jest zastępowana ilorazem różnicowym:

\[f'(x_k)\approx \frac{f(x_k)-f(x_{k-1})} {x_k-x_{k-1}}.\]

Algorytm metody siecznych

  1. Wybierz dwa początkowe przybliżenia \(x_0\) i \(x_1\).
  2. Oblicz:
    \[
    x_{k+1}
    =
    x_k-
    \frac{f(x_k)(x_k-x_{k-1})}
    {f(x_k)-f(x_{k-1})}.
    \]
  3. Sprawdź kryterium stopu.
  4. Przyjmij:
    \[
    x_{k-1}=x_k,\qquad x_k=x_{k+1}.
    \]
  5. Powtarzaj obliczenia aż do osiągnięcia wymaganej dokładności.

Przykład metody siecznych

Dla równania:

\[x^3-x-2=0\]

przyjmujemy:

\[x_0=1,\qquad x_1=2.\]

Pierwsze nowe przybliżenie wynosi:

\[x_2 = 2- \frac{4(2-1)} {4-(-2)} = 1{,}333333.\]

W kolejnej iteracji korzystamy już z punktów \(x_1=2\) oraz \(x_2=1{,}333333\), niezależnie od tego, czy tworzą przedział ze zmianą znaku.

IteracjaNowe przybliżenieWartość funkcji
11,333333−0,962963
21,462687−0,333339
31,5311690,058626
41,520926−0,002693
51,521376−0,000020
61,521380około \(7\cdot10^{-9}\)
Infografika przedstawiająca metodę siecznych, dwa kolejne przybliżenia pierwiastka, sieczną wykresu funkcji, wzór iteracyjny oraz zbieżność superliniową.
Metoda siecznych wykorzystuje dwa ostatnie przybliżenia do wyznaczenia siecznej, której przecięcie z osią (x) stanowi kolejne przybliżenie pierwiastka.

Zbieżność metody siecznych

W pobliżu prostego pierwiastka metoda siecznych ma zbieżność superliniową rzędu:

\[\varphi=\frac{1+\sqrt{5}}{2}\approx1{,}618.\]

Jest więc zwykle szybsza od bisekcji i metody regula falsi, ale wolniejsza od prawidłowo działającej metody Newtona.

Nie ma jednak ogólnej gwarancji zbieżności. Przy źle dobranych punktach początkowych kolejne przybliżenia mogą oddalać się od pierwiastka, oscylować albo prowadzić do dzielenia przez bardzo małą wartość:

\[f(x_k)-f(x_{k-1})\approx0.\]

Zalety i ograniczenia metody siecznych

Metoda Newtona

Metoda Newtona, nazywana również metodą stycznych, należy do najważniejszych i najszybszych metod rozwiązywania równań nieliniowych.

W punkcie bieżącego przybliżenia \(x_k\) prowadzimy styczną do wykresu funkcji. Jej równanie ma postać:

\[y=f(x_k)+f'(x_k)(x-x_k).\]

Miejsce przecięcia stycznej z osią \(x\) otrzymujemy po przyjęciu \(y=0\):

\[0=f(x_k)+f'(x_k)(x_{k+1}-x_k).\]

Po przekształceniu otrzymujemy wzór Newtona:

\[x_{k+1} = x_k-\frac{f(x_k)}{f'(x_k)}.\]

Metoda wykorzystuje więc liniowe przybliżenie funkcji w otoczeniu aktualnego punktu. Związek stycznej z pochodną został przedstawiony w artykule Pochodna funkcji.

Algorytm metody Newtona

  1. Wybierz początkowe przybliżenie \(x_0\).
  2. Oblicz wartość funkcji \(f(x_k)\) i pochodnej \(f'(x_k)\).
  3. Wyznacz:
    \[
    x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)}.
    \]
  4. Sprawdź kryterium stopu.
  5. Przyjmij \(x_k=x_{k+1}\) i powtórz obliczenia.

Przykład metody Newtona

Dla funkcji:

\[f(x)=x^3-x-2\]

pochodna wynosi:

\[f'(x)=3x^2-1.\]

Wzór iteracyjny ma więc postać:

\[x_{k+1} = x_k- \frac{x_k^3-x_k-2} {3x_k^2-1}.\]

Przyjmijmy wartość początkową:

\[x_0=1{,}5.\]

Pierwsza iteracja daje:

\[x_1 = 1{,}5- \frac{1{,}5^3-1{,}5-2} {3\cdot1{,}5^2-1} \approx1{,}5217391304.\]

Kolejne przybliżenia wynoszą:

Iteracja\(x_k\)\(f(x_k)\)
01,5000000000−0,125000
11,5217391304około \(2{,}14\cdot10^{-3}\)
21,5213798060około \(5{,}89\cdot10^{-7}\)
31,5213797068około \(4{,}53\cdot10^{-14}\)

W tym przykładzie już po trzech iteracjach otrzymujemy bardzo dokładne przybliżenie pierwiastka.

Infografika przedstawiająca metodę Newtona, styczną do wykresu funkcji w punkcie bieżącego przybliżenia, jej przecięcie z osią x oraz wzór iteracyjny
W metodzie Newtona styczna do wykresu funkcji w punkcie bieżącego przybliżenia wyznacza kolejne przybliżenie pierwiastka.

Zbieżność metody Newtona

Jeżeli punkt początkowy leży dostatecznie blisko prostego pierwiastka \(\alpha\), funkcja jest odpowiednio gładka oraz:

\[f'(\alpha)\ne0,\]

metoda Newtona ma zbieżność kwadratową. Oznacza to w przybliżeniu, że liczba poprawnych cyfr może podwajać się w każdej iteracji.

Jest to jednak wynik lokalny. Metoda nie gwarantuje zbieżności dla dowolnego punktu startowego.

Kiedy metoda Newtona może zawieść?

Problemy mogą wystąpić, gdy:

Jeżeli:

\[f'(x_k)\approx0,\]

iloraz:

\[\frac{f(x_k)}{f'(x_k)}\]

może przyjąć bardzo dużą wartość i przenieść kolejne przybliżenie daleko od poszukiwanego pierwiastka.

Pierwiastki wielokrotne

Dla pierwiastka wielokrotnego klasyczna metoda Newtona traci zwykle zbieżność kwadratową i staje się zbieżna liniowo.

Jeżeli znana jest krotność \(m\), można zastosować zmodyfikowany wzór:

\[x_{k+1} = x_k- m\frac{f(x_k)}{f'(x_k)}.\]

Zalety i ograniczenia metody Newtona

Metody przedziałowe i metody otwarte

Omówione algorytmy można podzielić na dwie grupy.

Metody przedziałowe

W każdej iteracji zachowują one przedział, na którego końcach funkcja ma przeciwne znaki. Są dzięki temu stosunkowo bezpieczne, ale ich zbieżność jest zazwyczaj liniowa.

Metody otwarte

Nie wymagają one zachowywania przedziału obejmującego pierwiastek. Mogą być znacznie szybsze, ale przy niewłaściwym starcie mogą się rozbiegać.

Kryteria zakończenia iteracji

Obliczeń nie prowadzi się w nieskończoność. Iterację kończymy po osiągnięciu zadanej tolerancji albo po przekroczeniu maksymalnej liczby kroków.

Mała wartość funkcji

Można zakończyć obliczenia, gdy:

\[|f(x_k)|\lt\varepsilon_f.\]

Warunek ten sprawdza, czy otrzymany punkt prawie spełnia równanie.

Mała wartość funkcji nie zawsze oznacza jednak mały błąd położenia pierwiastka. Jeżeli wykres jest bardzo płaski, duża zmiana \(x\) może powodować tylko niewielką zmianę \(f(x)\).

Mała zmiana kolejnych przybliżeń

Drugie kryterium ma postać:

\[|x_{k+1}-x_k|\lt\varepsilon_x.\]

Lepsze jest często połączenie tolerancji bezwzględnej i względnej:

\[|x_{k+1}-x_k| \lt \varepsilon_{\mathrm{abs}} + \varepsilon_{\mathrm{rel}}|x_{k+1}|.\]

Szerokość przedziału

W metodach przedziałowych można zastosować warunek:

\[|b_k-a_k|\lt\varepsilon_x.\]

Jest to szczególnie wiarygodne kryterium, ponieważ pierwiastek nadal znajduje się wewnątrz kontrolowanego przedziału.

Maksymalna liczba iteracji

Każdy algorytm powinien mieć również ustaloną maksymalną liczbę iteracji. Chroni to program przed nieskończonym wykonywaniem obliczeń w przypadku rozbieżności, stagnacji lub niewłaściwych danych.

W praktyce dobrze jest stosować jednocześnie kilka kryteriów stopu, na przykład małą wartość funkcji, małą zmianę przybliżeń i ograniczenie liczby iteracji.

Porównanie metod

MetodaDane początkowePochodnaZachowanie przedziałuTypowa zbieżnośćGwarancja
BisekcjaPrzedział \([a,b]\)NieTakLiniowaTak, przy ciągłości i zmianie znaku
Regula falsiPrzedział \([a,b]\)NieTakLiniowaTak, przy odpowiednich założeniach
SiecznychDwa punktyNieNieSuperliniowa, około 1,618Nie
NewtonaJeden punkt i pochodnaTakNieKwadratowa w pobliżu prostego pierwiastkaTylko lokalna

Którą metodę wybrać?

Nie istnieje jedna metoda najlepsza dla wszystkich równań.

W praktycznych programach często łączy się różne metody. Najpierw stosuje się bezpieczną bisekcję, aby zawęzić przedział, a następnie przechodzi do szybszej metody Newtona lub siecznych.

Metody hybrydowe

Metoda hybrydowa łączy bezpieczeństwo metody przedziałowej z szybkością metody otwartej.

Przykładowy schemat może wyglądać następująco:

  1. Znajdź przedział \([a,b]\), dla którego \(f(a)f(b)\lt0\).
  2. Wykonaj kilka kroków bisekcji.
  3. Wybierz środek zwężonego przedziału jako punkt startowy metody Newtona.
  4. Jeżeli krok Newtona wychodzi poza przedział albo pochodna jest zbyt mała, wykonaj ponownie krok bisekcji.
  5. Kontynuuj aż do osiągnięcia zadanej tolerancji.

Takie rozwiązanie ogranicza ryzyko rozbieżności, a jednocześnie pozwala korzystać z szybkiej zbieżności w pobliżu pierwiastka.

Błędy i stabilność obliczeń

Każde przybliżenie pierwiastka jest obarczone błędem. Na wynik wpływają między innymi:

Zagadnienia błędu bezwzględnego, względnego, propagacji błędów i uwarunkowania zostały szerzej przedstawione w artykule Błędy obliczeń numerycznych – rodzaje, źródła i ocena dokładności.

W obliczeniach należy także uwzględniać ograniczoną reprezentację liczb opisaną w artykule Arytmetyka zmiennoprzecinkowa – cecha, mantysa i zapis binarny.

Praktyczne zasady implementacji

Szybka metoda nie zawsze jest metodą najlepszą. W obliczeniach numerycznych równie ważne jak tempo zbieżności są niezawodność, kontrola błędu i właściwy wybór punktów początkowych.

Podsumowanie

Numeryczne rozwiązywanie równania \(f(x)=0\) polega na konstruowaniu ciągu przybliżeń zmierzających do poszukiwanego pierwiastka.

Metoda bisekcji wielokrotnie dzieli przedział na połowy. Jest wolna, ale niezawodna i pozwala łatwo kontrolować błąd.

Metoda regula falsi zastępuje środek przedziału punktem przecięcia siecznej z osią \(x\), zachowując przy tym przedział obejmujący pierwiastek.

Metoda siecznych korzysta z dwóch ostatnich przybliżeń i nie wymaga obliczania pochodnej. Ma zbieżność superliniową, ale nie gwarantuje otrzymania rozwiązania.

Metoda Newtona wykorzystuje styczną do wykresu funkcji. W pobliżu prostego pierwiastka jest zbieżna kwadratowo, lecz wymaga pochodnej i odpowiedniego punktu startowego.

W praktyce najlepsze rezultaty często dają algorytmy hybrydowe, łączące bezpieczne ograniczanie przedziału z szybką iteracją Newtona lub metodą siecznych.

Powiązane artykuły

Masz problem z tym tematem?

Wszechwiedza.pl pomaga zrozumieć matematykę, statystykę, ekonometrię, badania operacyjne, analizę danych, mechanikę, rachunkowość i wiele innych przedmiotów — spokojnie, konkretnie i krok po kroku. 

Zapytaj o pomoc