编写标量目标函数GÿdF4y2Ba

功能文件GÿdF4y2Ba

标量目标函数文件接受一个输入,比如GÿdF4y2BaXGÿdF4y2Ba,并返回一个真正的标量输出,比方说GÿdF4y2BaFGÿdF4y2Ba。输入GÿdF4y2BaXGÿdF4y2Ba可以是标量,向量,或者GÿdF4y2Ba矩阵GÿdF4y2Ba。函数文件可以返回更多输出(参见GÿdF4y2Ba包括渐变和黑森GÿdF4y2Ba)。GÿdF4y2Ba

例如,假设你的目标是三个变量的函数,GÿdF4y2BaXGÿdF4y2Ba,GÿdF4y2BaÿGÿdF4y2Ba和GÿdF4y2BažGÿdF4y2Ba:GÿdF4y2Ba

FGÿdF4y2Ba(GÿdF4y2BaXGÿdF4y2Ba)= 3 *(GÿdF4y2BaXGÿdF4y2Ba-GÿdF4y2BaÿGÿdF4y2Ba)GÿdF4y2Ba4GÿdF4y2Ba+ 4 *(GÿdF4y2BaXGÿdF4y2Ba+GÿdF4y2BažGÿdF4y2Ba)GÿdF4y2Ba2GÿdF4y2Ba/(1 +GÿdF4y2BaXGÿdF4y2Ba2GÿdF4y2Ba+GÿdF4y2BaÿGÿdF4y2Ba2GÿdF4y2Ba+GÿdF4y2BažGÿdF4y2Ba2GÿdF4y2Ba)+ COSH(GÿdF4y2BaXGÿdF4y2Ba- 1)+的tanh(GÿdF4y2BaÿGÿdF4y2Ba+GÿdF4y2BažGÿdF4y2Ba)。GÿdF4y2Ba

  1. 写这个功能是接受矢量文件GÿdF4y2Ba鑫GÿdF4y2Ba= [GÿdF4y2BaXGÿdF4y2Ba;GÿdF4y2BaÿGÿdF4y2Ba;GÿdF4y2BažGÿdF4y2Ba),并返回GÿdF4y2BaFGÿdF4y2Ba:GÿdF4y2Ba

    函数f = myObjective(XIN)F = 3 *(XIN(1)聚鑫(2))^ 4 + 4 *(XIN(1)+辛(3))^ 2 /(1 +范数(XIN)^ 2)... + COSH(XIN(1)-1)+的tanh(XIN(2)+辛(3));GÿdF4y2Ba
  2. 将其保存为一个文件名为GÿdF4y2BamyObjective.mGÿdF4y2Ba在您的MATLAB的文件夹GÿdF4y2Ba®GÿdF4y2Ba路径。GÿdF4y2Ba

  3. 检查函数是否正确计算:GÿdF4y2Ba

    myObjective([1;2;3]) ans = 9.2666GÿdF4y2Ba

有关如何包含额外的参数信息,请参阅GÿdF4y2Ba传递额外的参数GÿdF4y2Ba。对于函数文件更复杂的例子,请参阅GÿdF4y2Ba梯度最小化和黑森稀疏模式GÿdF4y2Ba要么GÿdF4y2Ba最小化与界约束和杀鸡取卵预调节GÿdF4y2Ba。GÿdF4y2Ba

本地函数和嵌套函数GÿdF4y2Ba

函数可以存在于其他文件中GÿdF4y2Ba本地函数GÿdF4y2Ba(MATLAB)或GÿdF4y2Ba嵌套函数GÿdF4y2Ba(MATLAB)。使用本地函数或嵌套函数可以减少保存的不同文件的数量。使用嵌套函数还允许访问额外参数,如GÿdF4y2Ba嵌套函数GÿdF4y2Ba。GÿdF4y2Ba

例如,假设你想最小化GÿdF4y2BamyObjective.mGÿdF4y2Ba中描述的目标函数GÿdF4y2Ba功能文件GÿdF4y2Ba,受GÿdF4y2Baellipseparabola.mGÿdF4y2Ba描述的约束,GÿdF4y2Ba非线性约束GÿdF4y2Ba。不用写两个文件,GÿdF4y2BamyObjective.mGÿdF4y2Ba和GÿdF4y2Baellipseparabola.mGÿdF4y2Ba,写一个文件,它包含两个功能作为本地的功能:GÿdF4y2Ba

