主要内容

fminsearch

使用derivative-free方法找到最低的无约束多变量函数

描述

非线性规划求解器进行求解。搜索指定的最小的问题

最小值 x f ( x )

f(x)是一个函数,它返回一个标量,x是一个向量或矩阵;看到矩阵的参数

例子

x= fminsearch (有趣的,x0)开始的时候x0并试图找到一个局部最小值x中描述的功能有趣的

例子

x= fminsearch (有趣的,x0,选项)最小化的优化选项中指定的结构选项。使用optimset设置这些选项。

x= fminsearch (问题)发现的最低标准问题描述的结构问题

例子

(x,fval)= fminsearch (___)以前,对于任何输入语法,返回fval目标函数的值有趣的在解决方案x

(x,fval,exitflag)= fminsearch (___)此外,返回一个值exitflag描述退出条件。

例子

(x,fval,exitflag,输出)= fminsearch (___)此外返回一个结构输出的信息优化过程。

例子

全部折叠

最小化。海涅的功能,一个出了名的困难许多算法的优化问题:

f ( x ) = 1 0 0 ( x 2 - - - - - - x 1 2 ) 2 + ( 1 - - - - - - x 1 ) 2

函数是最小的点x = [1]与最小值0

设置起始点x0 = (-1.2, 1)和最小化。海涅的功能使用fminsearch

有趣= @ (x) 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;x0 = (-1.2, 1);x0, x = fminsearch(有趣)
x =1×21.0000 - 1.0000

选项设置为监控过程fminsearch试图找到一个最小值。

选项设置为每次迭代的目标函数。

选择= optimset (“PlotFcns”,@optimplotfval);

设置目标函数。函数,

f ( x ) = 1 0 0 ( x 2 - - - - - - x 1 2 ) 2 + ( 1 - - - - - - x 1 ) 2

函数是最小的点x = [1]与最小值0

设置起始点x0 = (-1.2, 1)和最小化。海涅的功能使用fminsearch

有趣= @ (x) 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;x0 = (-1.2, 1);x = fminsearch(有趣,x0,选项)

图优化函数包含一个坐标轴对象。坐标轴对象与标题当前函数值:8.17766平台以及包含迭代,ylabel函数值包含一行对象显示它的值只使用标记。

x =1×21.0000 - 1.0000

最小化目标函数的值是通过执行一个文件。一个函数文件必须接受一个真实的向量x并返回一个真正的标量,是目标函数的值。

复制下面的代码,包括文件命名objectivefcn1.m在你的MATLAB®路径。

函数f = objectivefcn1 f (x) = 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 (x0 @objectivefcn1)
x = -0.1696 - -0.5086

有时你的目标函数有额外的参数。这些参数不变量进行优化,在优化固定值。例如,假设你有一个参数一个在Rosenbrock-type函数

f ( x , 一个 ) = 1 0 0 ( x 2 - - - - - - x 1 2 ) 2 + ( 一个 - - - - - - x 1 ) 2

这个函数的最小值为0 x 1 = 一个 , x 2 = 一个 2 。例如,如果 一个 = 3 ,您可以包括目标函数中的参数创建一个匿名函数。

创建额外的参数的目标函数作为额外参数。

f = @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (ax) (1)) ^ 2;

把参数在MATLAB®工作区。

= 3;

创建一个匿名函数x仅包括工作区参数值。

有趣= @ (x) f (x);

开始解决问题x0 = (1.9)

x0 = (1.9);x0, x = fminsearch(有趣)
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 (“显示”,“通路”,“PlotFcns”,@optimplotfval);

设置一个目标函数和起点。

函数f = objectivefcn1 f (x) = 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.000000 e-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)。

fminsearch通过x你的目标函数的形状x0论点。例如,如果x0是5-by-3数组,那么fminsearch通过x有趣的作为一个5-by-3数组。

指定有趣的作为一个函数处理一个文件:

x = fminsearch (x0 @myfun)

