正式

查找无约束多变量函数的最小值

描述

非线性规划求解器。

找到最低指明的问题

f型 ( )

哪里f型()是返回标函数。

是矢量或矩阵;看到矩阵参数.

例子

=fminnc(开玩笑,X0)从点开始X0并试图找到一个局部最小值中所述功能的开玩笑. 重点X0可以是标量,矢量或矩阵。

注意

传递额外参数说明如何在必要时将额外参数传递给目标函数和非线性约束函数。

正式适用于无约束的非线性问题。如果您的问题有限制,通常使用fmincon. 见优化决策表.

例子

=fminnc(开玩笑,X0,选项)最小化开玩笑使用中指定的优化选项选项. 使用最佳选项设置这些选项。

例子

=fminnc(问题)查找的最小值问题,其中问题是在输入参数. 创建问题结构通过从优化应用程序导出的一个问题,如在导出您的工作.

例子

[,未来值] = fminunc(___),对于任何语法,返回目标函数的值开玩笑在解决方案.

例子

[,未来值,退出标志,产量] = fminunc(___)另外返回一个值退出标志它描述了正式,以及一个结构产量关于优化过程的信息。

[,未来值,退出标志,产量,毕业生,粗麻布] = fminunc(___)额外回报:

  • 毕业生-坡度开玩笑在解决方案.

  • 粗麻布-黑森开玩笑在解决方案. 见法明尼黑森.

例子

全部收缩

最小化函数 f型 ( ) = 1个 2个 + 2个 1个 2个 + 2个 2个 - 4个 1个 + 5个 2个 .

为此,请编写一个匿名函数开玩笑计算目标。

乐趣=@(x)3*x(1)^2+2*x(1)*x(2)+x(2)^2-4*x(1)+5*x(2);

呼叫正式找到开玩笑近的[1,1].

X0 = [1,1];[X,FVAL] = fminunc(乐趣,X0)
找到本地最小值。因为梯度的大小小于最优性公差的值,所以优化完成。
X =1×2个2.2500 -4.7500
fval=-16.3750

正式当您提供的衍生品可以更快,更可靠。

写的目标函数,返回梯度以及函数值。使用条件化形式描述包括梯度和黑森. 目标函数是Rosenbrock函数,

f型 ( ) = 1个 0个 0个 ( 2个 - 1个 2个 ) 2个 + ( 1个 - 1个 ) 2个 ,

具有梯度

f型 ( ) = [ - 4个 0个 0个 ( 2个 - 1个 2个 ) 1个 - 2个 ( 1个 - 1个 ) 2个 0个 0个 ( 2个 - 1个 2个 ) ] .

带有梯度的目标函数的代码出现在本例结束.

创建选项以使用目标函数的渐变。另外,将算法设置为“信任区”.

选项= optimoptions('fminunc','算法',“信任区”,'SpecifyObjectiveGradient',正确);

将初始点设置为[-1,2个]. 然后打电话正式.

x0=[-1,2];乐趣=@rosenbrockwithgrad;x=fminunc(乐趣,x0,选项)
找到本地最小值。因为梯度的大小小于最优性公差的值,所以优化完成。
X =1×2个1.0000 1.0000

下面的代码创建rosenbrockwithgrad功能,其中包括梯度作为第二输出。