function [x fval] = callObjConstr(x0,options) %使用本地函数,如果nargin < 2 options = optimoptions('fmincon','Algorithm',' inside -point');结束[x fval] = fmincon (@myObjective, x0, []、[] [], [], [], [],…@ellipseparabola选项);函数f = myObjective(鑫)f = 3 *(鑫(1)新(2))^ 4 + 4 *(鑫(1)+鑫(3))^ 2 /(1 +总和(鑫^ 2))…+ cosh(xin(1)-1) + tanh(xin(2)+xin(3));功能测查[c] = ellipseparabola c (1) (x) = (x (1) ^ 2) / 9 + (x (2) ^ 2) / 4 - 1;c(2) = x(1)^2 - x(2) - 1;测查= [];GÿdF4y2Ba

从这一点开始求解约束最小化GÿdF4y2Ba(1, 1, 1)GÿdF4y2Ba:GÿdF4y2Ba

[x fval] = callObjConstr(ones(3,1))找到满足约束的局部最小值。优化完成是因为目标函数在可行方向上不减少,在函数容差的默认值范围内,且约束满足在约束容差的默认值范围内。x = 1.1835 0.8345 -1.6439 fval = 0.5383GÿdF4y2Ba

匿名函数目标GÿdF4y2Ba

使用匿名函数来编写简单的目标函数。有关匿名函数的更多信息,请参见GÿdF4y2Ba什么是匿名函数?GÿdF4y2Ba(MATLAB)。GÿdF4y2Ba的ROSENBROCK的功能是很简单的编写,因为一个匿名函数:GÿdF4y2Ba

anonrosen = @(X)(100 *(X(2) -  X(1)^ 2)^ 2 +(1-X(1))^ 2);GÿdF4y2Ba
检查GÿdF4y2BaanonrosenGÿdF4y2Ba正确地评估在GÿdF4y2Ba(1 2)GÿdF4y2Ba:GÿdF4y2Ba
anonrosen([ -  1 2])ANS = 104GÿdF4y2Ba
最小化GÿdF4y2BaanonrosenGÿdF4y2Ba同GÿdF4y2BafminuncGÿdF4y2Ba结果如下:GÿdF4y2Ba
选项= optimoptions(@ fminunc, '算法', '准牛顿');[X FVAL] = fminunc(anonrosen,[ -  1; 2],选择)本地最小值找到。优化完成,因为倾斜的大小小于函数允差的默认值。X = 1.0000 1.0000 FVAL = 1.2266e-10GÿdF4y2Ba

包括渐变和黑森GÿdF4y2Ba

提供衍生产品对于解决者GÿdF4y2Ba

对于GÿdF4y2BafminconGÿdF4y2Ba和GÿdF4y2BafminuncGÿdF4y2Ba,您可以在目标函数梯度。一般来说,求解器更强大的,当你有梯度可以更快地略。看到GÿdF4y2Ba包括衍生产品的好处GÿdF4y2Ba。也包括第二衍生物(粗麻布),见GÿdF4y2Ba包括黑森GÿdF4y2Ba。GÿdF4y2Ba

下表显示了该算法可以使用渐变和粗麻布。GÿdF4y2Ba

解算器GÿdF4y2Ba 算法GÿdF4y2Ba 梯度GÿdF4y2Ba 黑森GÿdF4y2Ba
fminconGÿdF4y2Ba 有效集GÿdF4y2Ba 可选的GÿdF4y2Ba 没有GÿdF4y2Ba
内点GÿdF4y2Ba 可选的GÿdF4y2Ba 可选(见GÿdF4y2BaHessian的fmincon内点算法GÿdF4y2Ba)GÿdF4y2Ba
SQPGÿdF4y2Ba 可选的GÿdF4y2Ba 没有GÿdF4y2Ba
信赖域反射GÿdF4y2Ba 要求GÿdF4y2Ba 可选(见GÿdF4y2Ba海森为fminunc信任区或fmincon信赖域反射算法GÿdF4y2Ba)GÿdF4y2Ba
fminuncGÿdF4y2Ba 拟牛顿GÿdF4y2Ba 可选的GÿdF4y2Ba 没有GÿdF4y2Ba
信任区域GÿdF4y2Ba 要求GÿdF4y2Ba 可选(见GÿdF4y2Ba海森为fminunc信任区或fmincon信赖域反射算法GÿdF4y2Ba)GÿdF4y2Ba

