Poszukiwanie minimum w kierunku Metoda złotego podziału
Transkrypt
Poszukiwanie minimum w kierunku Metoda złotego podziału
Poszukiwanie minimum w kierunku Metoda złotego podziału Wojciech Rafajłowicz Od starożytności greckiej rozważano podział odcinka tak aby √ 5−1 a+b = ab = α = a 2 a (1) b Podział ten występuje w naturze, uważa się go też za źródło piękna w naturze. My zajmiemy się algorytmem optymalizacji, który wykorzystuje ten podział. Rozważmy funkcję f (x) na odcinku [a, b]. Można udowodnić, że dla sprawdzenia gdzie znajduje się ekstremum potrzebna jest znajomość wartości funkcji w dwóch dodatkowych punktach a < x1 < x2 < b. Wybierzmy te punkty tak, aby b − x1 x2 − a = =α x1 − a = b − x1 , (2) b−a b−a czyli punkty a, x1 , x2 , b oraz x1 , x2 , b mają spełniać złoty podział. Po tych obserwacjach oczywistym jest, że uzyskany algorytm będzie miał charakter iteracyjny. Oznacza to, zę w czasie działania generuje kolejne liczby – chcemy, ay zbiegały się do rozwiązania. Musimy więc opracować reguły wyboru odcinka, w którym znajduje się minimum. Jeśli f (x2 ) > f (x1 ) to bk+1 = x2 , ak+1 = axk+1 = x1 , x1k+1 = αb + 2 (1 − α)a), w przeciwnym wypadku ak+1 = x)1, xk+1 = x2 , bk+1 = bk , xk+1 = 1 2 αa + (1 − α)b. Aby zaproponowana metoda stała się algorytm konieczne jest co najmniej jedno kryterium stopu. Są różne możliwości 1. wykonanie określonej liczby kroków np. 3 + 5 log b−a ∆ 1 2. zmiana |∆τ = b − a| < W opracowaniu potrzebne będą pewne elementy języka Matlab Definiowanie funkcji Funkcje definiujemy jako odzielne m-pliki funkcyjne o nazwie pliku takiej jak funkcja function [g,y,z]=f(x1,...) Przekazywanie funkcj jako parametru Przy wywołaniu f(@g,...), można stworzyć tzw. czystą funkcję bez nazyw f(@(x) x+5) Zadanie: Napisać możliwie najlepszą metodę złotego podziału, uniwersalną tzn. można wywoływać z dowolną funkcję. Przetestować gdzie działa a gdzie nie działa tzn. dla jakich typów problemów. 2