#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] для максимумов и минимумов.