如何将渐变GÿdF4y2Ba

  1. 写一段代码,返回:GÿdF4y2Ba

    • 目标函数(标量)作为第一个输出GÿdF4y2Ba

    • 作为第二输出的梯度(矢量)GÿdF4y2Ba

  2. 设置GÿdF4y2BaSpecifyObjectiveGradientGÿdF4y2Ba选项GÿdF4y2Ba真正GÿdF4y2Ba运用GÿdF4y2BaoptimoptionsGÿdF4y2Ba。如果合适,也设置了GÿdF4y2BaSpecifyConstraintGradientGÿdF4y2Ba选项GÿdF4y2Ba真正GÿdF4y2Ba。GÿdF4y2Ba

  3. 或者,请检查您的梯度功能的有限差分近似匹配。看到GÿdF4y2Ba检查梯度或雅克比的有效性GÿdF4y2Ba。GÿdF4y2Ba

小费GÿdF4y2Ba

对于大多数的灵活性,写GÿdF4y2Ba条件化GÿdF4y2Ba码。条件化意味着函数输出的数量可以变化,如图中下面的例子。条件化代码取决于该值不出错GÿdF4y2BaSpecifyObjectiveGradientGÿdF4y2Ba选项。Unconditionalized代码要求您将适当地设置选项。GÿdF4y2Ba

例如,考虑GÿdF4y2Ba。海涅的功能GÿdF4y2Ba

FGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba 100GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba )GÿdF4y2Ba 2GÿdF4y2Ba +GÿdF4y2Ba (GÿdF4y2Ba 1GÿdF4y2Ba -GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba )GÿdF4y2Ba 2GÿdF4y2Ba ,GÿdF4y2Ba

其被描述并在绘制GÿdF4y2Ba解决约束非线性问题,求解基于GÿdF4y2Ba。的梯度GÿdF4y2BaFGÿdF4y2Ba(GÿdF4y2BaXGÿdF4y2Ba)GÿdF4y2Ba是GÿdF4y2Ba

∇GÿdF4y2Ba FGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba [GÿdF4y2Ba -GÿdF4y2Ba 400GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba )GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba -GÿdF4y2Ba 2GÿdF4y2Ba (GÿdF4y2Ba 1GÿdF4y2Ba -GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba )GÿdF4y2Ba 200GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba )GÿdF4y2Ba ]GÿdF4y2Ba ,GÿdF4y2Ba

rosentwoGÿdF4y2Ba是返回无论求解器需要一个条件化功能:GÿdF4y2Ba

函数[F,G] = rosentwo(x)的计算%客观F F = 100 *(X(2) -  X(1)^ 2)^ 2 +(1-X(1))^ 2;如果nargout> 1%梯度所需克= [-400 *(X(2)-X(1)^ 2)* X(1)-2 *(1-X(1));200 *(X(2)-X(1)^ 2)];结束GÿdF4y2Ba

nargoutGÿdF4y2Ba检查调用函数指定的参数数目。看到GÿdF4y2Ba查找函数参数的数目GÿdF4y2Ba(MATLAB)。GÿdF4y2Ba

该GÿdF4y2BafminuncGÿdF4y2Ba解算器,专为无约束优化,让您以最小化的ROSENBROCK的功能。告诉GÿdF4y2BafminuncGÿdF4y2Ba使用由设置梯度和Hessian矩阵GÿdF4y2Ba选项GÿdF4y2Ba:GÿdF4y2Ba

选项= optimoptions(@ fminunc, '算法', '信任区域',...... 'SpecifyObjectiveGradient',真);GÿdF4y2Ba

跑GÿdF4y2BafminuncGÿdF4y2Ba开始于GÿdF4y2Ba[-1; 2]GÿdF4y2Ba:GÿdF4y2Ba

