2

我想使用 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]);

可能吗?

更新1 :为了详细说明我的问题并使其更清楚(遵循下面的一些评论) - 我正在添加此更新:

通过询问是否可以这样做,我的意思是它是对fminsearch功能的正确使用 - 它是查找 max using 的预期用途fminsearch吗?

更新 2:对于谁曾经关心过同样的问题 - 除了下面的正确答案,这里是来自https://www.mathworks.com/help/matlab/math/optimizing-nonlinear-functions.html#bsgpq6p的文档- 10

最大化函数 fminbnd 和 fminsearch 求解器试图最小化一个目标函数。如果你有一个最大化问题,即形式的问题

最大 xf(x),然后定义 g(x) = –f(x),并最小化 g。

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

[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。

4

1 回答 1

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
于 2016-06-17T08:07:03.573 回答