Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Matlab Ошибки в имитационной модели марковских процессов http://www.cyberforum.ru/matlab/thread2392350.html
Здравствуйте уважаемые форумчане. Есть код, который расчитывает имитационную модель марковских процессов. При выполнении кода, если увеличивать интервал исследования, то значения имитационной модели...
Решение системы ДУ 1-го порядка методом Эйлера Matlab
Добрый день! Я написал программу для решения задачи Коши для ДУ 1-го порядка, график выводится красиво (незначительно отклоняется от МатКада), но в таблице с ответами выводятся координаты У лишь...
Вычисление матрицы Якоби Matlab
Здравствуйте! Пытаюсь написать программу для решения системы нелинейных уравнений методом Ньютона. Просмотрела много примеров, которые смогла найти. Проблема в нахождении матрицы Якоби. Во всех...
Matlab Deep Learning Toolbox СНС для набора MNIST не обучается Здравствуйте. Пытаюсь создать СНС (сверточную нейронную сеть) для распознавания цифр из набора MNIST. Для обучения СНС использую датасет из 60000 картинок размером 28*28 пикселей. Количество карт... http://www.cyberforum.ru/matlab/thread2391523.html
Matlab Как найти путь к точке и кружиться вокруг неё? http://www.cyberforum.ru/matlab/thread2391342.html
Приветствую! суть задачи примерно такова, есть некая точка А(х,у) и есть некая цель В(х1,у1). Нужно проложить маршрут от точки А к точке В и описать круг точкой А с неким радиусом R. препятствий...
Matlab Преобразование изображения
Добрый день. Такой вопрос: как изменить пиксели в бинарном изображении на буквы P и N (черній цвет - P, белый - N)? И вывести изображение, что получилось, как картинку из букв P и N. Спасибо
Matlab Обучение нейронной сети
Задается генератор случайных чисел, туда подается 100 cos, 100 sin, затем идет обучение нейронной. После обучения, мы должны написать любую функцию и она должна определить, что это за функция. Прошу...
Matlab Моделирование случайных процессов Нужно смоделировать случайный процес в Matlab. По заданой блок-схеме!!! Входные данные: р=0.8, N=1000. http://www.cyberforum.ru/matlab/thread2390633.html
Matlab Решить с помощью выделения элементов http://www.cyberforum.ru/matlab/thread2390167.html
народ помогите пожалуйста решить с помощью выделения элементов
Matlab Решить три задачи В первом задании элементы стоящие в матрице под цифрой один на элементы стоящей матрицы по цифрой два. Во втором задании найти минимальный элемент матрицы. В третьем поменять местами блоки... http://www.cyberforum.ru/matlab/thread2389998.html
Andrey2020
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 3
0

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода

22.01.2019, 13:01. Просмотров 462. Ответов 1
Метки (Все метки)

MATLAB только начал осваивать.

Попытался реализовать нахождение точки минимума методом Ньютона
для функции 2*X12 - X1*X2 + 3*X22 - X1 + 2*X2 (суть метода прикрепил).

Код получился громоздким и, наверняка, можно сделать как-то проще.
Буду рад любым замечаниям, комментариям и советам.
Посмотрите, пожалуйста:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
%Метод Ньютона
clear; clc; clf;
format;
 
[X1, X2] = meshgrid(-2.5 : .1: 2.5, -2.5 : .1 : 2.5); % Сетка для линий уровня
 
% Исходные данные
f = '(2*X1^2-X1*X2+3*X2^2-X1+2*X2)'; % задаём функцию
FX = 2*X1.^2 - X1.*X2 + 3*X2.^2 - X1 + 2*X2; % функция для линий уровня
XK = [2, 1]; % Задаём X0
 
% Находим производные
dfX1 = char(diff(str2sym(f), ('X1'))); % частная производная по X1
dfX2 = char(diff(str2sym(f), ('X2'))); % частная производная по X2
d2fX1 = char(diff(str2sym(f), ('X1'), 2)); % вторая производная по X1
d2fX1X2 = char(diff(str2sym(dfX1), ('X2'))); % вторая производная по X1,X2
d2fX2 = char(diff(str2sym(f), ('X2'), 2)); % вторая производная по X2
F = inline(f); % преобразование
FX1 = inline(dfX1);
FX2 = inline(dfX2);
F2X1 = inline(d2fX1);
F2X12 = inline(d2fX1X2);
F2X2 = inline(d2fX2);
 
% Подготавливаем данные для запуска цикла приближений
x1 = {0, XK(1)}; % Формируем массив X1 координат, заносим Х0
x2 = {0, XK(2)}; % Формируем массив X2 координат, заносим Х0
ZK = F((XK(1)),(XK(2))); %Находим значение функции с текущим XK
ZK1 = ZK + 1; % Искусственно завышаем начальное значение функции для запуска цикла
E = 0.001; % задаем точность
N = 0; % Инициализация счетчика
HX = [F2X1(0) F2X12(0); F2X12(0) F2X2(0)]; % матрица Гессе (Нули, т.к. нет переменных)
IH = inv(HX); % Обратная матрица
 
% Запускаем цикл приближений
while abs(ZK1 - ZK) > E
    gradfXK = [FX1(XK(1),XK(2)); FX2(XK(1),XK(2))]; % формируем градиент
    ZK = F((XK(1)),(XK(2))); %Находим значение функции с текущим XK
    XK1 = XK; % Заносим предыдущее значение Х (Х0 на первой итерации)
    XK = XK1 - IH*gradfXK; % Находим X*
    ZK1 = F((XK(1)),(XK(2))); % Находим значение функции с найденной точкой
    if ZK1 < ZK, XK1 = XK; end % Проверяем, меньше ли значение функции
    if ZK1 ~= ZK, N = N + 1; end % Если приближение свершилось, увеличиваем счетчик
    if ZK1 == ZK continue;end % Если нет, то координаты точки в массив не добавляем
    x1(end+1,:) = {N, XK(1)}; % добавляем в массив координаты
    x2(end+1,:) = {N, XK(2)}; % найденной на данной итерации точки
end
 
% Вывод результатов
A = ['X* ='];
disp(A);
K = [XK(1); XK(2)];
disp(K)
M = ['Значение найдено на ',num2str(N),'-ой итерации.'];
disp(M)
 
% Линии уровня
x1 = cell2mat(x1(:,2)); % Извдекаем координаты
x2 = cell2mat(x2(:,2)); % точек из массивов
[CMatr, h] = contour(X1,X2,FX, 10);
clabel(CMatr, h);
grid on;
hold on;
plot(x1,x2,'r-o');
 
% Подписываем точки
X = 'X%d';
for i=1:length(x1) % цикл от 1 до конца вектора координат
    n = i-1; % Начинаем с X0
    Name = sprintf(X,n); 
    text(x1(i)+0.05,x2(i)+0.05,Name,'Color','red'); % надпись точки
end % конец цикла for


Вернуться к обсуждению:
Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
0
Миниатюры
Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2019, 13:01
Готовые ответы и решения:

Оптимизация кода
Доброго времени суток. Получен рабочий код, но работающий очень медленно (пока что рекорд 56 часов...

Оптимизация кода
Здравствуйте! Написал программку, помогите, пожалуйста оптимизировать код: Задание: Считайте...

Дискретный метод Ньютона для поиска минимума(перевод программного кода из Java в MATLAB)
Всем привет. Попытался сделать при помощи двух M-file`ов с функциями и скрипта с циклами, но...

Оптимизация кода (импорт из маткада)
Добрый день, есть необходимость перенести программу из маткада (см. вложение) в матлаб, с...

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

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