Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
droi
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 4
1

Оптимизация методом покоординатного спуска

15.12.2014, 12:25. Просмотров 1303. Ответов 3
Метки нет (Все метки)

Matlab M
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
52
53
clear all; clc;
format long;
 
g = 0.5; % постоянная шага
d = 0.01; % дельта
% Начальная точка
x1 = 0; 
x2 = 0; 
k = 1;  % Счетчик шагов
kmax = 1000; % Предельное число шагов, 
% задается для предотвращения зацикливания
% Массивы для хранения промежуточных координат
x1trace = [x1]; 
x2trace = [x2]; 
i = 2; 
while k < kmax 
% Спуск по первой координате
gr1 = 6*x1 - 2*x2 + 1;  % производная по х1
x1 = x1 + g*gr1;
% Сохранение координат
x1trace(i) = x1; 
x2trace(i) = x2; 
i = i + 1; 
% Спуск по второй координате
gr2 = 8*x2 - 2*x1 - 1;           % производная по х2
x2 = x2 + g*gr2;
% Сохранение координат
x1trace(i) = x1
x2trace(i) = x2 
i = i + 1; 
% Проверка условия останова
if sqrt(gr1^2 + gr2^2) <= d; 
break; % Выход из цикла в случае выполнения условия
end
k = k + 1; 
end
% Построение графика
x = -100:0.1:100; 
y = -100:0.1:100; 
[X, Y] = meshgrid(x, y); 
Z=3*X.^2-2*X.*Y+4.*Y.^2+X-Y;        % исходная функция
[C, h] = contour(X, Y, Z); 
clabel(C, h); 
hold on;
plot(x1trace, x2trace, '-'); 
% Вывод начальной точки на график
text(x1trace(1) + 0.2, x2trace(1) + 0.5, 'M0'); 
% Вывод решения на график
text(x1 + 2, x2, ...
strvcat(['x1 = ' (num2str(x1))], ...
        ['x2 = ' (num2str(x2))], ...
        ['k = '  (num2str(k))])); 
hold off;
Проблема в том, что программа упирается в ограничитель итераций. Даже если поставить ограничение 10000. Производную функции я искал через diff и потом проверил, в этом ошибки быть не должно. Код программы я брал готовый, просто заменил функцию и ее производные на свои. Со старо функцией программе хватало 50 итераций.

С начальными условиями, точностью и шагом экспериментировал. Результат тот же.

Исходная функция:
0
Миниатюры
Оптимизация методом покоординатного спуска  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2014, 12:25
Ответы с готовыми решениями:

Оптимизация методом покоординатного спуска
код программы есть. осталось найти минимизируемую функцию. Бункер для хранения зерна, для его...

Оптимизация методом покоординатного спуска (Гаусса-Зейделя)
Есть рабочий вариант: clear all; clc; % Значения коэффициентов c1 = -2; c2 = -1; c12 = 1; ...

Оптимизации методом покоординатного спуска
Есть код: clear all; clc; g = 0.05; % постоянная шага d = 0.01; % дельта % Начальная точка x1...

Минимизация функции методом покоординатного спуска
Приветствую всех, кто зашел в эту тему. Друзья, прошу помочь разобраться с реализацией метода...

Метод покоординатного спуска
Друзья, имеется матлабовский файл, в котором реализован прогноз на базе нечетких лингвистических...

3
Зосима
4963 / 3335 / 313
Регистрация: 02.04.2012
Сообщений: 6,220
Записей в блоге: 16
Завершенные тесты: 1
19.12.2014, 11:10 2
ошибка в строках 19 и 26: вместо "+" должно стоять "-". В исходной программе находился максимум!
0
vezhelek
5 / 5 / 0
Регистрация: 23.05.2011
Сообщений: 122
07.05.2015, 13:53 3
у меня похожее задание(нужно найти максимум глобальной функции)
но вот в условии говорится, что для поиска минимума одной переменной использовать метод золотого сечения
как это понимать и применять??
Оптимизация методом покоординатного спуска
0
vezhelek
5 / 5 / 0
Регистрация: 23.05.2011
Сообщений: 122
07.05.2015, 14:27 4
Matlab M
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
g = 0.2; % постоянная шага
d = 0.01; % дельта
% Начальная точка
x1 = 1;
x2 = 2;
k = 1; % Счетчик шагов
kmax = 100; % Предельное число шагов,
% задается для предотвращения зацикливания
% Массивы для хранения промежуточных координат
x1trace = [x1];
x2trace = [x2];
i = 2;
while k < kmax
% Спуск по первой координате
gr1 = -24*x1.^2 + 6*x2;
x1 = x1 + g*gr1;
% Сохранение координат
x1trace(i) = x1;
x2trace(i) = x2;
i = i + 1;
% Спуск по второй координате
gr2 = 3*x2.^2 + 6*x1;
x2 = x2 + g*gr2;
% Сохранение координат
x1trace(i) = x1;
x2trace(i) = x2;
i = i + 1;
% Проверка условия останова
if sqrt(gr1^2 + gr2^2) <= d;
break; % Выход из цикла в случае выполнения условия
end
k = k + 1;
end
% Построение графика
x = -20:0.1:20;
y = -20:0.1:20;
[X, Y] = meshgrid(x, y);
Z = -8*X.^3 + Y.^3 + 6*X.*Y-3;
[C, h] = contour(X, Y, Z);
clabel(C, h);
% Отображение меток на линиях уровня
hold on;
plot(x1trace, x2trace, '-');
% Вывод начальной точки на график
text(x1trace(1) + 0.2, x2trace(1) + 0.5, 'M0');
% Вывод решения на график
text(x1 + 2, x2, ...
strvcat(['x1 = ' num2str(x1)], ...
['x2 = ' num2str(x2)], ...
['k = ' num2str(k)]));
вот я переделал решение под мое условие
что здесь не так?
0
07.05.2015, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 14:27

Метод покоординатного спуска
Помогите кто-нибудь реализовать метод покоординатного спуска на MATLAB вот некоторые материалы...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона...

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


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

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

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