主要内容gydF4y2Ba

写标量目标函数gydF4y2Ba

函数文件gydF4y2Ba

一个标量目标函数文件接受一个输入gydF4y2BaxgydF4y2Ba,并返回一个实标量输出gydF4y2BafgydF4y2Ba.输入gydF4y2BaxgydF4y2Ba可以是标量,矢量或gydF4y2Ba矩阵gydF4y2Ba.函数文件可以返回更多的输出(参见gydF4y2Ba包括梯度和黑森gydF4y2Ba).gydF4y2Ba

例如,假设您的目标是三个变量的函数,gydF4y2BaxgydF4y2Ba,gydF4y2BaygydF4y2Ba,gydF4y2BazgydF4y2Ba:gydF4y2Ba

fgydF4y2Ba(gydF4y2BaxgydF4y2Ba) = 3 * (gydF4y2BaxgydF4y2Ba- - - - - -gydF4y2BaygydF4y2Ba)gydF4y2Ba4gydF4y2Ba+ 4 * (gydF4y2BaxgydF4y2Ba+gydF4y2BazgydF4y2Ba)gydF4y2Ba2gydF4y2Ba/ (1 +gydF4y2BaxgydF4y2Ba2gydF4y2Ba+gydF4y2BaygydF4y2Ba2gydF4y2Ba+gydF4y2BazgydF4y2Ba2gydF4y2Ba) + cosh (gydF4y2BaxgydF4y2Ba- 1) + tanh(gydF4y2BaygydF4y2Ba+gydF4y2BazgydF4y2Ba).gydF4y2Ba

  1. 将此函数编写为一个接受向量的文件gydF4y2Ba鑫gydF4y2Ba= (gydF4y2BaxgydF4y2Ba;gydF4y2BaygydF4y2Ba;gydF4y2BazgydF4y2Ba]并回报gydF4y2BafgydF4y2Ba:gydF4y2Ba

    函数f = myObjective(鑫)f = 3 *(鑫(1)新(2))^ 4 + 4 *(鑫(1)+鑫(3))^ 2 /(1 +规范(鑫)^ 2)……+ cosh(xin(1)-1) + tanh(xin(2)+xin(3));gydF4y2Ba
  2. 将其保存为名为gydF4y2Bamyobjective.m.gydF4y2Ba放到MATLAB的一个文件夹里gydF4y2Ba®gydF4y2Ba小路。gydF4y2Ba

  3. 检查功能是否正确评估:gydF4y2Ba

    myobjective([1; 2; 3])ans = 9.2666gydF4y2Ba

有关如何包含额外参数的信息,请参见gydF4y2Ba传递额外的参数gydF4y2Ba.有关更复杂的函数文件示例,请参见gydF4y2Ba用梯度和黑森州稀疏模式最小化gydF4y2Ba或gydF4y2Ba带约束和带预处理的最小化gydF4y2Ba.gydF4y2Ba

局部函数和嵌套函数gydF4y2Ba

函数可以存在于其他文件中gydF4y2Ba本地功能gydF4y2Ba或gydF4y2Ba嵌套功能gydF4y2Ba.使用局部函数或嵌套函数可以减少保存的不同文件的数量。使用嵌套函数还可以访问额外的参数,如gydF4y2Ba嵌套函数gydF4y2Ba.gydF4y2Ba

例如,假设您想要最小化gydF4y2Bamyobjective.m.gydF4y2Ba目标函数,描述gydF4y2Ba函数文件gydF4y2Ba,但须符合gydF4y2Baellipseparabola.mgydF4y2Ba描述的约束,gydF4y2Ba非线性约束gydF4y2Ba.而不是写两个文件,gydF4y2Bamyobjective.m.gydF4y2Ba和gydF4y2Baellipseparabola.mgydF4y2Ba,写一个包含两个函数的文件作为局部函数:gydF4y2Ba

功能[x fval] = callobjconstr(x0,选项)%使用本地函数只有一个文件,如果nargin <2选项= Optimoptions('Fmincon','算法','内部点');结束[x fval] = fmincon(@ myobjective,x0,[],[],[],[],[],[],... ellipseparabola,选项);功能f = myobjective(xin)f = 3 *(xin(1)-xin(2))^ 4 + 4 *(xin(1)+ xin(3))^ 2 /(1 + sum(xin。^ 2))...... + Cosh(Xin(1)-1)+ TanH(Xin(2)+ Xin(3));功能[c,ceq] =椭圆eptpolabola(x)c(1)=(x(1)^ 2)/ 9 +(x(2)^ 2)/ 4  -  1;C(2)= x(1)^ 2  -  x(2) -  1;CEQ = [];gydF4y2Ba

