主要内容

fminsearch.

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

描述

非线性规划求解器进行求解。查找指定问题的最小值

最小值 x f x

fx)是返回标量的函数,并且x是矢量或矩阵;看矩阵的参数

例子

x= fminsearch(有趣的X0.从点开始X0.并尝试找到当地的最低限度x中描述的功能有趣的

例子

x= fminsearch(有趣的X0.选项结构中指定的优化选项最小化选项.使用优化集设置这些选项。

x= fminsearch(问题求最小值问题中所描述的结构问题

例子

xfval) = fminsearch (___,对于任何先前的输入语法,返回fval目标函数的值有趣的在解决方案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]最小化罗森布罗克函数fminsearch.

@(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;x0 = (-1.2, 1);x0, x = fminsearch(有趣)
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]最小化罗森布罗克函数fminsearch.

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

图优化Plot函数包含一个轴。标题为“当前功能值:8.17766e-10”的轴包含一个类型为line的对象。

X =1×21.0000 - 1.0000

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

复制以下代码并将其包含为一个名为objectivefcn1.m在您的Matlab®路径上。

函数F = objecvefcn1 (x) F = 0;k = -10:10 f = f + exp( - (x(1)-x(2))^ 2  -  2 * x(1)^ 2)* cos(x(2))* sin(2 * x(2));结束

开始x0 = [0.25,-0.25]并寻找最小值objectivefcn

x0 = [0.25, -0.25];x = fminsearch(@ ObjectFCN1,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 + (a-x(1))^2;

将参数放在Matlab®工作区中。

a = 3;

创造一个匿名功能x单独包含参数的工作空间值。

fun = @(x)f(x,a);

解决问题从x0 = (1.9)

x0 = (1.9);x0, x = fminsearch(有趣)
X =1×23.0000 - 9.0000

有关在客观函数中使用额外参数的更多信息,请参阅参数化功能

查找使用最小目标函数的位置和值fminsearch.

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

x0 = [1,2,3];fun = @(x)-norm(x + x0)^ 2 * exp(-norm(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 = objecvefcn1 (x) F = 0;k = -10:10 f = f + exp( - (x(1)-x(2))^ 2  -  2 * x(1)^ 2)* cos(x(2))* sin(2 * x(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.131 -13.1309合同内25 49反映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使用OPTIONS满足终止条件。TolXof 1.000000e-04 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 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.可能收敛到局部最小值。

输出结构显示迭代次数。迭代显示和情节也显示了这一信息。的输出结构也显示函数计算的数量,迭代显示显示,但选择的plot函数不显示。

输入参数

全部折叠

功能最小化,指定为函数句柄或函数名称。有趣的是一个接受向量或数组的函数x并返回一个实标量f(目标函数值为x).

指定有趣的作为文件的函数句柄:

x = fminsearch (x0 @myfun)

在哪里myfunMATLAB是一种®功能如

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

你也可以指定有趣的作为匿名函数的函数句柄:

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

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

数据类型:char|function_handle|细绳

初始点,指定为实向量或实数组。解算器使用元素的数量X0.大小X0.来确定变量的数量和大小有趣的接受。

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

数据类型:双倍的

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

展示

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

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

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

  • '离开'“没有”显示无输出。

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

FunValCheck

检查目标函数值是否有效。“上”当目标函数返回值为时显示错误复杂的.默认的'离开'显示没有错误。

Maxfunevals.

允许的函数求值的最大数目,一个正整数。默认值是200 * Numberofvariables..看到公差和停止标准迭代和功能计数

麦克斯特

允许的最大迭代次数,一个正整数。默认值为200 * Numberofvariables..看到公差和停止标准迭代和功能计数

outputfcn.

指定一个或多个用户定义的函数,即在每个迭代时进行优化函数调用,作为函数句柄或作为功能句柄的单元格数组。默认为none ([]).看到输出函数和绘图函数语法

PlotFcns

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

  • @optimplotx绘制当前点。

  • @optimplotfunccount.绘制函数计数。

  • @OptimplotFval.绘制函数值。

自定义绘图函数使用与输出函数相同的语法。看到优化工具箱的输出函数输出函数和绘图函数语法

塔尔芬

函数值的终止容限,一个正标量。默认值是1E-4.看到公差和停止标准.不像其他的解决者,fminsearch.满足时停止两个都塔尔芬TolX

TolX

终止上公差x,一个正标量。默认值为1E-4.看到公差和停止标准.不像其他的解决者,fminsearch.满足时停止两个都塔尔芬TolX

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

数据类型:结构体

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

字段名称 条目

客观的

目标函数

X0.

初始点x

求解器

“fminsearch”

选项

选项结构如返回优化集

数据类型:结构体

输出参数

全部折叠

解,返回实向量或实数组。的大小x和尺寸一样吗X0..通常,x什么时候能解决局部问题exitflag是正的。有关解决方案质量的信息,请参见当求解成功时

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

原因fminsearch.已停止,返回为整数。

1

这个函数收敛到一个解x

0

超过迭代次数选项。麦克斯特或超过函数求值次数options.maxfunevals.

-1

算法由输出函数终止。

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

迭代

的迭代次数

funcCount

函数计算次数

算法

Nelder-Mead单形直接搜索

消息

退出消息

提示

  • fminsearch.只能通过实数最小化,即,x必须只包括实数和fx)必须仅返回实数。当x有复杂的值,分裂吗x分为实部和虚部。

  • 使用fminsearch.解决不可微问题或有不连续的问题,特别是在解附近没有不连续的情况下。

  • 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等人的Simplex搜索方法。[1].这是一种直接搜索方法,不使用数值或解析梯度Fminunc..文中详细描述了该算法fminsearch算法.该算法不能保证收敛到局部最小值。

选择功能

应用程序

优化Live Editor任务提供可视界面fminsearch.

参考

J. C. Lagarias, J. C. reed, M. H. Wright和P. E. Wright。低维中Nelder-Mead单纯形法的收敛性SIAM优化杂志.第9卷第1期,1998年,112-147页。

扩展能力

之前介绍过的R2006a