[X FVAL] = fminunc(@rosentwo,[ -  1; 2],选择)本地最小值找到。优化完成,因为倾斜的大小小于函数允差的默认值。X = 1.0000 1.0000 FVAL = 1.9886e-17GÿdF4y2Ba

如果你有一个符号数学工具箱™许可证,可以自动计算梯度和粗麻布,如在GÿdF4y2Ba符号数学工具箱™计算梯度和黑森GÿdF4y2Ba。GÿdF4y2Ba

包括黑森GÿdF4y2Ba

可以把二阶导数包含进去GÿdF4y2BafminconGÿdF4y2Ba“信任区域反射”GÿdF4y2Ba和GÿdF4y2Ba“内点”GÿdF4y2Ba算法,并与GÿdF4y2BafminuncGÿdF4y2Ba“信任区”GÿdF4y2Ba算法。有几种方法,包括黑森州的信息,根据信息的类型和算法。GÿdF4y2Ba

您还必须包括渐变(设置GÿdF4y2BaSpecifyObjectiveGradientGÿdF4y2Ba至GÿdF4y2Ba真正GÿdF4y2Ba并且,如果适用,GÿdF4y2BaSpecifyConstraintGradientGÿdF4y2Ba至GÿdF4y2Ba真正GÿdF4y2Ba),以包括黑森人。GÿdF4y2Ba

黑森州的GÿdF4y2BafminuncGÿdF4y2Ba信任区域或GÿdF4y2BafminconGÿdF4y2Ba信赖域反射算法。GÿdF4y2Ba这些算法要么没有限制,或者仅具有结合或线性等式约束。因此Hessian矩阵是目标函数的二阶导数的矩阵。GÿdF4y2Ba

包括Hessian矩阵为目标函数的第三输出。例如,黑森GÿdF4y2BaHGÿdF4y2Ba(GÿdF4y2BaXGÿdF4y2Ba)GÿdF4y2Ba的的ROSENBROCK的功能是(见GÿdF4y2Ba如何将渐变GÿdF4y2Ba)GÿdF4y2Ba

HGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba [GÿdF4y2Ba 1200GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba 400GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba +GÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba 400GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba -GÿdF4y2Ba 400GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 200GÿdF4y2Ba ]GÿdF4y2Ba 。GÿdF4y2Ba

在目标中包括这个黑森:GÿdF4y2Ba

功能GÿdF4y2Ba[F,G,H] = rosenboth(x)的GÿdF4y2Ba%计算目标FGÿdF4y2BaF = 100 *(X(2) -  X(1)^ 2)^ 2 +(1-X(1))^ 2;GÿdF4y2Ba如果GÿdF4y2Banargout > 1GÿdF4y2Ba需要%梯度GÿdF4y2Bag = (-400 * (x (2) - x (1) ^ 2) * x (1) 2 * (1 - x (1));200 *(X(2)-X(1)^ 2)];GÿdF4y2Ba如果GÿdF4y2Banargout > 2GÿdF4y2Ba需要海森GÿdF4y2BaH = [1200 *×(1)^ 2-400 * X(2)2,-400 * X(1);-400 * X(1),200]。GÿdF4y2Ba结束GÿdF4y2Ba结束GÿdF4y2Ba

组GÿdF4y2BaHessianFcnGÿdF4y2Ba至GÿdF4y2Ba“目标”GÿdF4y2Ba。例如,GÿdF4y2Ba

选择= optimoptions (GÿdF4y2Ba'fminunc'GÿdF4y2Ba,GÿdF4y2Ba“算法”GÿdF4y2Ba,GÿdF4y2Ba“信任区”GÿdF4y2Ba,GÿdF4y2Ba...GÿdF4y2Ba“SpecifyObjectiveGradient”GÿdF4y2Ba,真正,GÿdF4y2Ba'HessianFcn'GÿdF4y2Ba,GÿdF4y2Ba“目标”GÿdF4y2Ba);GÿdF4y2Ba

