我想使用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 回答
是的,你可以,这也是没有fmaxsearch功能的原因:
例如: