20.2最小化

通常,找到函数的最小值是有用的,而不是调整它与x轴交叉的零。fminband是为单变量函数的更简单但非常常见的情况而设计的,其中搜索区间是有界的。对于具有潜在多变量的函数的无界最小化,使用fminuncfminsearch.这两个函数使用不同的内部算法,并且需要一些客观性函数的知识。对于可以区分的函数,fminunc是适当的。对于具有不连续性的函数,或梯度搜索将失败的函数,使用fminsearch详见优化用于在存在约束函数的情况下最小化。注意,可以通过简单地反转目标函数来搜索最大值(Fto_max=-Fto_min).

 
: x = fminbnd (fcn, a, b)
: x = fminbnd (fcn, a, b, options)
: [x, fval, info, output] = fminbnd (…)

求一个单变量函数的极小点。

fcn是一个函数句柄、内联函数或字符串,包含要计算的函数的名称。

启动间隔从指定a(左边界)和b(右边界)。端点必须是有限的。

param是指定控制算法的附加参数的结构体。目前,fminband识别这些参数:显示, FunValCheck, MaxFunEvals,MaxIter, OutputFcn, TolX.

MaxFunEvals禁止在停止优化之前进行最大数量的函数评估。默认值为500。该值必须是正整数。

MaxIter禁止在停止优化之前的最大算法迭代次数。默认值为500。该值必须是正整数。

TolX指定解决方案的终止公差x。默认为1e-4.

有关其他参数的描述,详见最优集。使用的默认值初始化参数结构体fminband使用options=optiset(“fminband”).

退出时,函数返回x,近似最小点,以及未来值,评估的函数x.

第三个输出信息返回算法是否成功,并可能采用以下值之一:

  • 1算法收敛到一个解。
  • 0迭代限制(任一MaxIterMaxFunEvals)超过。
  • -1算法已被用户终止OutputFcn.

注意:

  1. 搜索最小值被限制在ab。如果您只有一个起始点可以开始搜索,则需要使用未经训练的最小化算法,例如fminuncfminsearch. fminband内部使用黄金分割搜索策略。
  2. 使用 匿名函数 可以向 fcn 传入额外参数. 要获取特定例程以用于 fminbnd 和其他 优化函数,详见 优化函数 手册中的 一节.

详见: fzero, fminunc, fminsearch, optimset.

 
: x = fminunc (fcn, x0)
: x = fminunc (fcn, x0, options)
: [x, fval] = fminunc (fcn, …)
: [x, fval, info] = fminunc (fcn, …)
: [x, fval, info, output] = fminunc (fcn, …)
: [x, fval, info, output, grad] = fminunc (fcn, …)
: [x, fval, info, output, grad, hess] = fminunc (fcn, …)

求解从函数定义的无约束优化问题fcn.

fminunc尝试确定向量x使得fcn(x)是当地的最低要求。

fcn是一个函数句柄、内联函数或字符串,包含要计算的函数的名称。fcn应接受定义未知变量的向量(数组),并返回目标函数值(可选地带有梯度)。

x0决定了一个开始的猜测。的形状x0保留了对的所有调用fcn,但在其他方面被视为列向量。

param是指定控制算法的附加参数的结构体。目前,fminunc识别这些参数:自动缩放, FinDiffType, FunValCheck,GradObj, MaxFunEvals, MaxIter,OutputFcn, TolFun, TolX, TypicalX.

如果自动缩放on,变量将根据(估计的)雅可比矩阵的列范数进行自动缩放。因此TolFun变得与缩放无关。默认情况下,此参数为因为它有时可能会返回意想不到的(尽管在数学上是正确的)结果。

如果GradObjon,它指定fcn--当用两个输出参数调用时,也会在指定点返回部分一阶导数的雅可比矩阵。

MaxFunEvals禁止在停止优化之前进行最大数量的函数评估。默认值为100*个变量即。,100*长度(x0)。该值必须是正整数。

MaxIter禁止在停止优化之前的最大算法迭代次数。默认值为400。该值必须是正整数。

TolX指定未知变量的终止公差x虽然TolFun是对目标函数值的容差未来值。默认为1e-6对于这两个参数。

有关其他参数的描述,详见最优集.

在返回时,x是最小值的位置,并且未来值包含目标函数的值x.

信息可以是以下值之一:

1

聚合到解决方案点。相对梯度误差小于指定的TolFun.

2

上次相对步长小于TolX.

3

函数值的上次相对变化小于TolFun.

0

超过迭代限制--算法迭代的最大次数MaxIter或函数评估的最大数量MaxFunEvals.

-1

算法终止于OutputFcn.

-3

信任区域半径变得过小。

可选地,fminunc可以返回具有收敛统计的结构体(输出),输出梯度(毕业生)在解决方案x,和近似的黑森(hess)在解决方案x.

注意:

  1. 如果目标函数是一个变量的单个非线性方程,则使用fminband通常是更好的选择。

  2. 使用的算法fminunc是一种依赖于目标函数可微的梯度搜索。如果函数具有不连续性,则最好使用无导数算法,例如fminsearch.
  3. 要获取特定例程以用于 fminunc 和其他 优化函数,详见 优化函数 手册中的 一节.

详见: fminband, fminsearch, optimset.

 
: x = fminsearch (fcn, x0)
: x = fminsearch (fcn, x0, options)
: x = fminsearch (problem)
: [x, fval, exitflag, output] = fminsearch (…)

查找的值x使多变量函数最小化fcn.

fcn是一个函数句柄、内联函数或字符串,包含要计算的函数的名称。

搜索从点开始x0并使用Nelder和Mead单纯形算法(一种无导数方法)进行迭代。该算法更适合于具有不连续性或基于梯度搜索的函数,例如fminunc失败。

参数中提供了搜索参数param使用函数最优集目前,fminsearch接受以下参数:显示, FunValCheck,MaxFunEvals,MaxIter, OutputFcn, TolFun, TolX.

MaxFunEvals禁止在停止优化之前进行最大数量的函数评估。默认值为200*个变量即。,200*长度(x0)。该值必须是正整数。

MaxIter禁止在停止优化之前的最大算法迭代次数。默认值为200*个变量即。,200*长度(x0)。该值必须是正整数。

有关其他参数的描述,详见最优集。使用的默认值初始化参数结构体fminsearch使用options=optiset(“fminsearch”).

fminsearch也可以用具有以下字段的单个结构体参数调用:

objective

目标函数。

x0

起点。

solver

必须设置为fminsearch.

options

从返回的结构体最优集或者一个空矩阵来指示应该使用默认值。

该fieldoptions是可选的。所有其他都是必需的。

退出时,函数返回x,最低点,以及未来值,函数值最小。

第三个输出exitflag返回算法是否成功,并可能采用以下值之一:

1

如果算法收敛(单纯形的大小小于TolX 以及迭代之间的步长函数值小于TolFun).

0

如果超过了最大迭代次数或最大函数求值次数。

-1

如果迭代被停止OutputFcn.

第四个输出是一个结构体输出包含关于算法的运行时间。结构体中的字段为funcCount包含对的函数调用次数fcn, iterations包含迭代步骤的数量,算法使用搜索算法的名称(始终:Nelder-Mead单纯形直接搜索message带有退出消息。

用例

fminsearch(@(x)(x(1)-5)^2+(x(2)-8)^4, [0;0])

注意:

  1. 如果你需要找到一个单变量函数的最小值,最好使用fminband.
  2. 旧版的, 文档中没有的 fcn 传参语法可以用于 在 options 传参,不推荐这种用法 且在Octave 10中将移除. 推荐的、 跨平台的 fcn 传参用法详见 匿名函数. 要获取特定例程以用于 fminsearch 和其他 优化函数,详见 优化函数 手册中的 一节.

详见: fminband, fminunc, optimset.

特定的优化操作需要传入额外 参数, F, 即被优化的函数. 例如, F = F(x, C). Octave的优化函数被设计仅能传入一个优化 变量到 F, 传入更多的参数可以通过 一个 匿名函数 接收优化变量 来实现. 例如:

A = 2; B = 3;
f = @(x) sin (A*x + B);
fminbnd (f, 0, 2)
   ⇒   0.8562

注意匿名函数将保持在定义函数时的优化变量。 在定义优化函数之后改变优化变量将不会 影响优化函数的输出,除非重新定义优化函数:

B = 4;
fminbnd (f, 0, 2)
   ⇒   0.8562
f = @(x) sin (A*x + B);
fminbnd (f, 0, 2)
   ⇒   0.3562

函数隆起是一个有用的函数,用于测试零和xtrema查找函数。

 
: y = humps (x)
: [x, y] = humps (x)

评估具有多个最小值、最大值和过零点的函数。

输出y是对有理函数的评估:

1200*x^4 - 2880*x^3 + 2036*x^2 - 348*x- 88 y= - ---------------------------------------------         200*x^4 - 480*x^3 + 406*x^2 - 138*x+ 17

x可以是标量、向量或数组。如果x则使用默认范围[0:0.05:1]。

当用两个输出自变量调用时[x, y], x将包含输入值,以及y将包含的输出隆起.

编程说明:隆起具有两个位于附近的局部最大值x=0.300和0.893,附近的局部最小值x=0.637,附近为零x=-0.132和1.300。隆起是测试寻找零或局部极小值和极大值的算法的有用函数。

尝试demo humps查看的情节隆起作用

详见: fzero, fminband, fminunc, fminsearch.


版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-1