MN02

Z Studia Informatyczne
Wersja z dnia 17:07, 28 sie 2006 autorstwa Przykry (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Algorytm {Metoda bisekcji}



xl = a; xr = b;
x = (a+b)/2;  e = (b-a)/2;
while (e > <math>\displaystyle \epsilon</math>) 
{
	if (f(x)*f(xl) < 0)	
		xr = x;
	else
		xl = x;
	x = (xl+xr)/2; e = e/2;
} 

Z konstrukcji metody łatwo wynika, że po wykonaniu k iteracji (czyli po obliczeniu k wartości funkcji) otrzymujemy x, które odległe jest od pewnego rozwiązania x* o co najwyżej

|xx*|(12)k(ba2).

Metoda bisekcji jest więc zbieżna liniowo z ilorazem 1/2. Choć ta zbieżność nie jest imponująca, bisekcja ma kilka istotnych zalet. Oprócz jej prostoty, należy podkreślić fakt, że bisekcja jest w pewnym sensie uniwersalna. Jeśli tylko dysponujemy dwoma punktami a i b takimi, że f przyjmuje w nich wartości przeciwnych znaków, to metoda bisekcji z pewnością znajdzie miejsce zerowe funkcji, choćby początkowa długość przedziału |ba| była bardzo duża: zbieżność metody bisekcji jest globalna. Co ważniejsze, dla zbieżności metody bisekcji wystarcza jedynie ciągłość funkcji. Poza tym możemy łatwo kontrolować błąd bezwzględny aproksymacji miejsca zerowego. Konsekwencją (Uzupelnic: blbis ) jest bowiem następujący wniosek.

Wniosek

Dla znalezienia zera x* z dokładnością ϵ>0, wystarczy obliczyć w metodzie bisekcji

k=k(ϵ)=log2(ba)ϵ1

wartości funkcji.

Zbieżność metody bisekcji dla ....

Dodajmy jeszcze, że bisekcja minimalizuje błąd najgorszy w klasie F zdefiniowanej Uzupełnij: na początku tej sekcji, wśród wszystkich algorytmów korzystających z określonej liczby obliczeń wartości funkcji, zob. Uzupełnij: uwaga na końcu wykładu.

Uwaga

Metoda bisekcji jest optymalna w następującym sensie. Niech A:FR będzie dowolną metodą (algorytmem) aproksymującą zero x*(f) funkcji f z klasy F zdefiniowanej w (Uzupelnic: dfkl ), korzystającą jedynie z obliczeń (informacji o) f w k punktach. Wtedy dla dowolnego γ>0 istnieje funkcja fγF mająca tylko jedno zero x*(fγ) w [a,b] i taka, że

|A(fγ)x*(fγ)|(12)k(ba2)+γ.

Co więcej, można pokazać, że fakt ten zachodzi też w węższej klasie F1 funkcji fF, które są dowolnie wiele razy różniczkowalne. Oczywiście, nie wyklucza to istnienia metod iteracyjnych (takich jak metoda Newtona), które dla fF1 są zbieżne szybciej niż liniowo.

Metoda iteracji prostej Banacha

Zupełnie inne, i jak się okaże --- przy odrobinie sprytu bardzo skuteczne --- podejście do wyznaczania miejsca zerowego jest oparte na metodzie Banacha.

Najpierw nasze równanie nieliniowe

f(x)=0

przekształcamy (dobierając odpowiednią funkcję ϕ) do równania równoważnego (tzn. mającego te same rozwiązania)

x=ϕ(x).

Następnie, startując z pewnego przybliżenia początkowego x0, konstruujemy ciąg kolejnych przybliżeń xk według wzoru

xk=ϕ(xk1),k1.

Twierdzenie Banacha, o zbieżności iteracji prostej

Niech D0 będzie domkniętym 

podzbiorem dziedziny D,

D0=D0D,

w którym ϕ jest odwzorowaniem zwężającym. To znaczy, ϕ(D0)D0, oraz istnieje stała 0L<1 taka, że

ϕ(x)ϕ(y)Lxy,x,yD0.

Wtedy równanie (Uzupelnic: rrw ) ma dokładnie jedno rozwiązanie x*, oraz

x*=limkxk,

dla dowolnego przybliżenia początkowego x0D0.

Dowód

Wobec

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \| x_k- x_{k-1}\| &= \|\phi( x_{k-1})-\phi( x_{k-2})\| \,\le\,L\,\| x_{k-1}- x_{k-2}\| \\ &\le &\cdots\;\le\;L^{k-1}\| x_1- x_0\|, \endaligned}

dla ks mamy

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \| x_k- x_s\| &\le & \sum_{j=s+1}^k\| x_j- x_{j-1}\| \,\le\,\sum_{j=s+1}^k L^{j-1}\| x_1- x_0\| \\ &= L^s(1+L+\cdots+L^{k-s-1})\| x_1- x_0\| \,\le\,\frac{L^s}{1-L}\| x_1- x_0\|. \endaligned}

Ciąg {xk}k jest więc ciągiem Cauchy'ego. Stąd istnieje granica α=limkxk, która należy do D0, wobec domkniętości tego zbioru. Ponieważ lipschitzowskość ϕ implikuje jej ciągłość, mamy też

ϕ(α)=ϕ(limkxk)=limkϕ(xk)=limkxk=α,

tzn. α jest punktem stałym odwzorowania ϕ. Dla jednoznaczności zauważmy, że jeśliby istniał drugi, różny od α, punkt stały β, to mielibyśmy

αβ=ϕ(α)ϕ(β)Lαβ.

Stąd 1<L, co jest sprzeczne z założeniem, że

ϕ jest zwężająca.