在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);

您的代码看起来非常适合查找最小值。当我运行它时,我发现[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]

相关内容

  • 没有找到相关文章

最新更新