Поиск минимумов и максимумов функции в MATLAB

#matlab #graph

#matlab #График

Вопрос:

Я пытаюсь найти локальные минимумы и максимумы функции, и я изо всех сил. Мы видим, что у него должно быть 1 минимум и 4 максимума, но я делаю что-то неправильно и не знаю, как продолжить.

Спасибо за помощь!

  %1
figure;
[x,y] = meshgrid(-3:0.01 : 3 );
z=x.*sin(x) y.*sin(y);
mesh(x,y,z);
xlabel("x");
ylabel("y");
zlabel("z");
title(" Graph  f(x,y) = x*sin(x) y*sin(y)");

%2 trying to find minima and maxima of funtion
fun=@(x)x(1).*sin(x(1)) x(2).*sin(x(2));

x0 = [-1,-1];
[x,fval,exitflag,output]=fminsearch(fun,x0);
%locmax=findpeaks(z);

%mask = imregionalmax(z);
 

Ответ №1:

Ваш код выглядит довольно хорошо для поиска минимумов. Когда я запускаю его, я нахожу минимумы вблизи [0, 0] (с точностью ~1e-4 до). Для нахождения максимумов вы, вероятно, захотите инвертировать свою функцию

 x0 = [-1, -1];
fun=@(x) -x(1).*sin(x(1))-x(2).*sin(x(2));
[x,fval,exitflag,output]=fminsearch(fun,x0)
 

С помощью этой модифицированной функции и начального условия я нахожу максимумы в [-2, -2] :

 x =

   -2.0287   -2.0288


fval =

   -3.6394


exitflag =

     1
 

Для fminsearch вам нужно будет предоставить несколько начальных предположений, если вы хотите найти все свои локальные минимумы и максимумы. Попробуйте [1, 1], [1, -1], [-1, 1], [-1, -1] .

Комментарии:

1. «… Попробуйте [1, 1], [1, -1], [-1, 1], [-1, -1] » зачем мне нужны все эти комбинации? Я имею в виду, что если я построю график, я увижу, что он имеет 1 локальный минимум и 4 локальных максимума. Обязательно ли быть точным? В любом случае спасибо за помощь.

2. @BlackSwan_22: fminsearch находит один локальный минимум за раз, и какой из них он находит, зависит от инициализации. Вы можете использовать выходные findpeaks(z) данные, чтобы найти хорошие стартовые точки.

3. @CrisLuengo да, я понимаю.. Я сделал это для всех комбинаций [1, 1], [1, -1], [-1, 1], [-1, -1] для максимумов и минимумов.