文档

fminsearch

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

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

最小值 x f x

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

语法

x0, x = fminsearch(有趣)
x = fminsearch(有趣,x0,选项)
x = fminsearch(问题)
[x, fval] = fminsearch (___
[x, fval exitflag] = fminsearch (___
[x, fval exitflag,输出]= fminsearch (___

描述

例子

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 (___另外返回一个结构输出包含关于优化过程的信息。

例子

全部折叠

最小化Rosenbrock函数,对于许多算法来说,这是一个非常困难的优化问题:

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

设置起始点为x0 = (-1.2, 1)最小化Rosenbrock函数的使用fminsearch

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

设置监视流程的选项为fminsearch试图定位最小值。

设置在每次迭代时绘制目标函数的选项。

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

设目标函数为Rosenbrock函数,

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

设置起始点为x0 = (-1.2, 1)最小化Rosenbrock函数的使用fminsearch

趣味性= @(x)100*(x(2) - x(1)^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 (x0 @objectivefcn1)
X = -0.1696 -0.5086

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

这个函数在点处的最小值为0,.例如,如果,可以通过创建匿名函数将参数包含在目标函数中。

用附加参数作为附加参数创建目标函数。

F = @(x,a)100*(x(2) -x(1)²)²+ (a-x(1))²;

将参数放在您的MATLAB®工作区中。

= 3;

创建一个匿名函数x单独包含参数的工作空间值。

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

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

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

有关在目标函数中使用额外参数的详细信息,请参见参数化功能(MATLAB)。

求出目标函数最小值的位置和值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

检查优化的结果,包括在运行时和完成后。

设置选项以提供迭代显示,这将在求解器运行时提供关于优化的信息。另外,设置一个plot函数,以在求解器运行时显示目标函数值。

选择= optimset (“显示”,“通路”,“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满足使用OPTIONS的终止条件。TolX为1.000000e-04, F(X)满足使用OPTIONS的收敛条件。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)

在哪里myfunMATLAB是一种®等功能

函数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在选项结构中设置或更改这些字段的值。看到优化选择参考的详细信息。

显示

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

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

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

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

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

FunValCheck

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

MaxFunEvals

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

麦克斯特

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

OutputFcn

指定优化函数在每次迭代时调用的一个或多个用户定义函数,可以作为函数句柄,也可以作为函数句柄的单元格数组。默认值是none ([]).看到输出函数

PlotFcns

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

  • @optimplotx绘制当前点。

  • @optimplotfunccount绘制函数计数。

  • @optimplotfval绘制函数值。

有关编写自定义plot函数的信息,请参见绘制函数

TolFun

函数值上的终止公差为正标量。默认值是1的军医.看到公差和停止标准.不像其他的解决者,fminsearch满足时停止这两个TolFun而且TolX

TolX

终止上公差x,一个正标量。默认值为1的军医.看到公差和停止标准.不像其他的解决者,fminsearch满足时停止这两个TolFun而且TolX

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

数据类型:结构体

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

字段名 条目

客观的

目标函数

x0

初始点x

解算器

“fminsearch”

选项

返回的选项结构optimset

最简单的方法是问题结构是从优化应用程序导出问题。

数据类型:结构体

输出参数

全部折叠

解决方案,作为实向量或实数组返回。的大小x的尺寸是一样的吗x0.通常情况下,x本地解决问题是什么时候exitflag是正的。有关解决方案质量的信息,请参见当求解器成功时

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

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

1

函数收敛成一个解x

0

超过的迭代次数选项。麦克斯特或者超出函数求值的次数选项。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等人的单纯形搜索方法。[1].这是一种直接搜索方法,不使用数值或分析梯度在fminunc.文中对算法进行了详细的描述fminsearch算法.该算法不能保证收敛到局部最小值。

参考文献

[1]拉加里亚斯,J. C., J. A.里德斯,M. H.赖特,P. E.赖特。"低维Nelder-Mead单纯形法的收敛性"SIAM优化杂志。1998年第1期第9卷第112-147页。

扩展功能

另请参阅

|||

主题

之前介绍过的R2006a

这个话题有帮助吗?