功能[f,g]=罗森布罗克维斯格拉德(x)%计算目标ff=100*(x(2)-x(1)^2)^2+(1-x(1))^2;如果鼻孔>1%所需坡度g=[-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200*(x(2)-x(1)^2];结束结束

解决与中相同的问题供给梯度使用问题结构而不是单独的参数。

写的目标函数,返回梯度以及函数值。使用条件化形式描述包括梯度和黑森. 目标函数是Rosenbrock函数,

f型 ( ) = 1个 0个 0个 ( 2个 - 1个 2个 ) 2个 + ( 1个 - 1个 ) 2个 ,

具有梯度

f型 ( ) = [ - 4个 0个 0个 ( 2个 - 1个 2个 ) 1个 - 2个 ( 1个 - 1个 ) 2个 0个 0个 ( 2个 - 1个 2个 ) ] .

带有梯度的目标函数的代码出现在本例结束.

创建选项以使用目标函数的渐变。另外,将算法设置为“信任区”.

选项= optimoptions('fminunc','算法',“信任区”,'SpecifyObjectiveGradient',正确);

创建一个结构的问题包括初始点x0=[-1,2]. 有关此结构中的必需字段,请参见问题.

problem.options =选项;problem.x0 = [-1,2]。problem.objective = @rosenbrockwithgrad;problem.solver ='fminunc';

解决这个问题。

x=fminunc(问题)
找到本地最小值。因为梯度的大小小于最优性公差的值,所以优化完成。
X =1×2个1.0000 1.0000

下面的代码创建rosenbrockwithgrad功能,其中包括梯度作为第二输出。

功能[f,g]=罗森布罗克维斯格拉德(x)%计算目标ff=100*(x(2)-x(1)^2)^2+(1-x(1))^2;如果鼻孔>1%所需坡度G = [-400 *(X(2)-X(1)^ 2)* X(1)-2 *(1-X(1));200 *(X(2)-X(1)^ 2)];结束结束

求非线性函数最小值的位置和最小值。目标函数是

f型 ( ) = ( 1个 ) e类 - 2个 2个 + 2个 2个 / 2个 0个 .

乐趣=@(x)x(1)*经验(-x(1)^2+x(2)^2))+(x(1)^2+x(2)^2)/20;

找到极小起点的位置和目标函数值在x0=[1,2].

x0=[1,2];[x,fval]=fminunc(有趣,x0)
找到本地最小值。因为梯度的大小小于最优性公差的值,所以优化完成。
X =1×2个-0.6691 0.0000
FVAL = -0.4052

选择正式检查解决方案过程的选项和输出。

设置选项来获得迭代显示和使用“拟牛顿”算法。

options=optimoptions(@fminunc,'显示','iter','算法',“拟牛顿”);

目标函数是

f型 ( ) = ( 1个 ) e类 - 2个 2个 + 2个 2个 / 2个 0个 .

乐趣=@(x)x(1)*经验(-x(1)^2+x(2)^2))+(x(1)^2+x(2)^2)/20;

开始最小化x0=[1,2],并获取使您能够检查解决方案质量和过程的输出。

x0=[1,2];[x,fval,exitflag,output]=fminunc(fun,x0,选项)
是的。因为梯度的大小小于最优性公差的值,所以优化完成。
X =1×2个-0.6691 0.0000
FVAL = -0.4052
退出标志=1
输出=带字段的结构:迭代:9 funcCount:42步长:2.9343e-04 lssteplength:1个firstorderopt:7.9721e-07的算法: '准牛顿' 消息: '...'
  • 出口标志1个表明该解是局部最优解。

  • 这个产量结构显示迭代次数、函数计算次数和其他信息。

  • 迭代显示还显示迭代次数和函数计算。

输入参数

全部收缩

功能,以尽量减少,指定为功能手柄或函数的名称。开玩笑是接受载体或阵列的功能然后返回一个标量f型,目标函数在.

指定开玩笑作为文件的函数句柄:

X = fminunc(@ myfun,X0)

哪里myfun是一个MATLAB®功能如

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

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

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

如果你能计算出开玩笑这个特定目标半径选项设置为真正,如通过设置

options=optimoptions('fminnc','SpecifyObjectiveGradient',true)
然后开玩笑必须返回梯度向量G(X)在第二个输出参数中。

如果你也能计算Hessian矩阵这个HessianFcn选项设置为'目的'通过选项= optimoptions( 'fminunc', 'HessianFcn', '目标')这个算法选项设置为“信任区”,开玩笑必须返回黑森州值H(x)的,对称矩阵,在第三个输出参数中。开玩笑可以给稀疏的Hessian。见fminunc信赖域或fmincon信赖域的Hessian反射算法详细情况。

这个信任区算法允许您提供Hessian乘法函数。该函数给出了一个Hessian时间向量积的结果,而不需要直接计算Hessian时间向量积。这样可以节省内存。见黑森州乘法函数.

例:乐趣=@(x)sin(x(1))*cos(x(2))