从点开始解决约束的最小化gydF4y2Ba(1, 1, 1)gydF4y2Ba:gydF4y2Ba

[x fval] = callobjconstr(syne(3,1))局部最小,以满足约束。优化完成,因为目标函数在可行的方向上没有减小,以在函数公差的默认值内,并且对约束公差的默认值满足约束。X = 1.1835 0.8345 -1.6439 FVAL = 0.5383gydF4y2Ba

匿名函数的目标gydF4y2Ba

使用匿名函数来编写简单的客观函数。有关匿名功能的更多信息,请参阅gydF4y2Ba什么是匿名函数?gydF4y2Ba.gydF4y2BaRosenbrock的函数非常简单,可以写成匿名函数:gydF4y2Ba

anonrosen = @ (x) (100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2);gydF4y2Ba
检查gydF4y2Ba厌吻gydF4y2Ba正确评估gydF4y2Ba[-1 2]gydF4y2Ba:gydF4y2Ba
Anonrosen ([-1 2]) ans = 104gydF4y2Ba
最小化gydF4y2Ba厌吻gydF4y2Ba与gydF4y2BafminuncgydF4y2Ba产生以下结果:gydF4y2Ba
选择= optimoptions (@fminunc、“算法”、“拟牛顿”);[x fval] = fminunc(anonrosen,[-1;2],options)本地最小值。优化完成,因为梯度的大小小于默认值的功能公差。X = 1.0000 fval = 1.2266e-10gydF4y2Ba

包括梯度和黑森gydF4y2Ba

为求解器提供导数gydF4y2Ba

为gydF4y2BafmincongydF4y2Ba和gydF4y2BafminuncgydF4y2Ba,你可以在目标函数中包含梯度。通常,解算器更健壮,如果包含梯度,速度会稍微快一些。看到gydF4y2Ba加入衍生品的好处gydF4y2Ba.要包括二阶导数(Hessians),请参见gydF4y2Ba包括麻布gydF4y2Ba.gydF4y2Ba

下表显示了哪些算法可以使用梯度和Hessians。gydF4y2Ba

求解器gydF4y2Ba 算法gydF4y2Ba 梯度gydF4y2Ba 黑森西gydF4y2Ba
fmincongydF4y2Ba 有效集gydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
内部点gydF4y2Ba 可选gydF4y2Ba 可选(见gydF4y2BaHessian for fmincon内点算法gydF4y2Ba)gydF4y2Ba
sqpgydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
trust-region-reflectivegydF4y2Ba 必需的gydF4y2Ba 可选(见gydF4y2BaHessian用于fminunc trust-region或fmincon trust-region- reflection算法gydF4y2Ba)gydF4y2Ba
fminuncgydF4y2Ba 拟牛顿gydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
信赖域gydF4y2Ba 必需的gydF4y2Ba 可选(见gydF4y2BaHessian用于fminunc trust-region或fmincon trust-region- reflection算法gydF4y2Ba)gydF4y2Ba

如何包括渐变gydF4y2Ba

  1. 编写代码返回:gydF4y2Ba

    • 目标函数(标量)作为第一个输出gydF4y2Ba

    • 梯度(矢量)作为第二个输出gydF4y2Ba

  2. 设定gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba使用gydF4y2BaoptimoptionsgydF4y2Ba.如果合适,还设置gydF4y2BaSpecifyConstraintGradientgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

  3. 另外,检查梯度函数是否匹配有限差分近似。看到gydF4y2Ba检验梯度或雅可比矩阵的有效性gydF4y2Ba.gydF4y2Ba

提示gydF4y2Ba

为了获得最大的灵活性,编写gydF4y2Ba条件化gydF4y2Ba代码。条件化意味着函数输出的数量可以变化,如下面的示例所示。对象的值不会导致条件化代码出错gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba选择。非条件化代码要求您适当地设置选项。gydF4y2Ba

例如,考虑gydF4y2Barosenbrock的功能gydF4y2Ba

fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba One hundred.gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba −gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba −gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 2gydF4y2Ba ,gydF4y2Ba

用什么来描述和描绘gydF4y2Ba解决一个约束非线性问题,基于求解器gydF4y2Ba.的梯度gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)gydF4y2Ba是gydF4y2Ba

∇gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba [gydF4y2Ba −gydF4y2Ba 400gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba −gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba −gydF4y2Ba 2gydF4y2Ba (gydF4y2Ba 1gydF4y2Ba −gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba )gydF4y2Ba 200gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba −gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba ]gydF4y2Ba ,gydF4y2Ba

rosentwogydF4y2Ba是一个条件化函数,返回求解器需要的任何值:gydF4y2Ba

计算目标f f = 100*(x(2) -x(1) ^2)^2 + (1-x(1))^2;如果nargout > 1%梯度需要g = (-400 * (x (2) - x (1) ^ 2) * x (1) 2 * (1 - x (1));200 * (x (2) - x (1) ^ 2)];结束gydF4y2Ba

nargoutgydF4y2Ba检查调用函数指定的参数的数量。看到gydF4y2Ba查找函数参数的数量gydF4y2Ba.gydF4y2Ba

的gydF4y2BafminuncgydF4y2Basolver,专为无约束优化,允许您最小化Rosenbrock的功能。告诉gydF4y2BafminuncgydF4y2Ba使用梯度和黑森设置gydF4y2Ba选项gydF4y2Ba:gydF4y2Ba

选择= optimoptions (@fminunc、“算法”、“信赖域”,…“SpecifyObjectiveGradient”,真正的);gydF4y2Ba

运行gydF4y2BafminuncgydF4y2Ba从gydF4y2Ba[1, 2]gydF4y2Ba:gydF4y2Ba

[x fval] = fminunc(@rosentwo,[-1;2],options)本地最小值。优化完成,因为梯度的大小小于默认值的功能公差。fval = 1.9886e-17gydF4y2Ba

如果您拥有Symbolic Math Toolbox™许可,则可以自动计算梯度和Hessians,如中所述gydF4y2Ba计算梯度和黑森使用符号数学工具箱™gydF4y2Ba.gydF4y2Ba

包括麻布gydF4y2Ba

您可以包含第二个衍生品gydF4y2BafmincongydF4y2Ba“trust-region-reflective”gydF4y2Ba和gydF4y2Ba'内点'gydF4y2Ba算法,和与gydF4y2BafminuncgydF4y2Ba“信赖域”gydF4y2Ba算法。有几种方法可以包含Hessian信息,这取决于信息的类型和算法。gydF4y2Ba

您还必须包含渐变(设置gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba如果适用,gydF4y2BaSpecifyConstraintGradientgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba)为了包括Hessians。gydF4y2Ba

海赛的gydF4y2BafminuncgydF4y2Ba信赖域或gydF4y2BafmincongydF4y2Batrust-region-reflective算法。gydF4y2Ba这些算法要么没有约束,要么只有界约束或线性等式约束。因此,Hessian是目标函数的二阶导数矩阵。gydF4y2Ba

将Hessian矩阵作为目标函数的第三个输出。例如,黑森gydF4y2BaHgydF4y2Ba(gydF4y2BaxgydF4y2Ba)gydF4y2BaRosenbrock的功能是(见gydF4y2Ba如何包括渐变gydF4y2Ba)gydF4y2Ba

HgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba [gydF4y2Ba 1200gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba −gydF4y2Ba 400gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba −gydF4y2Ba 400gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba −gydF4y2Ba 400gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 200gydF4y2Ba ]gydF4y2Ba .gydF4y2Ba

在目标中包括这个黑森州:gydF4y2Ba

函数gydF4y2Ba[f, g, H] = rosenboth(x)gydF4y2Ba%计算目标fgydF4y2BaF = 100*(x(2) -x(1)²)²+ (1-x(1))²;gydF4y2Ba如果gydF4y2BaNargout> 1gydF4y2Ba%梯度要求gydF4y2Bag = [-400 *(x(2)-x(1)^ 2)* x(1)-2 *(1-x(1));200 *(x(2)-x(1)^ 2)];gydF4y2Ba如果gydF4y2BaNargout> 2gydF4y2Ba%黑森所需gydF4y2BaH = [1200*x(1)^2-400*x(2)+2, -400*x(1);-400 * x (1), 200);gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

集gydF4y2BaHessianFcngydF4y2Ba来gydF4y2Ba'客观的'gydF4y2Ba.例如,gydF4y2Ba

选项= Optimoptions(gydF4y2Ba“fminunc”gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba“信赖域”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba'specifyobjectivegrient'gydF4y2Ba,真的,gydF4y2Ba“HessianFcn”gydF4y2Ba,gydF4y2Ba'客观的'gydF4y2Ba);gydF4y2Ba

