2014 dxdy logo

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

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


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Численный поиск минимумов функции
Сообщение05.01.2019, 21:02 


18/07/18
8
Хочу найти численно с помощью Matlab 2014 все минимумы следующей функции
f=@(xx,yy) abs(xx.*(xx-1))+abs((yy-2).*(yy-3));
Поиск провожу в области 0$\leqslant$x$\leqslant$4, 0$\leqslant$y$\leqslant$4. Для чего задаю массивы условий
A=[1.0 0.0;-1.0 0.0;0.0 1.0;-1.0 0.0];b=[4.0;0.0;4.0;0.0];
И начальную точку поиска x0 = [2.0;2.0];
Далее ищем минимум
[resx,fval] = fmincon(f,x0,A,b);
И получаем
Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the default value of the step size tolerance and constraints are
satisfied to within the default value of the constraint tolerance.

<stopping criteria details>
resx равен [1.00;2.00], т.е. один из четырех искомых минимумов (0,2), (0,3), (1,2), (1,3) найден. Но хотелось бы иметь какой-то метод оптимизации, чтобы гарантированно находить все минимумы, т.е. фактически все решения некоторой системы двух нелинейных уравнений двух переменных в заданной ограниченной области. Что можно предпринять?

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение05.01.2019, 21:57 
Заслуженный участник


18/01/15
3225
Я не специалист, но, как я понимаю, гарантированно найти все локальные минимумы даже в одномерном случае, на отрезке, это совсем не просто. Для этого желательно, например, чтобы она была дважды дифференцируема, причем вторая производная была липшицева. Да и в этом случае не всегда возможно.

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение05.01.2019, 22:10 
Заслуженный участник


05/08/14
1564
Популярный подход - выбрать случайно какое-то колличество начальных точек, 10 или 100 точек, например, и посмотреть куда алгоритм приведет.

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение06.01.2019, 11:14 


11/07/16
825
Как видно из графика, рассматриваемая функция имеет 8 локальных минимумов (два внутри квадрата и шесть на его границе), четыре из них являются глобальными.

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 17:57 


18/07/18
8
Markiyan Hirnyk
Я имел ввиду все нули данной функции, т.е. ее глобальные минимумы. Поскольку такая задача эквивалентна решению системы из нелинейных уравнений. Эта функция взята только для примера, реально там входят спецфункции и т.д. и это нужно рассчитывать при изменении параметров (частоты), т.е. искать с помощью графика не вариант. Поэтому буду разбивать рассматриваемую область на сетку из начальных приближений (но не случайных, зачем случайных?) и для каждого из них находить решение. А дальше исключать повторяющиеся.
Массив A не совсем правильно написал, нужно исправить A=[1.0 0.0;-1.0 0.0;0.0 1.0;0.0 -1.0].

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 18:04 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Повезло Матлабу! А если бы вы ему задали
    Код:
    f=@(xx,yy) abs(xx.*(xx-1)+(yy-2).*(yy-3));
?

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 18:35 


18/07/18
8
Тогда все решения должны лечь на некоторую кривую, т.е. их бесконечно много, а Matlab найдет лишь некоторые.
Вообще лучше для моих целей лучше использовать функцию fzero, правда там нет задания области поиска решения.

 Профиль  
                  
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 19:19 


11/07/16
825
Мощным глобальным оптимайзером является мэйпловский DirectSearch, который находит все четыре глобальные минимумы рассматриваемой задачи
посредством команды
Код:
DirectSearch:-GlobalSearch(abs(xx*(xx-1))+abs((yy-2)*(yy-3)), {xx = 0 .. 6, yy = 0 .. 6});
Matrix(4, 3, [[0.1371587352e-8, [xx = 0.7783796467e-9, yy = 3.0000000005932077], 85], [0.1809369992e-8, [xx = 0.5290288273e-9, yy = 2.000000001280341], 99], [0.1601596324e-7, [xx = .9999999857545869, yy = 3.0000000017705504], 140], [0.2458564528e-7, [xx = 1.0000000118683114, yy = 2.000000012717334], 132]])

Он работает с недифференцируемыми функциями.

Должен уточнить мой предыдущий комментарий: график показывает четыре глобальные минимумы и один локальный максимум.

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

Модераторы: Модераторы Математики, Супермодераторы



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

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


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

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