黑森州的GÿdF4y2BafminconGÿdF4y2Ba内点算法GÿdF4y2Ba。GÿdF4y2Ba黑森州是拉格朗日,其中拉格朗日黑森州GÿdF4y2Ba大号GÿdF4y2Ba(GÿdF4y2BaXGÿdF4y2Ba,GÿdF4y2BaλGÿdF4y2Ba)是GÿdF4y2Ba

大号GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba ,GÿdF4y2Ba λGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba FGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba +GÿdF4y2Ba ΣGÿdF4y2Ba λGÿdF4y2Ba GGÿdF4y2Ba ,GÿdF4y2Ba 一世GÿdF4y2Ba GGÿdF4y2Ba 一世GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba +GÿdF4y2Ba ΣGÿdF4y2Ba λGÿdF4y2Ba HGÿdF4y2Ba ,GÿdF4y2Ba 一世GÿdF4y2Ba HGÿdF4y2Ba 一世GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba 。GÿdF4y2Ba

GGÿdF4y2Ba和GÿdF4y2BaHGÿdF4y2Ba分别代表所有不等式和等式约束矢量函数(意味着束缚,线性和非线性约束),所以最小化问题是GÿdF4y2Ba

分GÿdF4y2Ba XGÿdF4y2Ba FGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba 受GÿdF4y2Ba GGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba ≤GÿdF4y2Ba 0GÿdF4y2Ba ,GÿdF4y2Ba HGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba 0。GÿdF4y2Ba

有关详细信息,请参阅GÿdF4y2Ba约束最优理论GÿdF4y2Ba。拉格朗日的黑森是GÿdF4y2Ba

∇GÿdF4y2Ba XGÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba 大号GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba ,GÿdF4y2Ba λGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba ∇GÿdF4y2Ba 2GÿdF4y2Ba FGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba +GÿdF4y2Ba ΣGÿdF4y2Ba λGÿdF4y2Ba GGÿdF4y2Ba ,GÿdF4y2Ba 一世GÿdF4y2Ba ∇GÿdF4y2Ba 2GÿdF4y2Ba GGÿdF4y2Ba 一世GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba +GÿdF4y2Ba ΣGÿdF4y2Ba λGÿdF4y2Ba HGÿdF4y2Ba ,GÿdF4y2Ba 一世GÿdF4y2Ba ∇GÿdF4y2Ba 2GÿdF4y2Ba HGÿdF4y2Ba 一世GÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba 。GÿdF4y2Ba (1)GÿdF4y2Ba

要包括黑森州,写的语法功能GÿdF4y2Ba

粗麻布= hessianfcn(X,拉姆达)GÿdF4y2Ba

粗麻布GÿdF4y2Ba是一个GÿdF4y2BañGÿdF4y2Ba——- - - - - -GÿdF4y2BañGÿdF4y2Ba矩阵,疏或密,其中GÿdF4y2BañGÿdF4y2Ba是变量的数目。如果GÿdF4y2Ba粗麻布GÿdF4y2Ba大且具有相对较少的非零项,保存由表示运行时间和内存GÿdF4y2Ba粗麻布GÿdF4y2Ba作为稀疏矩阵。GÿdF4y2Ba拉姆达GÿdF4y2Ba是与该非线性约束相关联的拉格朗日乘数矢量的结构:GÿdF4y2Ba

lambda.ineqnonlin lambda.eqnonlinGÿdF4y2Ba

fminconGÿdF4y2Ba计算结构GÿdF4y2Ba拉姆达GÿdF4y2Ba并将其传递给Hessian函数。GÿdF4y2BahessianfcnGÿdF4y2Ba必须计算出总和吗GÿdF4y2Ba方程1GÿdF4y2Ba。通过设置以下选项来指示您正在提供一个Hessian:GÿdF4y2Ba

选择= optimoptions (GÿdF4y2Ba“fmincon”GÿdF4y2Ba,GÿdF4y2Ba“算法”GÿdF4y2Ba,GÿdF4y2Ba“内点”GÿdF4y2Ba,GÿdF4y2Ba...GÿdF4y2Ba“SpecifyObjectiveGradient”GÿdF4y2Ba,真正,GÿdF4y2Ba'SpecifyConstraintGradient'GÿdF4y2Ba,真正,GÿdF4y2Ba...GÿdF4y2Ba'HessianFcn'GÿdF4y2Ba,@ hessianfcn);GÿdF4y2Ba

