2014 dxdy logo

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

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




 
 Численный поиск минимумов функции
Сообщение05.01.2019, 21:02 
Хочу найти численно с помощью 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 
Я не специалист, но, как я понимаю, гарантированно найти все локальные минимумы даже в одномерном случае, на отрезке, это совсем не просто. Для этого желательно, например, чтобы она была дважды дифференцируема, причем вторая производная была липшицева. Да и в этом случае не всегда возможно.

 
 
 
 Re: Численный поиск минимумов функции
Сообщение05.01.2019, 22:10 
Популярный подход - выбрать случайно какое-то колличество начальных точек, 10 или 100 точек, например, и посмотреть куда алгоритм приведет.

 
 
 
 Re: Численный поиск минимумов функции
Сообщение06.01.2019, 11:14 
Как видно из графика, рассматриваемая функция имеет 8 локальных минимумов (два внутри квадрата и шесть на его границе), четыре из них являются глобальными.

 
 
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 17:57 
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 
Аватара пользователя
Повезло Матлабу! А если бы вы ему задали
    Код:
    f=@(xx,yy) abs(xx.*(xx-1)+(yy-2).*(yy-3));
?

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

 
 
 
 Re: Численный поиск минимумов функции
Сообщение07.01.2019, 19:19 
Мощным глобальным оптимайзером является мэйпловский 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