数据类型:烧焦|功能手柄|一串

初始点,指定为实向量或实数组。解算器使用X0以及X0确定这些变量的数量和大小开玩笑接受。

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

数据类型:双重的

优化选项,指定的输出最佳选项或者像这样的结构optimset返回。

一些选项适用于所有的算法,以及其他相关的特定算法。见优化选项参考以获取详细信息。

一些选项在最佳选项显示。这些选项出现在以下表中斜体字。有关详细信息,请参阅查看选项.

所有算法

算法

选择正式算法。选择是“拟牛顿”(违约)或“信任区”.

这个“信任区”算法要求您提供渐变(请参见开玩笑),否则正式使用“拟牛顿”算法。有关选择算法的信息,请参见选择算法.

检查梯度

比较用户提供的衍生物(客观梯度)有限差分衍生物。选择是(违约)或真正.

为了optimset,名称是衍生技术价值观是'打开'要么“关”. 见当前和旧式选项名表.

诊断

显示有关要最小化或解决的功能的诊断信息。选择是“关”(违约)或'打开'.

DiffMaxChange

有限差分梯度变量的最大变化(正标量)。默认值是天道酬勤.

扩散变化

在对有限差分梯度变量最小变化(正标量)。默认值是0个.

显示

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

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

  • 'iter'显示输出在每次迭代,并给出了默认退出消息。

  • 'iter详细'在每次迭代中显示输出,并给出了技术退出消息。

  • '通知'仅当函数不收敛时显示输出,并给出默认退出消息。

  • '通知详细'仅当函数不收敛时显示输出,并给出技术退出消息。

  • '最后'(默认)仅显示最终输出,并给出默认退出消息。

  • “最终的详细的”只显示最终的输出,并给出了技术出口的消息。

限定的不同步长

有限差分的标量或矢量步长因子。当你设置限定的不同步长到一个向量中,前向有限差三角洲

delta=v.*符号'(x).*最大值(abs(x),典型值x);

哪里符号′(x)=符号(x)除了符号′(0)=1. 中心有限差分是

增量= V *最大(ABS(x)中,TypicalX)。

纯量限定的不同步长扩展到一个载体中。默认值是sqrt(每股收益)用于前向有限的差异,并每股收益(1/3)对于中心有限差分。

信赖域算法使用限定的不同步长只有当检查梯度设定为真正.

为了optimset,名称是芬德弗雷尔斯泰普. 见当前和旧式选项名表.

限定的不同类型

用于估计梯度的有限差分是'前进'(缺省值),或者'中心'(居中)。'中心'需要两倍多的功能评价,而是应该更准确。信赖域算法使用限定的不同类型只有当检查梯度设定为真正.

为了optimset,名称是FinDiffType. 见当前和旧式选项名表.

风趣

检查目标函数值是否有效。默认设置,“关”,不执行检查。这个'打开'当目标函数返回复杂的,天道酬勤, 要么.

最大功能评估

允许的最大函数求值数,正整数。默认值为100*变量数量. 见公差和停止标准迭代和函数计数.

为了optimset,名称是MaxFunEvals. 见当前和旧式选项名表.

最大迭代次数

允许的最大迭代次数,正整数。默认值为400个. 见公差和停止标准迭代和函数计数.

为了optimset,名称是MAXITER. 见当前和旧式选项名表.

OptimalityTolerance

第一阶最优终止公差(正标)。默认值是1E-6. 见一阶最优性措施.

为了optimset,名称是TolFun. 见当前和旧式选项名表.

OutputFcn

指定优化函数在每次迭代时调用的一个或多个用户定义函数。传递函数句柄或函数句柄的单元格数组。默认值为“无”([]). 见输出函数语法.

图Fcn

在算法执行时绘制各种进度度量;从预定义的绘图中选择或编写自己的绘图。传递内置绘图函数名、函数句柄或内置绘图函数名或函数句柄的单元格数组。对于自定义绘图函数,传递函数句柄。默认值为“无”([]):

  • 'optimplotx'绘制当前点。

  • 'optimplotfunccount'绘制功能计数。

  • 'optimplotfval'绘制函数值。

  • 'optimplotstepsize'绘制步长。

  • 'optimplotfirstorderopt'绘制一阶最优性度量。

