主要内容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)+双曲正切(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(鑫(1)1)+双曲正切辛(鑫(2)+ (3));gydF4y2Ba
  2. 将其保存为一个文件命名gydF4y2BamyObjective.mgydF4y2Ba一个文件夹在您的MATLABgydF4y2Ba®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.mgydF4y2Ba目标函数中描述gydF4y2Ba函数文件gydF4y2Ba主题,gydF4y2Baellipseparabola.mgydF4y2Ba描述的约束,gydF4y2Ba非线性约束gydF4y2Ba。而不是写两个文件,gydF4y2BamyObjective.mgydF4y2Ba和gydF4y2Baellipseparabola.mgydF4y2Ba,写一个文件,其中包含两个函数作为当地的功能:gydF4y2Ba

函数[x fval] = callObjConstr (x0,选项)%使用本地函数只是一个文件如果输入参数个数< 2选项= optimoptions (“fmincon”、“算法”,“内点”);结束[x fval] = fmincon (@myObjective, x0, []、[] [], [], [], [],…@ellipseparabola选项);函数f = myObjective(鑫)f = 3 *(鑫(1)新(2))^ 4 + 4 *(鑫(1)+鑫(3))^ 2 /(1 +总和(鑫^ 2))…+ cosh(鑫(1)1)+双曲正切辛(鑫(2)+ (3));功能测查[c] = ellipseparabola c (1) (x) = (x (1) ^ 2) / 9 + (x (2) ^ 2) / 4 - 1;c (2) = x (1) ^ 2 - x (2) - 1;测查= [];gydF4y2Ba

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

[x fval] = callObjConstr((3,1))的局部最小值发现,满足约束条件。优化完成,因为目标函数中引入可行的方向,在默认值函数的宽容,在默认值和约束满足约束的宽容。x = 1.1835 0.8345 -1.6439 fval = 0.5383gydF4y2Ba

匿名函数的目标gydF4y2Ba

使用匿名函数来编写简单的目标函数。关于匿名函数的更多信息,请参阅gydF4y2Ba匿名函数是什么?gydF4y2Ba。gydF4y2Ba。海涅的功能很简单写一个匿名函数:gydF4y2Ba

anonrosen = @ (x) (100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2);gydF4y2Ba
检查gydF4y2BaanonrosengydF4y2Ba正确地评估在gydF4y2Ba(1 2)gydF4y2Ba:gydF4y2Ba
anonrosen ([1 - 2]) ans = 104gydF4y2Ba
最小化gydF4y2BaanonrosengydF4y2Ba与gydF4y2BafminuncgydF4y2Ba会产生以下结果:gydF4y2Ba
选择= optimoptions (@fminunc、“算法”、“拟牛顿”);[x fval] = fminunc (anonrosen[1, 2]选项)局部最小值。优化完成因为梯度的大小小于默认值函数的宽容。x = 1.0000 - 1.0000 fval = 1.2266平台以及gydF4y2Ba

包括梯度和麻布gydF4y2Ba

为解决者提供衍生品gydF4y2Ba

为gydF4y2BafmincongydF4y2Ba和gydF4y2BafminuncgydF4y2Ba,您可以包括目标函数的梯度。一般来说,解决更强劲,包括梯度时,可以稍快。看到gydF4y2Ba的好处包括衍生品gydF4y2Ba。也包括二阶导数(麻布),看到的gydF4y2Ba包括麻布gydF4y2Ba。gydF4y2Ba

下面的表显示了算法可以使用梯度和麻布。gydF4y2Ba

解算器gydF4y2Ba 算法gydF4y2Ba 梯度gydF4y2Ba 黑森gydF4y2Ba
fmincongydF4y2Ba 有效集gydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
内点gydF4y2Ba 可选gydF4y2Ba 可选(见gydF4y2Ba海赛为fmincon内点算法gydF4y2Ba)gydF4y2Ba
sqpgydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
trust-region-reflectivegydF4y2Ba 要求gydF4y2Ba 可选(见gydF4y2Ba海赛为fminunc信赖域或fmincon trust-region-reflective算法gydF4y2Ba)gydF4y2Ba
fminuncgydF4y2Ba 拟牛顿gydF4y2Ba 可选gydF4y2Ba 没有gydF4y2Ba
信赖域gydF4y2Ba 要求gydF4y2Ba 可选(见gydF4y2Ba海赛为fminunc信赖域或fmincon trust-region-reflective算法gydF4y2Ba)gydF4y2Ba

如何包含梯度gydF4y2Ba

  1. 编写代码返回:gydF4y2Ba

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

    • 梯度(向量),第二个输出gydF4y2Ba

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

  3. 可选地,检查是否你的梯度函数匹配有限差分近似。看到gydF4y2Ba检查梯度或雅克比时的有效性gydF4y2Ba。gydF4y2Ba

提示gydF4y2Ba

对于大多数的灵活性,写作gydF4y2Ba条件化gydF4y2Ba代码。条件化意味着函数输出的数量可以各有不同,如以下示例所示。条件化代码没有错误取决于的价值gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba选择。Unconditionalized代码需要设置适当的选项。gydF4y2Ba

例如,考虑gydF4y2Ba。海涅的功能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解决一个约束非线性问题,Solver-BasedgydF4y2Ba。的梯度gydF4y2BafgydF4y2Ba(gydF4y2BaxgydF4y2Ba)gydF4y2Ba是gydF4y2Ba

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

rosentwogydF4y2Ba是一个条件化函数,它返回无论解决要求:gydF4y2Ba

函数(f, g) = rosentwo f (x) %计算目标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

的gydF4y2BafminuncgydF4y2Ba约束优化问题的解算器,设计,可以让你减少。海涅的功能。告诉gydF4y2BafminuncgydF4y2Ba使用梯度和黑森通过设置gydF4y2Ba选项gydF4y2Ba:gydF4y2Ba

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

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

[x fval] = fminunc (@rosentwo[1, 2]选项)局部最小值。优化完成因为梯度的大小小于默认值函数的宽容。x = 1.0000 - 1.0000 fval = 1.9886 e-17gydF4y2Ba

如果你有一个符号数学工具箱™许可,可以自动计算梯度和麻布,中描述gydF4y2Ba计算梯度,并使用符号数学工具箱™麻布gydF4y2Ba。gydF4y2Ba

包括麻布gydF4y2Ba

你可以包括二阶导数gydF4y2BafmincongydF4y2Ba“trust-region-reflective”gydF4y2Ba和gydF4y2Ba“内点”gydF4y2Ba算法,和gydF4y2BafminuncgydF4y2Ba“信赖域”gydF4y2Ba算法。有几种方法可以包括黑森信息,根据信息的类型和算法。gydF4y2Ba

您还必须包括梯度(集gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba如果适用,gydF4y2BaSpecifyConstraintGradientgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba),以便包括麻布。gydF4y2Ba

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

包括海赛矩阵作为第三个目标函数的输出。例如,黑森gydF4y2BaHgydF4y2Ba(gydF4y2BaxgydF4y2Ba)gydF4y2Ba(见。海涅的函数gydF4y2Ba如何包含梯度gydF4y2Ba)gydF4y2Ba

HgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba (gydF4y2Ba 1200年gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba −gydF4y2Ba 400年gydF4y2Ba xgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba −gydF4y2Ba 400年gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba −gydF4y2Ba 400年gydF4y2Ba xgydF4y2Ba 1gydF4y2Ba 200年gydF4y2Ba ]gydF4y2Ba 。gydF4y2Ba

包括这个黑森的目的:gydF4y2Ba

函数gydF4y2Ba[f, g, H] = rosenboth (x)gydF4y2Ba% f计算目标gydF4y2Baf = 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;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 * (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“SpecifyObjectiveGradient”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

包括黑森、写一个函数的语法gydF4y2Ba

黑森= hessianfcn (x,λ)gydF4y2Ba

黑森gydF4y2Ba是一个gydF4y2BangydF4y2Ba——- - - - - -gydF4y2BangydF4y2Ba矩阵,稀疏或密集,gydF4y2BangydF4y2Ba是变量的数量。如果gydF4y2Ba黑森gydF4y2Ba大,相对较少的非零项,节省运行时间和内存代表gydF4y2Ba黑森gydF4y2Ba作为一个稀疏矩阵。gydF4y2BaλgydF4y2Ba与拉格朗日乘子向量的结构与非线性约束:gydF4y2Ba

λ。我neqnonlin lambda.eqnonlin

fmincongydF4y2Ba计算结构gydF4y2BaλgydF4y2Ba并将它传递到你的黑森函数。gydF4y2BahessianfcngydF4y2Ba必须计算的金额gydF4y2Ba方程1gydF4y2Ba。表明你提供黑森通过设置这些选项:gydF4y2Ba

选择= optimoptions (gydF4y2Ba“fmincon”gydF4y2Ba,gydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“内点”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba“SpecifyObjectiveGradient”gydF4y2Ba,真的,gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba…gydF4y2Ba“HessianFcn”gydF4y2Ba,@hessianfcn);gydF4y2Ba

例如,包括黑森。单位圆盘的功能限制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

黑森函数写成gydF4y2Ba

函数gydF4y2Ba胡特= hessianfcn (x,λ)gydF4y2Ba%黑森的客观gydF4y2BaH = (1200 * (1) ^ 2 - 400 * x (2) + 2, -400 * x (1);-400 * x (1), 200);gydF4y2Ba%黑森非线性不等式约束gydF4y2BaHg = 2 *眼(2);胡特= H + lambda.ineqnonlin *汞;gydF4y2Ba

保存gydF4y2BahessianfcngydF4y2Ba在MATLAB的路径上。完成的例子,包括梯度约束函数gydF4y2Ba

函数gydF4y2Ba[c,测查,gc, gceq] = unitdisk2 c (x) = x (1) ^ 2 + x (2) ^ 2 - 1;测查= [];gydF4y2Ba如果gydF4y2Banargout > 2 gc = [2 * x (1); 2 * x (2)];gceq = [];gydF4y2Ba结束gydF4y2Ba

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

有趣= @rosenboth;nonlcon = @unitdisk2;x0 = [1, 2];选择= optimoptions (gydF4y2Ba“fmincon”gydF4y2Ba,gydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“内点”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba“SpecifyObjectiveGradient”gydF4y2Ba,真的,gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba…gydF4y2Ba“HessianFcn”gydF4y2Ba,@hessianfcn);[x, fval exitflag、输出]= fmincon(有趣,x0, []、[] [], [], [], [], @unitdisk2,选项);gydF4y2Ba

其他的例子使用的是内点的麻绳,看到gydF4y2Ba与分析黑森fmincon内点算法gydF4y2Ba和gydF4y2Ba计算梯度,并使用符号数学工具箱™麻布gydF4y2Ba。gydF4y2Ba

黑森乘法函数。gydF4y2Ba而不是一个完整的黑森函数,两个gydF4y2BafmincongydF4y2Ba内点gydF4y2Ba和gydF4y2Batrust-region-reflectivegydF4y2Ba算法允许您提供一个黑森乘法函数。这个函数给出的结果Hessian-times-vector产品,没有直接计算的麻绳。这可以节省内存。的gydF4y2BaSubproblemAlgorithmgydF4y2Ba选项必须是gydF4y2Ba“重心”gydF4y2Ba黑森乘法函数工作;这是gydF4y2Batrust-region-reflectivegydF4y2Ba违约。gydF4y2Ba

两种算法的语法是不同的。gydF4y2Ba

  • 为gydF4y2Ba内点gydF4y2Ba算法,语法gydF4y2Ba

    λW = HessMultFcn (x, v);gydF4y2Ba

    结果gydF4y2BaWgydF4y2Ba应该是产品gydF4y2BaH * vgydF4y2Ba,在那里gydF4y2BaHgydF4y2Ba黑森拉格朗日的吗gydF4y2BaxgydF4y2Ba(见gydF4y2Ba方程1gydF4y2Ba),gydF4y2BaλgydF4y2Ba是拉格朗日乘子计算gydF4y2BafmincongydF4y2Ba),gydF4y2BavgydF4y2Ba是一个向量的大小gydF4y2BangydF4y2Ba1。设置选项如下:gydF4y2Ba

    选择= optimoptions (gydF4y2Ba“fmincon”gydF4y2Ba,gydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“内点”gydF4y2Ba,gydF4y2Ba“SpecifyObjectiveGradient”gydF4y2Ba,真的,gydF4y2Ba…gydF4y2Ba“SpecifyConstraintGradient”gydF4y2Ba,真的,gydF4y2Ba“SubproblemAlgorithm”gydF4y2Ba,gydF4y2Ba“重心”gydF4y2Ba,gydF4y2Ba“HessianMultiplyFcn”gydF4y2Ba,@HessMultFcn);gydF4y2Ba

    供给函数gydF4y2BaHessMultFcngydF4y2Ba,它返回一个gydF4y2BangydF4y2Ba1的向量,gydF4y2BangydF4y2Ba维度的数量吗gydF4y2BaxgydF4y2Ba。的gydF4y2BaHessianMultiplyFcngydF4y2Ba选项允许您通过的黑森乘以一个向量的结果没有计算黑森。gydF4y2Ba

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

    W = HessMultFcn (H、v);gydF4y2Ba

    结果gydF4y2BaW = H * vgydF4y2Ba。gydF4y2BafmincongydF4y2Ba通过gydF4y2BaHgydF4y2Ba随着第三目标函数的输出返回值(见gydF4y2Ba海赛为fminunc信赖域或fmincon trust-region-reflective算法gydF4y2Ba)。gydF4y2BafmincongydF4y2Ba也通过gydF4y2BavgydF4y2Ba,一个向量或矩阵gydF4y2BangydF4y2Ba行。列的数量gydF4y2BavgydF4y2Ba可以改变,那么写呢gydF4y2BaHessMultFcngydF4y2Ba接受任意数量的列。gydF4y2BaHgydF4y2Ba不需要海赛;相反,它可以是任何东西,让你来计算gydF4y2BaW = H * vgydF4y2Ba。gydF4y2Ba

    设置选项如下:gydF4y2Ba

    选择= optimoptions (gydF4y2Ba“fmincon”gydF4y2Ba,gydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“trust-region-reflective”gydF4y2Ba,gydF4y2Ba…gydF4y2Ba“SpecifyObjectiveGradient”gydF4y2Ba,真的,gydF4y2Ba“HessianMultiplyFcn”gydF4y2Ba,@HessMultFcn);gydF4y2Ba

    在使用麻绳乘法函数的一个例子gydF4y2Batrust-region-reflectivegydF4y2Ba算法,看到gydF4y2Ba最小化茂密的结构化的麻绳,线性等式gydF4y2Ba。gydF4y2Ba

的好处包括衍生品gydF4y2Ba

如果你不提供梯度,解决估计通过有限的梯度差异。如果你提供的梯度,解算器不需要执行此有限差分估计,所以可以节省时间,更准确,尽管有限差分估计可以更快的复杂衍生品。此外,解决者使用一个近似的麻绳,可以远离真实的麻绳。提供一个黑森可以在更少的迭代产生一个解决方案。例如,看到结束gydF4y2Ba计算梯度,并使用符号数学工具箱™麻布gydF4y2Ba。gydF4y2Ba

受限的问题,提供一个梯度还有另一个优势。解算器可以达到一个点gydF4y2BaxgydF4y2Ba这样gydF4y2BaxgydF4y2Ba是可行的,但,这为gydF4y2BaxgydF4y2Ba,有限的差异gydF4y2BaxgydF4y2Ba总是会导致一个不可行点。进一步假设目标函数在一个不可行点返回一个复杂的输出,gydF4y2Ba正gydF4y2Ba,gydF4y2Ba南gydF4y2Ba,或错误。在这种情况下,解算器可以失败或过早地停止。提供一个梯度允许解算器。为了获得这种好处,您可能还需要包括一个非线性约束函数的梯度,并设置gydF4y2BaSpecifyConstraintGradientgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba。看到gydF4y2Ba非线性约束gydF4y2Ba。gydF4y2Ba

选择输入黑森近似行内点gydF4y2BafmincongydF4y2Ba

的gydF4y2BafmincongydF4y2Ba内点gydF4y2Ba算法具有许多选项用于选择一个输入黑森近似。语法细节,请参阅gydF4y2Ba海赛作为输入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和gydF4y2BaHessianMultiplyFcngydF4y2Ba只有温和的效率是它们使用共轭梯度方法。他们准确地估计目标函数的麻绳,但他们不产生最精确的迭代步骤。有关更多信息,请参见gydF4y2Bafmincon内点算法gydF4y2Ba,其低密度脂蛋白方法的讨论和共轭梯度方法解决gydF4y2Ba方程38gydF4y2Ba。gydF4y2Ba

相关的话题gydF4y2Ba