#include <SecantDivision.h>
Diagram dziedziczenia dla SecantDivision
Metoda siecznych jest podobna do metod Bolzano i Newtona-Raphsona. Tak samo jak w metodzie Bolzano wykluczamy część przedziału i używamy do tego cely pochodnej, ale tym razem interesuje nas jej wartość. Każde kolejne przybliżenie punktu stacjonarnego wyliczamy ze wzoru:
Jak można zauważyć drugi czynnik iloczynu jest odwrotnością numerycznego przybliżenia drugiej pochodnej funkcji celu, a więc wzór w zasadzie przybliża metodę Newtona-Rowsona.
Algorytm metody:
Oznaczenia:
- lewy kraniec przedziału poszukiwań w danej iteracji
- prawy kraniec przedziału poszukiwań w danej iteracji
- bieżące przybliżenie punktu stacjonarnego
Dane potrzebne do obliczeń:
- minimalizowana funkcja jednej zmiennej
- lewy kraniec początkowego przedziału poszukiwań
- prawy kraniec początkowego przedziału poszukiwań
- wymagana dokładność rozwiązania
Krok 1:
Obliczyć i
.
Krok 2:
Jeśli , a
, zakończyć działanie algorytmu stwierdzając, że punkt stacjonarny nie znajduje się w przedziale początkowym.
Krok 3:
Obliczyć:
Obliczyć pochodną w punkcie
Krok 4a:
Jeśli , to podstawić
i przejść do kroku 5.
W przeciwnym wypadku przejść do kroku 4b.
Krok 4b:
Jeśli , to podstawić
.
Przejść do kroku 5.
Krok 5:
Jeśli , przejść do kroku 3.
W przeciwnym wypadku zakończyć algorytm. Wynikiem jest ostatni punkt .
Algorytm zaimplementowano na podstawie:
Ostanin. A: Metody i algorytmy optymalizacji, Wydawnictwo Politechniki Białostockiej, Białystok, 2003
Metody publiczne | |
~SecantDivision (void) | |
Destruktor. | |
virtual std::auto_ptr< Method > | Clone () const |
Tworzy kopię metody. | |
virtual const wxString & | Name () const |
Zwraca nazwę metody. | |
virtual MethodIdType | Id () const |
Zwraca ID metody. | |
virtual bool | CanHandle (const ProblemBase *pProblem) const |
Sprawdza, czy dany problem może być rozwiązany tą metodą. | |
virtual bool | CanAssist (const ProblemBase *pProblem) const |
Sprawdza, czy metoda może wspomóc rozwiązanie danego zadania. | |
Statyczne metody publiczne | |
static MethodIdType | ClassId () |
Zwraca ID metody. | |
Metody chronione | |
SecantDivision (void) | |
Konstruktor domyślny. | |
SecantDivision (const SecantDivision &from) | |
Konstruktor kopiujący. | |
virtual wxString & | rName () |
Przyjaciele | |
class | SectionLineSearchPanel< SecantDivision > |
|
Konstruktor kopiujący.
|
|
Sprawdza, czy metoda może wspomóc rozwiązanie danego zadania. Dokładniej rzecz biorąc sprawdzane jest, czy metoda może być wykorzystana przez metodę optymalizacji wielu zmiennych do optymalizacji w kierunku przy rozwiązywaniu danego zadania optymalizacji. Reimplementowana z SectionLineSearch. |