我试图找到函数的局部极小值和极大值,但我很挣扎。我们可以看到它应该有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);
您的代码看起来非常适合查找最小值。当我运行它时,我发现[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]
。