2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Градиентный метод минимизации.
Сообщение05.05.2014, 17:45 


18/04/14
157
sbp
Нужно написать программу на с++, которая с помощью градиентного метода минимизирует функцию Розенброка. $$ 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 
Заслуженный участник


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group