fminsearch
用无导数法求无约束多元函数的最小值
语法
描述
非线性规划求解器。搜索指定的问题的最小值
f(x)是返回标量的函数,并且x是一个向量或矩阵。
例子
最小化Rosenbrock函数
最小化Rosenbrock函数,对于许多算法来说,这是一个非常困难的优化问题:
函数在该点处被最小化X = [1,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(fun,x0)
x =1×21.0000 - 1.0000
监控优化过程
设置监控流程的选项为fminsearch
试图定位最小值。
设置选项以在每次迭代中绘制目标函数。
选项= optimset(“PlotFcns”, @optimplotfval);
设目标函数为Rosenbrock函数,
函数在该点处被最小化X = [1,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(fun,x0,options)
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(@ objecvefcn1,x0)
X = -0.1696 -0.5086
使用额外参数最小化
有时候目标函数有额外的参数。这些参数不是要优化的变量,它们是优化过程中的固定值。例如,假设您有一个参数一个
在rosenbrock型函数中
该函数在点处的最小值为0 , 。例如, ,可以通过创建匿名函数将参数包含在目标函数中。
创建目标函数,将其附加参数作为附加参数。
F = @(x,a)100*(x(2) -x(1)²)²+ (a-x(1))²;
将参数放在MATLAB®工作区中。
A = 3;
的匿名函数x
单独包含参数的工作区值。
Fun = @(x)f(x,a);
从……开始解决问题X0 = [-1,1.9]
。
X0 = [-1,1.9];X = fminsearch(fun,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(fun,x0)
x =1×31.5359 2.5645 3.5932
Fval = -5.9565e+04
检查优化过程
检查优化的结果,包括在运行时和完成后。
设置选项以提供迭代显示,这将在求解器运行时提供有关优化的信息。此外,设置一个绘图函数来显示求解器运行时的目标函数值。
选项= 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];Fun = @objectivefcn1;
获得所有求解器输出。在求解器完成后,使用这些输出检查结果。
[x,fval,exitflag,output] = fminsearch(fun,x0,options)
迭代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的终止条件。tox为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:...'
的价值exitflag
是1
,这意味着fminsearch
可能收敛到局部最小值。
的输出
结构显示迭代次数。迭代显示和图表也显示了这些信息。的输出
结构还显示了迭代显示所显示的函数计算的数量,但所选的绘图函数没有。
输入参数
有趣的
- - - - - -函数最小化
函数处理|函数名
函数来最小化,指定为函数句柄或函数名。有趣的
函数接受向量或数组吗x
并返回一个实标量f
(目标函数值为x
).
fminsearch
通过x
目标函数的形状x0
论点。例如,如果x0
是一个5乘3的数组吗fminsearch
通过x
来有趣的
作为一个5 × 3的数组。
指定有趣的
作为文件的函数句柄:
X = fminsearch(@myfun,x0)
在哪里myfun
是一个MATLAB®函数如
函数F = myfun(x) F =...计算x处的函数值
你也可以指定有趣的
作为匿名函数的函数句柄:
X = fminsearch(@(X)norm(X)^2,x0);
例子:Fun = @(x)-x*exp(-3*x)
数据类型:字符
|function_handle
|字符串
x0
- - - - - -初始点
真正的向量|真正的数组
选项
- - - - - -优化选项
结构,例如optimset
返回
优化选项,指定为结构,如optimset
的回报。你可以使用optimset
在选项结构中设置或更改这些字段的值。看到设置优化选项有关详细信息。
|
显示水平(见优化求解迭代显示):
|
FunValCheck |
检查目标函数值是否有效。 |
|
允许的最大函数求值数,一个正整数。默认为 |
|
允许的最大迭代次数,一个正整数。默认值为 |
OutputFcn |
指定优化函数在每次迭代时调用的一个或多个用户定义函数,可以作为函数句柄,也可以作为函数句柄的单元格数组。默认值为none ( |
|
在算法执行时绘制各种进度度量。从预定义的情节中选择或编写自己的。传递一个函数句柄或函数句柄的单元格数组。默认值为none (
有关编写自定义绘图函数的信息,请参见优化求解器绘图函数。 |
|
函数值上的终止公差为正标量。默认为 |
|
终止公差 |
例子:options = optimset('Display','iter')
数据类型:结构体
问题
- - - - - -问题的结构
结构
输出参数
fval
-求解时的目标函数值
实数
目标函数在解处的值,作为实数返回。一般来说,fval
=有趣的(x)
。
exitflag
- - -原因fminsearch
停止
整数
原因fminsearch
停止,以整数形式返回。
|
函数收敛为解 |
|
超过迭代次数 |
|
算法被输出函数终止。 |
输出
—优化过程信息
结构
关于优化过程的信息,作为一个带字段的结构返回:
迭代 |
迭代次数 |
funcCount |
函数求值的数量 |
算法 |
|
消息 |
退出消息 |
提示
fminsearch
只在实数上取最小值,也就是向量或数组x必须只由实数和f(x)必须只返回实数。当x有复杂的值,分裂x分成实部和虚部。使用
fminsearch
求解不可微问题或有不连续的问题,尤指在解附近没有不连续的情况下
算法
fminsearch
采用Lagarias等人的单纯形搜索方法。[1]。这是一种直接的搜索方法,不使用数值或分析梯度fminunc
(优化工具箱)。文中详细描述了该算法fminsearch算法。该算法不保证收敛到局部最小值。
选择功能
应用程序
的优化活动编辑器任务提供了一个可视化界面fminsearch
。
参考文献
[1]拉加利亚斯,J. C., J. A.里德,M. H.赖特,P. E.赖特。低维中Nelder-Mead单纯形方法的收敛性SIAM优化期刊。卷九,第1期,1998年,第112-147页。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
C/ c++代码生成:
fminsearch
忽略了显示
选项,并且不提供迭代显示或退出消息。要检查溶液质量,请检查出口标志。的输出结构不包括
算法
或消息
字段。fminsearch
忽略了OutputFcn
而且PlotFcns
选项。
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
。
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数。
版本历史
R2006a之前介绍
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。