例如,为了包括约束到单元磁盘的ROSENBROCK的功能的Hessian矩阵GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba +GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba 2GÿdF4y2Ba ≤GÿdF4y2Ba 1GÿdF4y2Ba ,注意约束函数GÿdF4y2Ba GGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba +GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba 2GÿdF4y2Ba -GÿdF4y2Ba 1GÿdF4y2Ba ≤GÿdF4y2Ba 0GÿdF4y2Ba 具有梯度和二阶导数矩阵GÿdF4y2Ba

∇GÿdF4y2Ba GGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba [GÿdF4y2Ba 2GÿdF4y2Ba XGÿdF4y2Ba 1GÿdF4y2Ba 2GÿdF4y2Ba XGÿdF4y2Ba 2GÿdF4y2Ba ]GÿdF4y2Ba HGÿdF4y2Ba GGÿdF4y2Ba (GÿdF4y2Ba XGÿdF4y2Ba )GÿdF4y2Ba =GÿdF4y2Ba [GÿdF4y2Ba 2GÿdF4y2Ba 0GÿdF4y2Ba 0GÿdF4y2Ba 2GÿdF4y2Ba ]GÿdF4y2Ba 。GÿdF4y2Ba

写黑森州功能GÿdF4y2Ba

功能GÿdF4y2Ba豪特= hessianfcn(X,拉姆达)GÿdF4y2Ba目标的黑森GÿdF4y2BaH = [1200 *×(1)^ 2-400 * X(2)2,-400 * X(1);-400 * X(1),200]。GÿdF4y2Ba非线性不等式约束的HessianGÿdF4y2Ba汞柱= 2 *眼(2);豪特= H + lambda.ineqnonlin *汞柱;GÿdF4y2Ba

保存GÿdF4y2BahessianfcnGÿdF4y2Ba在MATLAB路径上。为了完成本例,包含梯度的约束函数为GÿdF4y2Ba

功能GÿdF4y2Ba[c,测查,gc, gceq] = unitdisk2 c (x) = x (1) ^ 2 + x (2) ^ 2 - 1;[];GÿdF4y2Ba如果GÿdF4y2Banargout> 2 GC = [2 * X(1); 2 * X(2)];gceq = [];GÿdF4y2Ba结束GÿdF4y2Ba

解决包括梯度和黑森州的问题。GÿdF4y2Ba

有趣= @rosenboth;nonlcon = @unitdisk2;x0 = [1, 2];选择= optimoptions (GÿdF4y2Ba“fmincon”GÿdF4y2Ba,GÿdF4y2Ba“算法”GÿdF4y2Ba,GÿdF4y2Ba“内点”GÿdF4y2Ba,GÿdF4y2Ba...GÿdF4y2Ba“SpecifyObjectiveGradient”GÿdF4y2Ba,真正,GÿdF4y2Ba'SpecifyConstraintGradient'GÿdF4y2Ba,真正,GÿdF4y2Ba...GÿdF4y2Ba'HessianFcn'GÿdF4y2Ba,@ hessianfcn);[X,FVAL,exitflag,输出] = fmincon(乐趣,X0,[],[],[],[],[],[],@ unitdisk2,选项);GÿdF4y2Ba

对于使用内部点的Hessian其他例子,见GÿdF4y2Ba带解析Hessian的fmincon内点算法GÿdF4y2Ba和GÿdF4y2Ba符号数学工具箱™计算梯度和黑森GÿdF4y2Ba。GÿdF4y2Ba

黑森州乘法函数。GÿdF4y2Ba而是一个完整的黑森州的功能,无论是GÿdF4y2BafminconGÿdF4y2Ba内点GÿdF4y2Ba和GÿdF4y2Ba信赖域反射GÿdF4y2Ba算法允许你提供一个黑森州多重功能。该函数给出了一个海森倍矢量乘积的结果,而不直接计算的Hessian。这可以节省内存。该GÿdF4y2BaSubproblemAlgorithmGÿdF4y2Ba选项必须是GÿdF4y2Ba“重心”GÿdF4y2Ba对于一个Hessian乘函数工作;这是GÿdF4y2Ba信赖域反射GÿdF4y2Ba默认。GÿdF4y2Ba

