Metoda bisekcji – co to jest, algorytm i przykład
Co to jest metoda bisekcji?
Metoda bisekcji jest jednym z podstawowych rozwiązań numerycznych służących do znajdowania pierwiastka równania wielomianowego. Obejmuje ona przedział, w którym leży pierwiastek równania, i dzieli je na połowy w każdej iteracji, aż znajdzie pierwiastek. Dlatego metodę bisekcji nazywa się również metodą bracketingu.
Jednakże, ponieważ mechanizm działania jest podobny do algorytmu wyszukiwania binarnego, metoda bisekcji jest również znana jako metoda wyszukiwania binarnego, metoda halvingu lub metoda dychotomii. Opiera się ona przede wszystkim na twierdzeniu o wartości pośredniej.
Znajdowanie pierwiastków równań
W tym przykładzie rozważymy tylko równania z jedną zmienną niezależną. Może być liniowy lub nieliniowy. Równania liniowe służą do przedstawienia wykresu linii prostej, natomiast równania nieliniowe służą do przedstawienia krzywych.
Pierwiastek równania oznacza wartość zmiennej niezależnej spełniającej równanie. Na przykład: pierwiastek równania f(x)= 4-x2 = 0 równa się 2, ponieważ f(2) = 4-22 = 0.
Rozważmy f(x) jako rzeczywistą funkcję ciągłą. Zgodnie z twierdzeniem o wartości pośredniej równanie f(x)=0 ma co najmniej jeden pierwiastek pomiędzy a i b, jeśli f(a)f(b) < 0. Funkcja f(x) ma pierwiastek „c”, pomiędzy A i B.
Graficzne przedstawienie metody bisekcji
Poniższy wykres przedstawia mechanizm działania metody bisekcji. Z wykresu widać, że pierwiastek równania jest zaznaczony na czerwono.
Najpierw:
- Najpierw przyjęliśmy dwa wstępne przypuszczenia, a1 oraz b1, dla którego f(a1)pełne wyżywienie1) < 0. Zgodnie z twierdzeniem o wartości pośredniej pierwiastek powinien leżeć w [a1b1].
- Możemy znaleźć środek a1 oraz b1, co jest b2. Zatem początkowy odstęp jest teraz zredukowany do [a1b2], ponieważ f(a1)pełne wyżywienie2) < 0.
- W ten sam sposób odstęp jest zmniejszany, aż do znalezienia przybliżonego rozwiązania.
Algorytm metody Bisekcji
Etapy stosowania algorytmu metody bisekcji do znalezienia pierwiastka równania f(x)=0 są następujące
Krok 1) Wybierz początkowe przypuszczenia a, b i współczynnik tolerancji e
Krok 2) Jeśli f(a)f(b) >=0, to pierwiastek nie leży w tym przedziale. Zatem rozwiązania nie będzie.
Krok 3) Znajdź punkt środkowy, c = (a+b)/2
(i) Jeżeli wartość funkcji punktu środkowego f(c) = 0, to c jest pierwiastkiem. Przejdź do kroku 5.
(ii) Jeśli f(a)f(c) < 0, pierwiastek leży pomiędzy a i c. Następnie ustaw a = a, b = c.
(iii) Inaczej ustaw a = c, b = b.
Krok 4) Jeżeli błąd bezwzględny jest większy niż współczynnik tolerancji lub (ba) > e, przejdź do kroku 3.
Krok 5) Wyświetl c jako przybliżony pierwiastek.
Zobaczmy przykład algorytmu metody bisekcji.
Musimy znaleźć pierwiastek następującej funkcji ciągłej, korzystając ze wzoru metody bisekcji.
fa(x) = x3 - x2 + 2
Przykład metody bisekcji
Krok 1) Załóżmy,
a = -10,
b = 10 i
e = 1% lub 0.01
Krok 2) Teraz sprawdzimy, czy f(a)f(b) >= 0, czy nie.
f(a) = f(-10) = (-10)3 – (-10)2 + 2 = -1098
f(b) = f(10) = (10)3 – (10)2 + 2 = 902
f(a)f(b) = f(-10)f(10) = (-1098)(902) < 0
Zatem pierwiastek powyższej funkcji leży w tym przedziale [-10, 10].
Krok 3) Następnie najpierw zostanie obliczony punkt środkowy c.
Teraz należy sprawdzić następujące warunki:
(i) czy f(c) = 0:
f(c) = f(0) = (0)3 – (0)2 + 2 = 2 ≠ 0
(ii) jeśli f(a)f(c) < 0:
f(c)f(a) = 2*(-1098) < 0
Warunek jest spełniony. W następnej iteracji wartości będą następujące:
a = a = -10
b = do = 0
Krok 4) Ponieważ (ba) = (0-(-10)) = 10>0.05, proces zostanie powtórzony. Kolejne iteracje przedstawiono w tabeli.
Iteracja | a | b | c | ba | f(c) |
---|---|---|---|---|---|
1 | -10 | 0 | 0 | 10 | 2 |
2 | -5 | 0 | -5 | 5 | -148 |
3 | -2.5 | 0 | -2.5 | 2.5 | -19.875 |
4 | -1.25 | 0 | -1.25 | 1.25 | -1.52562 |
5 | -1.25 | -0.625 | -0.625 | 0.625 | 1.36523 |
6 | -1.25 | -0.9375 | -0.9375 | 0.3125 | 0.297119 |
7 | -1.09375 | -0.9375 | -1.09375 | 0.15625 | -0.50473 |
8 | -1.01562 | -0.9375 | -1.01562 | 0.078125 | -0.0791054 |
9 | -1.01562 | -0.976562 | -0.976562 | 0.0390625 | 0.115003 |
10 | -1.01562 | -0.996094 | -0.996094 | 0.0195312 | 0.0194703 |
11 | -1.00586 | -0.996094 | -1.00586 | 0.00976562 | -0.0294344 |
Krok 5) W jedenastej iteracji warunek z kroku 11 będzie fałszywy. Zatem pierwiastkiem tego równania jest -4.
Schemat logiczny metody bisekcji
Pseudo kod
Start Set a, b, e if f(a)*f(b) >=0 Output("Root does not exist in this interval") Stop while (b-a)>e do c ← (a + b)/2 if f(c) = 0 break end if if f(c)*f(a) < 0 then b ← c else a ← c end while Output(c) Stop
Przykład metody bisekcji w C/C++
Wejście:
#include<bits/stdc++.h> using namespace std; #define Error 0.01 double value(double x) { return x*x*x - x*x + 2; } void bisection_method(double a, double b) { if (value(a) * value(b) >= 0) { cout << "The root does not lie in this interval\n"; return; } double c = a; while ((b-a) >= Error) { c = (a+b)/2; if (value(c) == 0.0) break; else if (value(c)*value(a) < 0) b = c; else a = c; } cout << "The root is :" << c; } int main() { double a =-10 , b = 10; bisection_method(a, b); return 0; }
Wyjście:
The root is :-1.00586
Przykład metody bisekcji w Python
Wejście:
def value(x): return x*x*x - x*x + 2 def bisection_method(a,b): if (value(a) * value(b) >= 0): return c = a while ((b-a) >= 0.01): c = (a+b)/2 if (value(c) == 0.0): break if (value(c)*value(a) < 0): b = c else: a = c print("The root is : ","%.4f"%c) a =-10 b = 10 bisection_method(a, b)
Wyjście:
The root is : -1.0059
Zalety i ograniczenia metody bisekcji
Oto zalety i wady metody bisekcji:
ZALETY | Wady |
---|---|
Łatwa i prosta metoda wyszukiwania korzeni do wdrożenia. | Zbieżność jest powolna, ponieważ polega po prostu na zmniejszeniu o połowę przedziału. |
Ponieważ obejmuje pierwiastek, jest zawsze zbieżny. | Jeśli jedno z początkowych założeń jest blisko pierwiastka, dotarcie do korzenia będzie wymagało większej liczby iteracji. |
Poziom błędu można kontrolować, zwiększając lub zmniejszając liczbę iteracji. |