fminsearch

用无导数法求无约束多变量函数的最小值

描述

非线性规划求解。搜索最小指明的问题

最小值 X F X

FX)是返回标功能,和X是一个向量或矩阵。

X= fminsearch(开玩笑X0始于点X0并尝试找到当地最低X的功能描述开玩笑

X= fminsearch(开玩笑X0选项在该结构中指定的优化选项最小化选项。用optimset设置这些选项。

X= fminsearch(问题找到最低的问题,其中问题是一个结构。

[XFVAL] = fminsearch(___,对于以前的任何输入语法,返回inFVAL目标函数的值开玩笑在该解决方案X

[XFVALexitflag] = fminsearch(___另外返回一个值exitflag它描述了退出条件。

[XFVALexitflag产量] = fminsearch(___另外返回一个结构产量有关优化过程的信息。

例子

全部收缩

最小化的ROSENBROCK的功能,许多算法非常困难的优化问题:

F X = 1 0 0 X 2 - X 1 2 2 + 1 - X 1 2

该函数在该点处被最小化x = [1]与最小值0

设置起点X0 = [-1.2,1]并使用最小化的ROSENBROCK的功能fminsearch

有趣= @(X)100 *(X(2) -  X(1)^ 2)^ 2 +(1  -  X(1))^ 2;X0 = [-1.2,1];X = fminsearch(乐趣,X0)
x =1×21.0000 - 1.0000

设置选项来监控过程fminsearch尝试找到最低。

设置选项,以便在每次迭代中绘制目标函数。

选择= optimset ('PlotFcns',@ optimplotfval);

设定目标函数的ROSENBROCK的功能,

F X = 1 0 0 X 2 - X 1 2 2 + 1 - X 1 2

该函数在该点处被最小化x = [1]与最小值0

设置起点X0 = [-1.2,1]并使用最小化的ROSENBROCK的功能fminsearch

有趣= @(X)100 *(X(2) -  X(1)^ 2)^ 2 +(1  -  X(1))^ 2;X0 = [-1.2,1];X = fminsearch(乐趣,X0,选项)

x =1×21.0000 - 1.0000

最小化的目标函数,其值由执行文件中给出。函数文件必须接受一个真正的矢量X并返回一个真正的标量为目标函数的值。

复制以下代码,并将其包含为一个名为objectivefcn1.m在MATLAB路径上。

功能F = objectivefcn1(X)F = 0;对于k = 10:10 f = f + exp (- (x (1) - x (2)) ^ 2 - 2 * x (1) ^ 2) * cos (x (2)) * sin (x 2 * (2));结束

开始X0 = [0.25,-0.25]和搜索最小的objectivefcn

X0 = [0.25,-0.25];X = fminsearch(@ objectivefcn1,X0)
X = -0.1696 -0.5086

有时你的目标函数有额外的参数。这些参数不是要优化的变量,它们是优化期间的固定值。例如,假设您有一个参数一个在的ROSENBROCK型函数

F X 一个 = 1 0 0 X 2 - X 1 2 2 + 一个 - X 1 2

该函数具有在最小值0 X 1 = 一个 X 2 = 一个 2 。如果,例如, 一个 = 3 ,你可以通过创建一个匿名函数包含在你的目标函数的参数。

创建目标函数,将其额外参数作为额外参数。

F = @(X,A)100 *(X(2) -  X(1)^ 2)^ 2 +(A-X(1))^ 2;

把参数在MATLAB®工作区。

一个= 3;

创建一个匿名函数X单独包含参数的工作区中的值。

有趣= @(X)F(X,A);

从…开始解决问题x0 = (1.9)

x0 = (1.9);X = fminsearch(乐趣,X0)
x =1×23.0000 9.0000

有关在你的目标函数中使用额外的参数的详细信息,请参阅参数化功能

发现无论是使用最小的目标函数的位置和价值fminsearch

写一个三变量的问题一个匿名的目标函数。

X0 = [1,2,3];有趣= @(x)的范数(X + X0)^ 2 * EXP(范数(X-X0)^ 2 + SUM(X));

找到最低的开玩笑X0。也要找到最小值。

[X,FVAL] = fminsearch(乐趣,X0)
x =1×31.5359 2.5645 3.5932
fval = -5.9565 e + 04

检查优化的结果,无论是在其运行时,它完成之后。

设置选项以提供迭代显示,从而在求解程序运行时提供有关优化的信息。另外,设置一个绘图函数,在求解程序运行时显示目标函数值。

选择= optimset ('显示''ITER''PlotFcns',@ optimplotfval);

设定的目标函数和起点。

功能F = objectivefcn1(X)F = 0;对于k = 10:10 f = f + exp (- (x (1) - x (2)) ^ 2 - 2 * x (1) ^ 2) * cos (x (2)) * sin (x 2 * (2));结束

包括以下代码objectivefcn1为您的MATLAB®路径上的一个文件。

X0 = [0.25,-0.25];有趣= @ objectivefcn1;

获得所有求解器输出。使用这些输出检查求解器完成后的结果。

[X,FVAL,exitflag,输出] = fminsearch(乐趣,X0,选项)
迭代Func-count最小f (x)程序-6.70447 0 1 1 3 -6.89837初始单纯形2 5 -7.34101扩大3 7 -7.91894扩大4 9 -9.07939扩大5 11 -10.5047扩大6 13 -12.4957扩大7 15 -12.6957反映8 17 -12.8052以外的合同9 19 -12.8052合同内10 21日-13.0189扩大11 23日-13.0189合同内12 25 -13.0374反映13 27 -13.122反映14 28 -13.122反映15 29 -13.122反映16 31 -13.122合同外17 33 -13.1279合同内18 35 -13.1279合同在19日37 -13.1296合同内20 39 -13.1301合同内21 41 -13.1305反映22 43 -13.1306合同内23 45 -13.1309合同内24 47 -13.1309合同内25 49 -13.131反映26 51 -13.131合同内27 53 -13.131合同内28 55 -13.131合同内29 57 -13.131合同外30 59 -13.131合同内31 61 -13.131合同里面32 63 -13.131合同内33 65 -13.131合同以外的34 67 -13.131合同内35 69 -13.131合同内部优化终止:当前x使用选项满足终止条件。TolX的1.000000e-04和F(X)满足使用选项的收敛标准。TolFunof 1.000000e-04 x = -0.1696 -0.5086 fval = -13.1310 exitflag = 1 output = struct with fields: iterations: 35 funcCount: 69 algorithm: 'Nelder-Mead simplex direct search' message: 'Optimization terminated:...'

的价值exitflag1,这意味着fminsearch可能收敛到局部最小。

产量结构显示迭代的次数。迭代显示和绘图也显示了这些信息。该产量结构还显示函数评估的数量,这是迭代显示,但选择的绘图函数没有。

输入参数

全部收缩

功能,以尽量减少,指定为功能手柄或函数的名称。开玩笑是接受载体或阵列的功能X并返回一个实标量F(目标函数评估在X)。

指定开玩笑对于文件的函数句柄:

x = fminsearch (x0 @myfun)

在哪里myfun是MATLAB®功能如

函数f = myfun(x) f =…%计算函数在x处的值

您还可以指定开玩笑作为匿名函数的函数句柄:

X = fminsearch(@(x)的范数(X)^ 2,X0);

例:有趣= @(X)-x * EXP( - 3 * x)的

数据类型:烧焦|function_handle|

初始点,指定为实向量或真正的数组。求解器使用的在元件的数量和大小,X0确定这些变量的数量和大小开玩笑接受。

例:X0 = [1,2,3,4]

数据类型:

优化选项,指定为诸如的结构optimset的回报。您可以使用optimset在选项结构中设置或更改这些字段的值。看到设置优化选项了解详细信息。

显示

显示器的水平(见优化求解迭代显示):

  • “通知”(默认)显示器输出仅当该功能不收敛。

  • '最后'只显示最终的输出。

  • “关”'没有'显示没有输出。

  • 'ITER'在每次迭代中显示输出。

FunValCheck

检查的目标函数值是否有效。'上'显示当目标函数返回一个值,该值是一个错误复杂为NaN。默认“关”显示没有错误。

MaxFunEvals

功能评估的最大数量允许的,一个正整数。默认值是200个* numberOfVariables。看到公差和停止条件

MAXITER

最大迭代次数允许的,一个正整数。默认值是200个* numberOfVariables。看到公差和停止条件

OutputFcn

指定一个或多个用户定义的函数,一个优化函数调用在每次迭代中,既可以作为一个功能句柄或函数处理的一个单元阵列。默认值为none ([])。看到优化求解输出函数

PlotFcns

在算法执行时绘制各种进度度量。从预定义的情节中选择或编写自己的。传递一个函数句柄或函数句柄的单元格数组。默认值为none ([]):

  • @optimplotx绘制当前点。

  • @optimplotfunccount绘制功能计数。

  • @optimplotfval绘制函数值。

有关编写自定义的绘图功能的信息,请参阅优化求解绘图功能

TolFun

函数值的终止容差为正标量。默认值是1E-4。看到公差和停止条件。不像其他的解决者,fminsearch满足时停止TolFunTolX

TolX

终止上公差X,正面标。默认值是1E-4。看到公差和停止条件。不像其他的解决者,fminsearch满足时停止TolFunTolX

例:选择= optimset(“显示”,“iter”)

数据类型:结构

问题结构,指定为具有以下字段的结构。

字段名称 条目

客观的

目标函数

X0

初始点X

解算器

“fminsearch”

选项

选项结构,通过返回的optimset

数据类型:结构

输出参数

全部收缩

溶液,返回为真实载体或真正的数组。的大小X和的尺寸一样吗X0。通常情况下,X解决问题的地方是什么时候exitflag是积极的。

在该解决方案的目标函数值,返回一个实数。通常,FVAL=有趣的(x)

原因fminsearch停止,返回一个整数。

1

该函数收敛至溶液X

0

超过迭代次数options.MaxIter或评价次数超过options.MaxFunEvals

1

该算法是由输出功能终止。

关于优化过程的信息,返回与字段的结构:

迭代

的迭代次数

funcCount

评价次数

算法

“内尔德-Mead单纯直接搜索”

信息

退出消息

提示

  • fminsearch只有最小化在所述实数,即,载体或阵列X必须只为实数和FX)只能返回实数。什么时候X有复杂的值,分裂X成实部和虚部。

  • fminsearch解决问题不可微或问题的不连续性,尤其是当该溶液附近没有发生不连续。

算法

fminsearch使用Lagarias等人的单纯形搜索方法。[1]。这是一种直接搜索方法,不使用数值或解析梯度,如infminunc。该算法中详细地描述fminsearch算法。该算法不能保证收敛到局部最小值。

参考

[1] Lagarias,J.C.,J. A.芦苇,M. H. Wright和P. E.赖特。“低维的内尔德 - 米德单纯形法的收敛性。”SIAM杂志优化。第9卷第1期,1998年,第112-147页。

扩展功能

之前介绍过的R2006a