这两种算法的语法不同。GÿdF4y2Ba

  • 为GÿdF4y2Ba内点GÿdF4y2Ba算法,语法GÿdF4y2Ba

    λW = HessMultFcn (x, v);GÿdF4y2Ba

    结果GÿdF4y2Baw ^GÿdF4y2Ba应该是产品GÿdF4y2BaH * vGÿdF4y2Ba,在那里GÿdF4y2BaHGÿdF4y2Ba拉格朗日函数的黑森值在吗GÿdF4y2BaXGÿdF4y2Ba(见GÿdF4y2Ba方程1GÿdF4y2Ba)GÿdF4y2Ba拉姆达GÿdF4y2Ba是拉格朗日乘数(由计算GÿdF4y2BafminconGÿdF4y2Ba),和GÿdF4y2BavGÿdF4y2Ba是大小的矢量GÿdF4y2BañGÿdF4y2Ba×1。设置选项如下:GÿdF4y2Ba

    选择= optimoptions (GÿdF4y2Ba“fmincon”GÿdF4y2Ba,GÿdF4y2Ba“算法”GÿdF4y2Ba,GÿdF4y2Ba“内点”GÿdF4y2Ba,GÿdF4y2Ba“SpecifyObjectiveGradient”GÿdF4y2Ba,真正,GÿdF4y2Ba...GÿdF4y2Ba'SpecifyConstraintGradient'GÿdF4y2Ba,真正,GÿdF4y2Ba'SubproblemAlgorithm'GÿdF4y2Ba,GÿdF4y2Ba“重心”GÿdF4y2Ba,GÿdF4y2Ba'HessianMultiplyFcn'GÿdF4y2Ba,@ HessMultFcn);GÿdF4y2Ba

    供应功能GÿdF4y2BaHessMultFcnGÿdF4y2Ba,它返回一个GÿdF4y2BañGÿdF4y2Ba×1向量,其中GÿdF4y2BañGÿdF4y2Ba是的维度数目GÿdF4y2BaXGÿdF4y2Ba。该GÿdF4y2BaHessianMultiplyFcnGÿdF4y2Ba选项可以通过不计算黑森州黑森州由矢量相乘的结果。GÿdF4y2Ba

  • 该GÿdF4y2Ba信赖域反射GÿdF4y2Ba算法不涉及GÿdF4y2Ba拉姆达GÿdF4y2Ba:GÿdF4y2Ba

    W = HessMultFcn (H、v);GÿdF4y2Ba

    结果GÿdF4y2Baw ^ = H * VGÿdF4y2Ba。GÿdF4y2BafminconGÿdF4y2Ba通行证GÿdF4y2BaHGÿdF4y2Ba作为目标函数的第三输出返回的值(见GÿdF4y2Ba海森为fminunc信任区或fmincon信赖域反射算法GÿdF4y2Ba)。GÿdF4y2BafminconGÿdF4y2Ba也通过GÿdF4y2BavGÿdF4y2Ba,向量或矩阵与GÿdF4y2BañGÿdF4y2Ba行。列中的数字GÿdF4y2BavGÿdF4y2Ba可以改变吗,所以写GÿdF4y2BaHessMultFcnGÿdF4y2Ba接受列的任意数量。GÿdF4y2BaHGÿdF4y2Ba不必是黑森州;相反,它可以是任何东西,使您能够计算GÿdF4y2Baw ^ = H * VGÿdF4y2Ba。GÿdF4y2Ba

    设置选项如下:GÿdF4y2Ba

    选择= optimoptions (GÿdF4y2Ba“fmincon”GÿdF4y2Ba,GÿdF4y2Ba“算法”GÿdF4y2Ba,GÿdF4y2Ba“信任区域反射”GÿdF4y2Ba,GÿdF4y2Ba...GÿdF4y2Ba“SpecifyObjectiveGradient”GÿdF4y2Ba,真正,GÿdF4y2Ba'HessianMultiplyFcn'GÿdF4y2Ba,@ HessMultFcn);GÿdF4y2Ba

    举一个例子使用与所述一个Hessian矩阵乘法函数GÿdF4y2Ba信赖域反射GÿdF4y2Ba算法,看到GÿdF4y2Ba最小化与结构致密黑森州,线性等式GÿdF4y2Ba。GÿdF4y2Ba

