如何使用fminsearch查找本地最大值?

时间:2016-06-17 07:36:17

标签: matlab fminsearch

我想使用fminsearch来查找函数的局部最大值。

是否可以使用fminsearch找到局部最大值,并“仅”搜索函数的负返回值。

例如:

function f = myfun(x,a)
f = x(1)^2 + a*x(2)^2;
a = 1.5;
x = fminsearch(@(x) -1 * myfun(x,a),[0,1]);

有可能吗?

Update1:​​为了详细阐述我的问题并使其更清晰(下面的一些评论) - 我正在添加此更新:

通过询问是否可以这样做,我的意思是正确使用fminsearch函数 - 它是否是使用fminsearch查找最大值的预期用途?

Update2:对于曾经关注同一问题的人 - 除了下面的正确答案外,还有来自https://www.mathworks.com/help/matlab/math/optimizing-nonlinear-functions.html#bsgpq6p-10的文档

  

最大化功能   fminbnd和fminsearch求解器尝试最小化目标函数。如果你有一个最大化问题,那就是形式问题

     

max x f(x),然后定义g(x)= -f(x),并最小化g。

     

例如,要查找x = 5附近的tan(cos(x))的最大值,请计算:

     

[x fval] = fminbnd(@(x)-tan(cos(x)),3,8)

     

x = 6.2832

     

fval = -1.5574

     

最高为1.5574(报告的负数)   fval),发生在x = 6.2832。这个答案是正确的,因为,到五   数字,最大值为tan(1)= 1.5574,发生在x =2π=   6.2832

1 个答案:

答案 0 :(得分:3)

是的,你可以,这也是没有fmaxsearch功能的原因:

例如:

func = @(x) sin(x);

sol = fminsearch(@(x) func(x),0)
% sol = pi/2
sol = fminsearch(@(x) func(x)*-1,0)
% sol = -pi/2