自定义绘图函数使用与输出函数相同的语法。见输出函数输出函数语法.

为了optimset,名称是绘图Fcns. 见当前和旧式选项名表.

特定目标半径

梯度由用户定义的目标函数。见的说明开玩笑来看看如何在定义渐变开玩笑. 设置为真正拥有正式使用用户定义的目标函数梯度。违约原因正式用有限差分估计梯度。你必须提供梯度,并设置特定目标半径真正,以使用信任区域算法。准牛顿算法不需要此选项。

为了optimset,名称是格拉多布价值观是'打开'要么“关”. 见当前和旧式选项名表.

步进公差

关于终止宽容,正面标。默认值是1E-6. 见公差和停止标准.

为了optimset,名称是TolX. 见当前和旧式选项名表.

TypicalX

典型值。元素的数量TypicalX等于X0,起点。默认值为一(变量数量,1).正式使用TypicalX用于缩放梯度估计的有限差分。

这个信任区算法使用TypicalX只为检查梯度选择。

信任区算法
功能公差

函数值的终止公差,正标量。默认值是1E-6. 见公差和停止标准.

为了optimset,名称是TolFun. 见当前和旧式选项名表.

HessianFcn

如果设置为[](违约),正式近似于使用有限差分的Hessian。

如果设置为'目的',正式使用用户定义的Hessian作为目标函数。Hessian是目标函数的第三个输出(参见开玩笑)。

为了optimset,名称是赫斯福森. 见当前和旧式选项名表.

HessianMultiplyFcn公司

Hessian乘法函数,指定为函数句柄。对于大规模结构问题,此函数计算Hessian矩阵积H*Y公司实际上不形成小时.该函数的形式为

W=hmfun(兴福,Y)

哪里辛佛包含用于计算的矩阵H*Y公司.

第一个参数与目标函数返回的第三个参数相同开玩笑,例如

[f,g,Hinfo]=乐趣(x)

是的矩阵的行数与问题中的维数相同。矩阵宽=H*Y,尽管小时未明确形成。正式使用辛佛计算预条件。有关如何进行任何额外的参数提供值的信息嗯哼需要,看传递额外参数.

注意

使用HessianMultiplyFcn公司选择权,HessianFcn必须设置为[].

例如,请参见稠密结构Hessian线性等式的极小化.

为了optimset,名称是黑斯穆尔特. 见当前和旧式选项名表.

海雀

有限差分Hessian的稀疏模式。套HessPattern(i,j)=1当你可以拥有∂2个开玩笑/∂X(ⅰ)X(j)的≠0。否则,组HessPattern(i,j)=0.

采用海雀当不方便计算Hessian矩阵时小时开玩笑,但您可以确定(例如,通过检查)何时的梯度的个分量开玩笑取决于X(j)的.正式可以近似小时通过稀疏有限差分(梯度),如果您提供稀疏结构小时作为海雀. 换句话说,提供非零的位置。

当结构是未知的,不设置海雀. 默认行为如下海雀是一个密集的矩阵。那么正式在每次迭代中计算完全的有限差分近似值。这种计算对于大问题来说是昂贵的,因此通常最好确定稀疏结构。

MaxPCGIter

最大预处理共轭梯度(PCG)迭代次数,正标量。默认值是最大值(1,楼层(变量数/2)). 有关详细信息,请参见信赖域算法.

PrecondBandWidth

PCG预条件器的上带宽,非负整数。默认情况下,正式使用对角线预处理(0上带宽)。对于一些问题,增加带宽减少PCG迭代次数。设置PrecondBandWidth天道酬勤使用直接因子分解(Cholesky)而不是共轭梯度(CG)。直接因子分解在计算上比CG更为昂贵,但却能向求解方向迈出更高质量的一步。

SubproblemAlgorithm

确定如何计算迭代步骤。违约,'重心',比“因式分解”. 见fminunc信赖域算法.

托尔普克

在PCG迭代,正面标终止宽容。默认值是0.1分.