海赛的gydF4y2BafmincongydF4y2Ba内部点算法gydF4y2Ba.gydF4y2Ba黑森量是拉格朗日量的黑森量gydF4y2BalgydF4y2Ba(gydF4y2BaxgydF4y2Ba,gydF4y2Baλ.gydF4y2Ba)是gydF4y2Ba

lgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba λ.gydF4y2Ba )gydF4y2Ba =gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ∑gydF4y2Ba λ.gydF4y2Ba ggydF4y2Ba ,gydF4y2Ba 我gydF4y2Ba ggydF4y2Ba 我gydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ∑gydF4y2Ba λ.gydF4y2Ba hgydF4y2Ba ,gydF4y2Ba 我gydF4y2Ba hgydF4y2Ba 我gydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba .gydF4y2Ba

ggydF4y2Ba和gydF4y2BahgydF4y2Ba向量函数是否分别代表所有的不等式和等式约束(即有界约束、线性约束和非线性约束),所以最小化问题是gydF4y2Ba

最小值gydF4y2Ba xgydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba 受gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba ≤gydF4y2Ba 0gydF4y2Ba ,gydF4y2Ba hgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba 0.gydF4y2Ba

有关详细信息,请参见gydF4y2Ba约束最优性理论gydF4y2Ba.拉格朗日的黑森州是gydF4y2Ba

∇gydF4y2Ba xgydF4y2Ba xgydF4y2Ba 2gydF4y2Ba lgydF4y2Ba (gydF4y2Ba xgydF4y2Ba ,gydF4y2Ba λ.gydF4y2Ba )gydF4y2Ba =gydF4y2Ba ∇gydF4y2Ba 2gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ∑gydF4y2Ba λ.gydF4y2Ba ggydF4y2Ba ,gydF4y2Ba 我gydF4y2Ba ∇gydF4y2Ba 2gydF4y2Ba ggydF4y2Ba 我gydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba +gydF4y2Ba ∑gydF4y2Ba λ.gydF4y2Ba hgydF4y2Ba ,gydF4y2Ba 我gydF4y2Ba ∇gydF4y2Ba 2gydF4y2Ba hgydF4y2Ba 我gydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba .gydF4y2Ba (1)gydF4y2Ba

要包含Hessian,请使用该语法编写一个函数gydF4y2Ba

黑森= hessianfcn (x,λ)gydF4y2Ba

黑森gydF4y2Ba是一个gydF4y2BangydF4y2Ba-经过-gydF4y2BangydF4y2Ba矩阵,稀疏或稠密,其中gydF4y2BangydF4y2Ba是变量的个数。如果gydF4y2Ba黑森gydF4y2Ba它很大且非零项相对较少,通过表示gydF4y2Ba黑森gydF4y2Ba作为一个稀疏矩阵。gydF4y2BaλgydF4y2Ba是与非线性约束相关的拉格朗日乘子向量的结构:gydF4y2Ba

λ。我neqnonlin lambda.eqnonlin

fmincongydF4y2Ba计算结构gydF4y2BaλgydF4y2Ba并将其传递给你的粗糟的职能。gydF4y2BahessianfcngydF4y2Ba必须计算总和gydF4y2Ba等式1gydF4y2Ba.表明您通过设置这些选项来提供Hessian:gydF4y2Ba

选项= Optimoptions(gydF4y2Ba'粉丝'gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba'内点'gydF4y2Ba,gydF4y2Ba...gydF4y2Ba'specifyobjectivegrient'gydF4y2Ba,真的,gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba...gydF4y2Ba“HessianFcn”gydF4y2Ba, @hessianfcn);gydF4y2Ba

例如,将一个用于Rosenbrock的Hessian函数约束在单元磁盘上gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba 2gydF4y2Ba ≤gydF4y2Ba 1gydF4y2Ba ,注意约束函数gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba 2gydF4y2Ba −gydF4y2Ba 1gydF4y2Ba ≤gydF4y2Ba 0gydF4y2Ba 有梯度和二阶导数矩阵吗gydF4y2Ba

∇gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba [gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba ]gydF4y2Ba HgydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba [gydF4y2Ba 2gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba 2gydF4y2Ba ]gydF4y2Ba .gydF4y2Ba

将Hessian函数写成gydF4y2Ba

函数gydF4y2Ba胡特= hessianfcn (x,λ)gydF4y2Ba客观的%HessiangydF4y2BaH = [1200*x(1)^2-400*x(2)+2, -400*x(1);-400 * x (1), 200);gydF4y2Ba非线性不等式约束的% HessiangydF4y2BaHg = 2 *眼(2);Hout = H + lambda.ineqnonlin*Hg;gydF4y2Ba