在哪里myfunMATLAB是一种®等功能

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

您还可以指定有趣的作为一个匿名函数的函数处理:

x = fminsearch (@ (x)规范(x) ^ 2, x0);

例子:有趣= @ (x) - x * exp (3 * x)

数据类型:字符|function_handle|字符串

初始点,指定为一个真正的向量或真正的数组。解决使用中元素的数量x0和的大小x0确定变量的数量和大小有趣的接受。

例子:x0 = (1、2、3、4)

数据类型:

优化选项,指定为一个结构等optimset的回报。您可以使用optimset设置或更改这些字段的值在期权结构。看到优化选择参考的详细信息。

显示

显示(见水平迭代显示):

  • “通知”(默认)显示输出只有在函数不收敛。

  • “最后一次”显示最终的输出。

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

  • “通路”在每一次迭代时显示输出。

FunValCheck

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

MaxFunEvals

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

麦克斯特

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

OutputFcn

指定一个或多个用户定义的函数,一个优化函数调用在每个迭代中,作为处理函数或处理单元阵列的功能。默认是没有([])。看到输出函数和情节函数的语法

PlotFcns

阴谋在算法执行时各种措施的进展。从预定义的情节或编写自己的选择。通过一个函数处理或处理单元阵列的功能。默认是没有([]):

  • @optimplotx当前点的阴谋。

  • @optimplotfunccount情节数的函数。

  • @optimplotfval情节的函数值。

自定义函数使用相同的语法作为输出函数。看到输出函数优化工具箱输出函数和情节函数的语法

TolFun

终止公差函数值,一个积极的标量。默认值是1的军医。看到公差和停止条件。不像其他的解决者,fminsearch停止当它满足这两个TolFunTolX

TolX

终止上公差x,一个积极的标量。默认值是1的军医。看到公差和停止条件。不像其他的解决者,fminsearch停止当它满足这两个TolFunTolX

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

数据类型:结构体

问题的结构,与以下字段指定为一个结构。

字段名 条目

客观的

目标函数

x0

初始点x

解算器

“fminsearch”

选项

选择返回等结构optimset

数据类型:结构体

输出参数

全部折叠

解决方案,作为真正的向量或返回数组。的大小x是一样的尺寸吗x0。通常情况下,x是当地的解决问题的办法exitflag是正的。信息的质量解决方案,明白了当解决成功

目标函数值的解决方案,作为一个实数返回。一般来说,fval=有趣的(x)

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

1

功能融合到一个解决方案x

0

迭代次数超过options.MaxIter超过或数量的功能评估options.MaxFunEvals

1

输出函数的算法终止。

优化过程的信息,作为结构返回字段:

迭代

的迭代次数

funcCount

数量的功能评估

算法

“直接Nelder-Mead单纯形搜索”

消息

退出消息

提示

  • fminsearch只有最大限度地减少在实数,x必须只由实数和f(x)必须只返回实数。当x有复杂的值,分割x实部和虚部。

  • 使用fminsearch解决nondifferentiable问题或不连续的问题,特别是如果没有间断附近发生的解决方案。

  • fminsearch通常效率不及fminunc,特别是对问题的维数大于2。然而,当问题是不连续的,fminsearch可以更健壮的比fminunc

  • fminsearch不是首选解决问题的广场,也就是形式

    最小值 x f ( x ) 2 2 = 最小值 x ( f 1 ( x ) 2 + f 2 ( x ) 2 + + f n ( x ) 2 )

    相反,使用lsqnonlin函数,它优化了这种形式的问题。

算法

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

选择功能

应用程序

优化住编辑任务提供了一个可视化界面fminsearch

引用

[1]Lagarias, j . C。,J. A. Reeds, M. H. Wright, and P. E. Wright. “Convergence Properties of the Nelder-Mead Simplex Method in Low Dimensions.”暹罗《优化。第一卷。9日,1998年,页112 - 147。

扩展功能

版本历史

之前介绍过的R2006a