Odpowiedź :
metoda bisekcji polega na sprawdzaniu czy w zadanym przedziale znajduje sie miejsce zerowe przez sprawdzenie iloczynu wartosci funkcji na końcach przedzialu. jezeli f(a)*f(b)<0 to znaczy, że, przy założeniu, że funkcja jest ciągła i nieokresowa na zadanym przedziale, w przedziale <a;b> znajduje się miejsce zerowe.
Algorytm zaczynamy ustalając punkt srodkowy przedziału
c=(a+b)/2
liczmy wartosc funkcji w c
y=f(c)
jeśli wartość funkcji w c jest mniejsza od zadanej dokladnosci delta, to c jest miejscem zerowym.
W przeciwnym wypadku sprawdz czy f(a)*f(c)<0. Jeżeli warunek jest spełniony, to b=c i wróć do początku. Jeżeli warunek nie jest spełniony to a=c i wróć do początku. Operacje wykonujemy dopoki nie znajdziemy miejsca zerowego funkcji spełniającego nasze oczekiwania.
implementacja w matlabie/octave
a=-5; % min przedzialu
b=5; % max przedzialu
f=@(x) x.^2; % przykladowa funkcja
delta=0.000001; % dokladnosc
if(f(a)*f(b)<0)
while(1)
c=(a+b)/2;
fc=f(c);
if(abs(f(c))<=delta)
disp(strcat("mz w x=", num2str(c)));
else
if(f(a)*f(c)<0)
b=c;
else
a=c;
end
end
end
else
disp("brak mz");
end