2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Градиентный метод минимизации.
Сообщение05.05.2014, 17:45 
Нужно написать программу на с++, которая с помощью градиентного метода минимизирует функцию Розенброка. $$ f(X) = 100(x_2 - x_1^2)^2+5(1 - x_1)^2 $$
Эта функция имеет точку минимума $(x_1,x_2) = (1,1)$ и $f(1,1) = 0$

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
 
void task2(double (*fun)(double,double)){
        double eps = 1e-6;
       
        vector<double> vec;
        vec.push_back(-100);
        vec.push_back(10);
        Point X_1(2,vec);
        Point X_2(X_1);
        double norm1;
       
while(1)
{
        Point grd( Grad(fun, X_1) ); //<< endl;
        // найти такое l чтобы в нем функция fun была минимальна
        double l = 0.001;
       
        if ( norm(grd) < eps )
                break;
        X_2 = X_1 - l * grd;
        X_1 = X_2;

}
cout << X_1;


}


Градиент находит корректно, с точностью $1e-3$
Но не могу выбрать шаг $l$ так, чтобы метод сходился к точке (1,1).

Ясно что $ f(X^{n+1}) = f(X^n + \lambda \operatorname{grad} f(X^n))  = \varphi(\lambda) $ , и $\varphi(\lambda)$ это функция, которую нужно минимизировать

-- 05.05.2014, 21:04 --

И я так понял.. это какой-то тип овражной функции. поэтому могут быть проблемс

 
 
 
 Re: Градиентный метод минимизации.
Сообщение06.05.2014, 00:30 
Katmandu в сообщении #859486 писал(а):
...минимизирует функцию Розенброка...
не могу выбрать шаг так, чтобы метод сходился ...
... это какой-то тип овражной функции. поэтому могут быть проблемс
1. Не просто "будут проблемы". Эта функция, "банан Розенброка", специально придумана для отладки алгоритмов нелинейной оптимизации. Овраг здесь не простой, а "кривой" (потому и банан, а не огурец).
2. Для такой функции нельзя просто задать шаг. Задается начальный шаг, а алгоритм должен корректировать шаг автоматически.
3. Читайте книги по нелинейной оптимизации, нелинейному программированию. Смотрите известные реализации алгоритмов.

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group