包括衍生产品的好处GÿdF4y2Ba

如果你不提供梯度,求解者通过有限的差异估计梯度。如果您提供了梯度,您的求解器不需要执行这种有限差分估计,因此可以节省时间和更准确,尽管有限差分估计可以更快地复杂的导数。此外,求解者使用近似的Hessian,这可能与真正的Hessian相去甚远。提供一个Hessian可以在更少的迭代中产生一个解决方案。例如,见结尾GÿdF4y2Ba符号数学工具箱™计算梯度和黑森GÿdF4y2Ba。GÿdF4y2Ba

对于约束问题,提供梯度还有另一个好处。一个求解者可以到达一个点GÿdF4y2BaXGÿdF4y2Ba这样GÿdF4y2BaXGÿdF4y2Ba是可行的,但是,对于这个GÿdF4y2BaXGÿdF4y2Ba,有限差分GÿdF4y2BaXGÿdF4y2Ba总是导致一个不可行点。进一步假设在一个不可行点目标函数返回一个复数输出,GÿdF4y2Ba正GÿdF4y2Ba,GÿdF4y2Ba为NaNGÿdF4y2Ba,或错误。在这种情况下,求解器可能会过早地失败或停止。提供一个梯度允许求解继续进行。为了获得此好处,您可能还需要包括非线性约束函数的梯度,并设置GÿdF4y2BaSpecifyConstraintGradientGÿdF4y2Ba选项GÿdF4y2Ba真正GÿdF4y2Ba。看到GÿdF4y2Ba非线性约束GÿdF4y2Ba。GÿdF4y2Ba

选择输入黑森州逼近内部点GÿdF4y2BafminconGÿdF4y2Ba

该GÿdF4y2BafminconGÿdF4y2Ba内点GÿdF4y2Ba算法有许多选择输入Hessian逼近。有关语法细节,请参见GÿdF4y2Ba黑森州作为输入GÿdF4y2Ba。下面是一些选项,以及对它们相对特征的估计。GÿdF4y2Ba

黑森GÿdF4y2Ba 相对内存使用GÿdF4y2Ba 相对效率GÿdF4y2Ba
'BFGS'GÿdF4y2Ba(默认)GÿdF4y2Ba 高(对于较大的问题)GÿdF4y2Ba 高GÿdF4y2Ba
“lbfgs”GÿdF4y2Ba 低到中度GÿdF4y2Ba 温和的GÿdF4y2Ba
“fin-diff-grads”GÿdF4y2Ba 低GÿdF4y2Ba 温和的GÿdF4y2Ba
'HessianMultiplyFcn'GÿdF4y2Ba 低(可能取决于你的代码)GÿdF4y2Ba 温和的GÿdF4y2Ba
'HessianFcn'GÿdF4y2Ba 吗?(取决于你的代码)GÿdF4y2Ba 高(取决于您的代码)GÿdF4y2Ba

使用默认GÿdF4y2Ba'BFGS'GÿdF4y2Ba黑森州除非你GÿdF4y2Ba

原因GÿdF4y2Ba“lbfgs”GÿdF4y2Ba只有适度的效率是双重的。它具有相对昂贵的谢尔曼 - 莫里森更新。并将得到的迭代步骤可以是有些不准确的,由于GÿdF4y2Ba“lbfgs”GÿdF4y2Ba有限的内存。GÿdF4y2Ba

原因GÿdF4y2Ba“fin-diff-grads”GÿdF4y2Ba和GÿdF4y2BaHessianMultiplyFcnGÿdF4y2Ba只有中等效率的是他们使用共轭梯度法。他们准确地估计目标函数的Hessian,但他们没有产生最准确的迭代步骤。有关更多信息,请参见GÿdF4y2Bafmincon内点算法GÿdF4y2Ba,其低密度脂蛋白办法的讨论和共轭梯度的方法来解决GÿdF4y2Ba式(36)GÿdF4y2Ba。GÿdF4y2Ba

相关话题GÿdF4y2Ba