在MATLAB中求函数的极小值和极大值
我正在努力寻找函数的局部极小值和极大值,我正在努力。我们可以看到它应该有1个最小值和4个最大值,但我做错了什么,我不知道如何继续 谢谢你的帮助在MATLAB中求函数的极小值和极大值,matlab,graph,Matlab,Graph,我正在努力寻找函数的局部极小值和极大值,我正在努力。我们可以看到它应该有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) =
%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],“…试试[1,1],[1,-1],-1,1],-1,-1]”为什么我需要这些组合?我的意思是,如果我画一个图,我看到它有1个局部极小值和4个局部极大值。有必要精确吗?无论如何,感谢您的帮助。@BlackSwan_22:fminsearch
会同时找到一个本地最小值,找到哪一个取决于初始化。您可以使用findpeaks(z)
的输出来找到良好的起点。@CrisLuengo是的,我理解。。我对最大值和最小值的所有组合[1,1],[1,-1],-1,1],-1,-1]进行了测试。