Форум программистов, компьютерный форум, киберфорум
Наши страницы

Методы оптимизации

Войти
Регистрация
Восстановить пароль
 
алена25
0 / 0 / 0
Регистрация: 16.01.2013
Сообщений: 58
#1

Градиентный метод с дроблением шага - Методы оптимизации

06.12.2013, 20:46. Просмотров 1190. Ответов 1
Метки нет (Все метки)

Подскажите пожалуйста какая тут ошибка (может расчеты выполняются в неправильных местах), программа ничего не выводит
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  double F(double x1, double x2)
        {
            return Math.Pow(x1, 3) + Math.Pow(x2, 2) - 2 * x1 * x2 - 3 * x1 + 2 * x2;//заданная функция
        }
        double Pr1(double x1, double x2)//1-я производная по х1
        {
            return 3 * Math.Pow(x1, 2) - 2 * x2 - 3;
        }
        double Pr2(double x1, double x2)//1-я производная по х2
        {
            return 2 * x2 - 2 * x1 + 2;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 double x1 = -0.5, x2 = 0.5, eps = 0.001, alpha = 0.5;//alpha - шаг
            double dx1= Pr1(x1, x2);//вычисляем 1-ю производную по х1
            double dx2 = Pr2(x1, x2);//вычисляем 1-ю производную по х2
            double Y1 = F(x1, x2);//ф-я от старых х1 и х2         
            x1 = x1 - alpha * dx1;//новое х1 
            x2 = x2 - alpha * dx2;//новое х2
                       int k = 0, l=0;
            double Y2 = F(x1, x2);//ф-я от новых х1 и х2
            while ((Math.Abs(Pr1(x1, x2)) >= eps)&& (Math.Abs(Pr2(x1, x2)) > eps))
           {
                do
                {
                 dx1 = Pr1(x1, x2);
                 dx2 = Pr2(x1, x2);
                    l++;
                  Y1 = F(x1, x2);
                    x1 = x1 - alpha * dx1;
                    x2 = x2 - alpha * dx2;
                    Y2 = F(x1, x2);
                    dx1 = Pr1(x1, x2);
                    dx2 = Pr2(x1, x2);
                    if (Y1 >= Y2)
                    {
                        richTextBox1.Text += "Fx(" + k + "))>Fx(" + (k - 1) + ")) => дробление (" + k + "): " + alpha;
                        alpha = alpha / 2;
                    }
                } while (Y1 >= Y2); 
                k++;
                richTextBox1.Text += "\nИтерация"+k+"   x1=" + x1
              + "    x2=" + x2 +"  dx1="+ dx1+"  dx2="+dx2+"   F(x1,x2)=" + F(x1, x2);
            }
            richTextBox1.Text += "\nРешение: x*=" + x1
            + "    x2*=" + x2 + "   F(x1*,x2*)=" + F(x1, x2);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Градиентный метод с дроблением шага (Методы оптимизации):

Наискорейший градиентный спуск с вычислением величины шага методом Дихотомии - Методы оптимизации
Добрый вечер! Пишу программу для нахождения локального минимума функции методом наискорейшего градиентного спуска. Не могу сообразить...

Градиентный численный метод - Методы оптимизации
Добрый день. В задании сказано: найти первое приближение градиентного числового метода,если: f=2x1+4x2-x1^2-x2^2 , x0(4;4) Подскажите,...

Градиентный метод безусловной оптимизации нескольких переменных - Методы оптимизации
Задали курсовую работу на написание программного средства на эту тему. Не могу разобраться, как этот метод работает? Если не сложно,...

Градиентный метод с дроблением шага - программа зацикливается - Pascal
Написал программу на метод с дроблением шага,но программа не работает (зацикливается) найти причину никак не получается. Помогите кто...

Минимизация функции методом градиентного спуска с дроблением шага. Ошибка! - Matlab
Уважаемые товарищи! Не могу справиться с задачей( Минимизация функции методом градиентного спуска с дроблением шага. Программа указывает на...

Обобщенный градиентный метод - Численные методы
скиньте пожалуйста полноценный пример или понятную теорию, не могу нагуглить у меня функция двух переменных. нашел алгоритм: 1.найти...

1
Hoottie_McGOOB
107 / 105 / 5
Регистрация: 04.10.2013
Сообщений: 231
22.12.2013, 10:19 #2
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
        double F(double x1, double x2)
        {
            return Math.Pow(x1, 3) + Math.Pow(x2, 2) - 2 * x1 * x2 - 3 * x1 + 2 * x2;//заданная функция
        }
        double Pr1(double x1, double x2)//1-я производная по х1
        {
            return 3 * Math.Pow(x1, 2) - 2 * x2 - 3;
        }
        double Pr2(double x1, double x2)//1-я производная по х2
        {
            return 2 * x2 - 2 * x1 + 2;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            double x1_prev, x2_prev;
            double x1 = -0.5, x2 = 0.5, eps = 0.001, alpha = 0.5;//alpha - шаг
            double dx1;
            double dx2;
            double Y1, Y2;
            int max_iter = 100;
 
            int k = 0, l = 0;
 
            do
            {
                x1_prev = x1;
                x2_prev = x2;
 
                dx1 = Pr1(x1, x2);//вычисляем 1-ю производную по х1
                dx2 = Pr2(x1, x2);//вычисляем 1-ю производную по х2    
 
                x1 = x1 - alpha * dx1;//новое х1 
                x2 = x2 - alpha * dx2;//новое х2
 
                Y1 = F(x1_prev, x2_prev);
                Y2 = F(x1, x2);
 
                k++;
                alpha = alpha / 2;
 
                richTextBox1.Text += "\nИтерация " + k + "   x1 = " + x1 + "    x2 = " + x2 + "  dx1 = " + dx1 + "  dx2 = " + dx2 + "   F(x1,x2) = " + F(x1, x2);
 
                if (k > max_iter) break;
 
            } while ((Math.Abs(x1 - x1_prev) >= eps) && (Math.Abs(x2 - x2_prev) > eps));
 
 
 
            richTextBox1.Text += "\nРешение: x* = " + x1 + "    x2* = " + x2 + "   F(x1*,x2*) = " + F(x1, x2);
        }
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2013, 10:19
Привет! Вот еще темы с ответами:

Градиентный метод найскорейшего спуска. - Matlab
Градиентный метод найскорейшего спуска. Функция и данные теже: clear all; clc; % Значения коэффициентов b0 = 0.8; b1 = 1.3; ...

Градиентный метод с постоянным шагом - Matlab
Градиентый метод с постоянным шагом, функция: f(x,y) = c0 + c1*x + c2*y + c12*x*y + c11*x2 + c22*y2; clear all; clc; %...

градиентный метод Visual Studio 2010 - Visual C++
Градиентный метод... Есть функция public double U(double L, double C) { return (E * R) /...

Градиентный метод с ограничениями в виде равенств функции двух переменных в Matlab - Matlab
Поставлена задача: реализовать в Matlab поиск минимума целевой функции вида: f(x,y)=c1*x^n+c2*y^m, где с1, с2 - константы, n,m -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru