通常,找到函数的最小值是有用的,而不是调整它与x轴交叉的零。fminbnd
是为单变量函数的更简单但非常常见的情况而设计的,其中搜索区间是有界的。对于具有潜在多变量的函数的无界最小化,使用fminunc
或fminsearch
.这两个函数使用不同的内部算法,并且需要一些客观性函数的知识。对于可以区分的函数,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(右边界)。端点必须是有限的。
options是指定控制算法的附加参数的结构体。目前,fminbnd
识别这些参数:"Display"
, "FunValCheck"
, "MaxFunEvals"
,"MaxIter"
, "OutputFcn"
, "TolX"
.
"MaxFunEvals"
禁止在停止优化之前进行最大数量的函数评估。默认值为500。该值必须是正整数。
"MaxIter"
禁止在停止优化之前的最大算法迭代次数。默认值为500。该值必须是正整数。
"TolX"
指定解决方案的终止误差范围x。默认为1e-4
.
有关其他参数的描述,详见optimset
。使用的默认值初始化参数结构体fminbnd
使用options = optimset ("fminbnd")
.
退出时,函数返回x,近似最小点,以及fval,评估的函数x.
第三个输出info返回算法是否成功,并可能采用以下值之一:
MaxIter
或MaxFunEvals
)超过。OutputFcn
.
注意:
fminunc
或fminsearch
.
fminbnd
内部使用黄金分割搜索策略。
fminbnd
和其他
优化函数,详见 Minimizers 手册中的
一节.
详见: 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,但在其他方面被视为列向量。
options是指定控制算法的附加参数的结构体。目前,fminunc
识别这些参数:"AutoScaling"
, "FinDiffType"
, "FunValCheck"
,"GradObj"
, "MaxFunEvals"
, "MaxIter"
,"OutputFcn"
, "TolFun"
, "TolX"
, "TypicalX"
.
如果"AutoScaling"
是"on"
,变量将根据(估计的)雅可比矩阵的列范数进行自动缩放。因此"TolFun"
变得与缩放无关。默认情况下,此参数为"off"
因为它有时可能会返回意想不到的(尽管在数学上是正确的)结果。
如果"GradObj"
是"on"
,它指定fcn--当用两个输出参数调用时,也会在指定点返回部分一阶导数的雅可比矩阵。
"MaxFunEvals"
禁止在停止优化之前进行最大数量的函数评估。默认值为100 * number_of_variables
即。,100*长度(x0)
。该值必须是正整数。
"MaxIter"
禁止在停止优化之前的最大算法迭代次数。默认值为400。该值必须是正整数。
"TolX"
指定未知变量的终止误差范围x虽然"TolFun"
是对目标函数值的容差fval。默认为1e-6
对于这两个参数。
有关其他参数的描述,详见optimset
.
在返回时,x是最小值的位置,并且fval包含目标函数的值x.
info可以是以下值之一:
聚合到解决方案点。相对梯度误差小于指定的TolFun
.
上次相对步长小于TolX
.
函数值的上次相对变化小于TolFun
.
超过迭代限制--算法迭代的最大次数MaxIter
或函数评估的最大数量MaxFunEvals
.
算法终止于OutputFcn
.
信任区域半径变得过小。
可选地,fminunc
可以返回具有收敛统计的结构体(output),输出梯度(grad)在解决方案x,和近似的黑森(hess)在解决方案x.
注意:
fminbnd
通常是更好的选择。
fminunc
是一种依赖于目标函数可微的梯度搜索。
如果函数不连续,则最好使用无导数算法,例如fminsearch
.
fminunc
and other
minimization functions see the Minimizers section of the GNU Octave
manual.
详见: fminbnd, 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
失败。
参数中提供了搜索参数options使用函数optimset
目前,fminsearch
接受以下参数:"Display"
, "FunValCheck"
,"MaxFunEvals"
,"MaxIter"
, "OutputFcn"
, "TolFun"
, "TolX"
.
"MaxFunEvals"
禁止在停止优化之前进行最大数量的函数评估。默认值为200 * number_of_variables
即。,200*长度(x0)
。该值必须是正整数。
"MaxIter"
禁止在停止优化之前的最大算法迭代次数。默认值为200 * number_of_variables
即。,200*长度(x0)
。该值必须是正整数。
有关其他参数的描述,详见optimset
。使用的默认值初始化参数结构体fminsearch
使用options = optimset ("fminsearch")
.
fminsearch
也可以用具有以下字段的单个结构体参数调用:
objective
目标函数。
x0
起点。
solver
必须设置为"fminsearch"
.
options
从返回的结构体optimset
或者一个空矩阵来指示应该使用默认值。
该fieldoptions
是可选的。所有其他都是必需的。
退出时,函数返回x,最低点,以及fval,函数值最小。
第三个输出exitflag返回算法是否成功,并可能采用以下值之一:
如果算法收敛(单纯形的大小小于TolX
以及迭代之间的步长函数值小于TolFun
).
如果超过了最大迭代次数或最大函数求值次数。
如果迭代被停止"OutputFcn"
.
第四个输出是一个结构体output包含关于算法的运行时间。结构体中的字段为funcCount
包含对的函数调用次数fcn, iterations
包含迭代步骤的数量,algorithm
使用搜索算法的名称(始终:"Nelder-Mead simplex direct search"
和message
带有退出消息。
用例
fminsearch (@(x) (x(1)-5).^2+(x(2)-8).^4, [0;0])
注意:
fminbnd
.
fminsearch
和其他
优化函数,详见 Minimizers 手册中的
一节.
特定的优化操作需要传入额外
参数, F
, 即被优化的函数. 例如, F = F(x, C)
.
Octave的优化函数被设计仅能传入一个优化
变量到 F
, 传入更多的参数可以通过
一个 Anonymous Function 接收优化变量
来实现. 例如:
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
函数humps
是一个有用的函数,用于测试零和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将包含的输出humps
.
编程说明:humps
具有两个位于附近的局部最大值x=0.300和0.893,附近的局部最小值x=0.637,附近为零x=-0.132和1.300。humps
是测试寻找零或局部极小值和极大值的算法的有用函数。
尝试demo humps
查看的情节humps
作用
详见: fzero, fminbnd, fminunc, fminsearch.
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2