拟牛顿算法
HessUpdate

对于选择在拟牛顿算法的搜索方向的方法。选项包括:

ObjectiveLimit

作为标量的公差(停止准则)。如果迭代的目标函数值小于或等于ObjectiveLimit,迭代停止,因为这个问题大概是无界的。默认值是-1e20级.

UseParallel

什么时候真正,正式估计梯度并联。通过设置为默认禁用,.信任区需要的目标,所以梯度UseParallel不适用。见并行计算.

例:options=optimoptions('fminnc','SpecifyObjectiveGradient',true)

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

字段名 进入

目的

目标函数

X0

起始点

解算器

'fminunc'

选项

使用创建的选项最佳选项

获得问题结构是从优化应用程序导出问题。

数据类型:结构

输出参数

全部收缩

解,返回为实向量或实数组。大小大小相同X0. 通常情况下,是当退出标志是积极的。有关解决方案的质量信息,请参阅当解算器成功时.

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

原因正式已停止,返回为整数。

1个

梯度的大小比小OptimalityTolerance公差。

2个

在某一方面的变化小于步进公差公差。

目标函数值的变化小于功能公差公差。

5个

在目标函数预测减小为小于功能公差公差。

0个

超过迭代次数最大迭代次数或超出功能评估的数量最大功能评估.

-1

算法被输出函数终止。

-3

当前迭代的目标函数如下ObjectiveLimit.

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

迭代

迭代次数

函数计数

功能评估次数

firstorderopt公司

一阶最优性测度

算法

采用优化算法

cgiterations

PCG迭代总数(“信任区”仅限算法)

lssteplength

线搜索步骤相对的大小,以搜寻方向(“拟牛顿”仅限算法)

一步的大小

在最后的位移

消息

退出消息

渐变的解决方案,恢复作为一个真正的载体。毕业生给人的梯度开玩笑在这一点上x(:).

近似Hessian,作为实矩阵返回。为了…的意义粗麻布,请参见黑森产量.

算法

全部收缩

拟牛顿算法

这个拟牛顿算法使用BFGS准牛顿方法具有立方线搜索过程。这种准牛顿方法使用BFGS([一],[五],[八][9])修正Hessian矩阵逼近的公式。您可以选择DFP([四],[六][七])公式,通过设置HessUpdate选择'dfp'(以及算法选择“拟牛顿”). 您可以通过设置HessUpdate'陡坡'(和算法“拟牛顿”),尽管此设置通常效率低下。见fminunc拟牛顿算法.

信赖域算法

这个信任区算法要求您在开玩笑并设置特定目标半径真正使用最佳选项. 该算法是一种子空间信赖域方法,基于[二][三]. 每一次迭代都涉及到用预处理共轭梯度法(PCG)求解大型线性系统的近似解。见fminunc信赖域算法,信赖域方法非线性最小化预处理共轭梯度法.

参考

[1]的Broyden,C. G.“双列最小化算法的一类的收敛性。”数学学报。应用第6卷,1970年,第76-90页。

[2] 科尔曼,T.F.和Y.Li。有界非线性极小化的内部信赖域方法SIAM杂志上优化,1996年第6卷,第418-445页。

[3]科尔曼,T.F。和Y.李。“在反思牛顿方法为大规模非线性最小化符合界收敛。”数学规划,第67卷,第2期,1994年,第189-224页。

[4] Davidon,W. C.“变量为最小度量方法”。A、 E.C.研究和开发报告,安陆59901959年。

[5] 变尺度算法的新方法计算机日志,1970年第13卷,第317-322页。

[6] 实用优化方法〉,第一卷,无约束优化,John Wiley和Sons,1980年。

[7]弗莱彻,R.和M. J. D.鲍威尔。“迅速收敛下降法最小化。”计算机日志卷。6,1963年,第163-168。

[8]戈德法布,D.“A家庭通过变分单元导出变尺度更新的”。计算数学卷。24,1970,第23-26。

[9] Shanno无,D.F。“调理拟牛顿方法函数极小化的”。计算数学,1970年第24卷,第647-656页。

扩展功能

R2006a前推出