#include <NewtonModified.h>
Diagram dziedziczenia dla NewtonModified
Przy wykorzystaniu do minimalizacji funkcji niekwadratowych metoda Newtona nie jest niezawodna. Gdy punkt startowy znajduje się daleko od minimum, krok metody może okazać się zbyt duży, co z kolei może doprowadzić do niezbieżności metody. Najprostszą modyfikacją metody Newtona jest wprowadzenie etapu poszukiwania optymalnej długości kroku w kierunku , podobnie jak w metodzie Cauchy'ego (największego spadku). Zapewnia to zmniejszanie się wartości funkcji w punkcie roboczym z kroku na krok.
Algorytm metody:
Oznaczenia:
- numer aktualnej iteracji
- gradient w punkcie
- macierz hesjanu w punkcie
- współczynnik długości kroku
Dane potrzebne do obliczeń:
- minimalizowana funkcja celu
- punkt startowy
- wymagana dokładność
warunek stopu - do wyboru:
Jeśli tak to STOP: Hesjan jest macierzą osobliwą.
W przeciwnym wypadku przejdź do kroku 3.
Krok 3:
Wyznacz kierunek poszukiwań :
Wykonaj krok w kierunku o optymalnej długości :
Podstaw i przejdź do kroku 1.
Uwagi:
W stosunku do wersji algorytmu zamieszczonej w [1] zmieniono kolejność wykonywania kroków. W zaimplementowanej wersji sprawdzanie warunku stopu dokonuje się na początku każdej iteracji. Dzięki temu algorytm może zatrzymać się nie wykonując żadnej iteracji w przypadku gdy punkt startowy znajduje sie w minimum i wykorzystywany jest "gradientowy" warunek stopu. Początkowe wartości zmiennych oznaczających rożnice położenia dwóch ostatnich punktów oraz różnice wartości funkcji w tych dwóch punktach są równe DBL_MAX, więc w przypadku wykorzystaniu innego warunku stopu niż "gradientowy" modyfikacja nie będzie miała żadnego wpływu na działanie algorytmu.
Algorytm zaimplementowano na podstawie:
Ostanin. A: Metody i algorytmy optymalizacji, Wydawnictwo Politechniki Białostockiej, Białystok, 2003