Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中求函数的极小值和极大值_Matlab_Graph - Fatal编程技术网

在MATLAB中求函数的极小值和极大值

在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个最小值和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],

“…试试[1,1],[1,-1],-1,1],-1,-1]”为什么我需要这些组合?我的意思是,如果我画一个图,我看到它有1个局部极小值和4个局部极大值。有必要精确吗?无论如何,感谢您的帮助。@BlackSwan_22:
fminsearch
会同时找到一个本地最小值,找到哪一个取决于初始化。您可以使用
findpeaks(z)
的输出来找到良好的起点。@CrisLuengo是的,我理解。。我对最大值和最小值的所有组合[1,1],[1,-1],-1,1],-1,-1]进行了测试。