保存gydF4y2BahessianfcngydF4y2Ba在你的MATLAB路径上。为了完成这个示例,包含梯度的约束函数为gydF4y2Ba

函数gydF4y2Ba[C,CEQ,GC,GCEQ] = UnitDisk2(x)c = x(1)^ 2 + x(2)^ 2  -  1;CEQ = [];gydF4y2Ba如果gydF4y2BaNargout > 2 gc = [2*x(1);2*x(2)];gceq = [];gydF4y2Ba结束gydF4y2Ba

解决包括梯度和黑森在内的问题。gydF4y2Ba

有趣= @rosenboth;nonlcon = @unitdisk2;x0 = [1, 2];选项= Optimoptions(gydF4y2Ba'粉丝'gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba'内点'gydF4y2Ba,gydF4y2Ba...gydF4y2Ba'specifyobjectivegrient'gydF4y2Ba,真的,gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba...gydF4y2Ba“HessianFcn”gydF4y2Ba, @hessianfcn);[x, fval exitflag,输出]= fmincon (x0有趣, ,[],[],[],[],[],[],@ unitdisk2选项);gydF4y2Ba

有关使用内点Hessian的其他示例,请参见gydF4y2Ba与分析幽灵的粉刺内部点算法gydF4y2Ba和gydF4y2Ba计算梯度和黑森使用符号数学工具箱™gydF4y2Ba.gydF4y2Ba

黑森乘法函数。gydF4y2Ba而不是一个完整的Hessian函数gydF4y2BafmincongydF4y2Ba内部点gydF4y2Ba和gydF4y2Batrust-region-reflectivegydF4y2Ba算法允许您提供一个Hessian乘法函数。该函数给出了一个Hessian-乘向量积的结果,而无需直接计算Hessian。这样可以节省内存。的gydF4y2Ba子项产算法gydF4y2Ba选项必须是gydF4y2Ba'cg'gydF4y2Ba对于Hessian乘法函数来工作;这是gydF4y2Batrust-region-reflectivegydF4y2Ba违约。gydF4y2Ba

两种算法的语法不同。gydF4y2Ba

  • 为了gydF4y2Ba内部点gydF4y2Ba算法,语法是gydF4y2Ba

    λW = HessMultFcn (x, v);gydF4y2Ba

    结果gydF4y2BaWgydF4y2Ba应该是产品gydF4y2BaH * V.gydF4y2Ba, 在哪里gydF4y2BaHgydF4y2Ba是拉格朗日的黑森州gydF4y2BaxgydF4y2Ba(看gydF4y2Ba等式1gydF4y2Ba),gydF4y2BaλgydF4y2Ba拉格朗日乘数是由gydF4y2BafmincongydF4y2Ba),gydF4y2BavgydF4y2Ba是大小矢量吗gydF4y2BangydF4y2Ba1。设置选项如下:gydF4y2Ba

    选项= Optimoptions(gydF4y2Ba'粉丝'gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba'内点'gydF4y2Ba,gydF4y2Ba'specifyobjectivegrient'gydF4y2Ba,真的,gydF4y2Ba...gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba“SubproblemAlgorithm”gydF4y2Ba,gydF4y2Ba'cg'gydF4y2Ba,gydF4y2Ba“HessianMultiplyFcn”gydF4y2Ba, @HessMultFcn);gydF4y2Ba

    供给函数gydF4y2BaHessMultFcngydF4y2Ba,返回一个gydF4y2BangydF4y2Ba1的向量,gydF4y2BangydF4y2Ba维数是多少gydF4y2BaxgydF4y2Ba.的gydF4y2Ba黑森州Multiplyfcn.gydF4y2Ba选项,使您可以传递的结果乘以Hessian与向量,而不计算Hessian。gydF4y2Ba

  • 的gydF4y2Batrust-region-reflectivegydF4y2Ba算法不涉及gydF4y2BaλgydF4y2Ba:gydF4y2Ba

    w = hessmultfcn(h,v);gydF4y2Ba

    结果gydF4y2BaW = H * vgydF4y2Ba.gydF4y2BafmincongydF4y2Ba通过gydF4y2BaHgydF4y2Ba作为目标函数的第三个输出中返回的值(参见gydF4y2BaHessian用于fminunc trust-region或fmincon trust-region- reflection算法gydF4y2Ba).gydF4y2BafmincongydF4y2Ba也通过gydF4y2BavgydF4y2Ba,一个向量或矩阵gydF4y2BangydF4y2Ba行。中的列数gydF4y2BavgydF4y2Ba可以变化,所以写gydF4y2BaHessMultFcngydF4y2Ba接受任意数量的列。gydF4y2BaHgydF4y2Ba不一定是黑森人;相反,它可以是任何可以让你计算的东西gydF4y2BaW = H * vgydF4y2Ba.gydF4y2Ba

    设置选项如下:gydF4y2Ba

    选项= Optimoptions(gydF4y2Ba'粉丝'gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba“trust-region-reflective”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba'specifyobjectivegrient'gydF4y2Ba,真的,gydF4y2Ba“HessianMultiplyFcn”gydF4y2Ba, @HessMultFcn);gydF4y2Ba

    例如使用Hessian乘法函数gydF4y2Batrust-region-reflectivegydF4y2Ba算法,参见gydF4y2Ba用稠密结构黑森,线性等式最小化gydF4y2Ba.gydF4y2Ba

加入衍生品的好处gydF4y2Ba

如果您不提供渐变,请通过有限差异来估算梯度。如果您提供渐变,您的求解器不需要执行此有限差分估计,因此可以节省时间并更准确,尽管复杂衍生物的有限差异估计可能更快。此外,求解器使用近似黑森州,这可能远离真正的黑森州。提供黑森州可以在更少的迭代中产生一个解决方案。例如,看到结束gydF4y2Ba计算梯度和黑森使用符号数学工具箱™gydF4y2Ba.gydF4y2Ba

对于受限制的问题,提供梯度具有另一个优点。求解器可以达到一个点gydF4y2BaxgydF4y2Ba这样gydF4y2BaxgydF4y2Ba是可行的,但是,为此gydF4y2BaxgydF4y2Ba,有限差异gydF4y2BaxgydF4y2Ba总是引出一个不可行的点。进一步假设目标函数在不可行的点处返回一个复输出,gydF4y2BaINF.gydF4y2Ba,gydF4y2Ba南gydF4y2Ba或错误。在这种情况下,求解器可以过早地失败或停止。提供梯度允许求解器进行。要获得此福利,您还可能需要包含非线性约束函数的渐变,并设置gydF4y2BaSpecifyConstraintGradientgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba.看到gydF4y2Ba非线性约束gydF4y2Ba.gydF4y2Ba

内点选择Input Hessian ApproximationgydF4y2BafmincongydF4y2Ba

的gydF4y2BafmincongydF4y2Ba内部点gydF4y2Ba算法有许多选择输入Hessian近似的选项。有关语法详细信息,请参阅gydF4y2BaHessian作为输入gydF4y2Ba.以下是选项以及其相对特征的估计。gydF4y2Ba

黑森西gydF4y2Ba 相对内存使用gydF4y2Ba 相对效率gydF4y2Ba
“蓄热”gydF4y2Ba(默认)gydF4y2Ba 高(针对大问题)gydF4y2Ba 高gydF4y2Ba
'lbfgs'gydF4y2Ba 低到中度gydF4y2Ba 缓和gydF4y2Ba
'fin-diff-grads'gydF4y2Ba 低的gydF4y2Ba 缓和gydF4y2Ba
“HessianMultiplyFcn”gydF4y2Ba 低(取决于你的代码)gydF4y2Ba 缓和gydF4y2Ba
“HessianFcn”gydF4y2Ba ?(取决于您的代码)gydF4y2Ba 高(取决于你的代码)gydF4y2Ba

使用默认的gydF4y2Ba“蓄热”gydF4y2Ba海赛,除非你gydF4y2Ba

的原因gydF4y2Ba'lbfgs'gydF4y2Ba只有中等的效率是两倍的。它有相对昂贵的Sherman-Morrison更新。结果迭代步骤可能有些不准确,因为gydF4y2Ba'lbfgs'gydF4y2Ba有限的记忆。gydF4y2Ba

的原因gydF4y2Ba'fin-diff-grads'gydF4y2Ba和gydF4y2Ba黑森州Multiplyfcn.gydF4y2Ba只有中等效率就是他们使用共轭梯度方法。他们准确地估计了客观函数的黑森州,但它们不会产生最准确的迭代步骤。有关更多信息,请参阅gydF4y2Ba内点算法gydF4y2Ba,讨论了用低密度脂蛋白法和共轭梯度法求解gydF4y2Ba方程38gydF4y2Ba.gydF4y2Ba

相关的话题gydF4y2Ba