主要内容

解决

解决优化问题或方程问题

描述

使用解决求解找到最优化问题或方程问题的解

提示

有关完整的工作流程,请参见基于问题的优化工作流求解方程的基于问题的工作流

例子

索尔=解决(概率解决优化问题或方程问题概率

例子

索尔=解决(概率x0解决了概率从点或一组值开始x0

例子

索尔=解决(概率x0女士解决了概率使用女士多个开始解决。使用此语法可以搜索比不使用时获得的更好的解决方案女士论点。

例子

索尔=解决(___名称,值除了先前语法中的输入参数外,还使用一个或多个名称-值对参数修改解决方案流程。

索尔fval] =解决(___还使用前面语法中的任何输入参数返回解决方案处的目标函数值。

例子

索尔fvalexitflag输出λ] =解决(___还返回一个描述退出条件的退出标志输出结构,包含关于解决过程的附加信息,对于非整数优化问题,拉格朗日乘数结构。

例子

全部折叠

求解一个由最优化问题定义的线性规划问题。

X = optimvar()“x”);Y = optimvar()“y”);Prob = optimproblem;概率。目标= -x - y/3;prob.Constraints。con年代1=x+ y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob)
使用linprog解决问题。找到最优解。
索尔=带有字段的结构体:X: 0.6667 y: 1.3333

求最小值山峰函数,该函数包含在MATLAB®中 x 2 + y 2 4 .为此,创建优化变量xy

X = optimvar()“x”);Y = optimvar()“y”);

创建一个优化问题山峰作为目标函数。

问题=最优问题“客观”山峰(x, y));

将约束作为不等式包含在优化变量中。

概率。约束条件= x^2 + y^2 <= 4;

设置初始点x到1和y到-1,然后解题。

x0。x=1;x0。y=1;Sol = solve(prob,x0)
使用fmincon解决问题。找到满足约束的局部最小值。由于目标函数在可行方向上不减小,优化完成到最优性容限范围内,约束满足到约束容限范围内。
索尔=带有字段的结构体:X: 0.2283 y: -1.6255

不支万博1manbetx持的功能fcn2optimexpr

如果您的目标函数或非线性约束函数不完全由初等函数组成,则必须使用fcn2optimexpr.看到将非线性函数转换为优化表达式万博1manbetx支持的变量和表达式优化操作

转换现在的例子:

conpeaks = fcn2optimexpr(@peaks,x,y);概率。目标=凸;Sol2 = solve(prob,x0)
使用fmincon解决问题。找到满足约束的局部最小值。由于目标函数在可行方向上不减小,优化完成到最优性容限范围内,约束满足到约束容限范围内。
sol2 =带有字段的结构体:X: 0.2283 y: -1.6255

版权所有:The MathWorks, Inc。

比较在有和没有初始可行点的情况下解决整数规划问题的步骤数。该问题有8个整数变量和4个线性等式约束,并且所有变量都被限制为正。

Prob = optimproblem;X = optimvar()“x”8 1下界的0,“类型”“整数”);

创建四个线性等式约束,并将它们包含在问题中。

Aeq = [22 13 26 33 21 3 14 26 39 16 22 28 26 30 23 24 18 14 14 29 27 30 38 26 26 41 26 28 36 18 38 16 26];Beq = [7872 10466 11322 12058];*x == q;probe . constraints .cons = cons;

创建一个目标函数,并将其包含在问题中。

F = [2 10 13 17 7 5 7 3];概率。目标= f*x;

在不使用初始点的情况下解决问题,并检查显示以查看分支和绑定节点的数量。

[x1,fval1,exitflag1,output1] = solve(prob);
使用intinprog解决问题。LP:最优目标值为1554.047531。切割生成:应用8强CG切割。下界是159100万。分支和边界:节点总数int整数相对探索时间(s)解值间隙(%)10000 0.42 0 - - 18025 0.71 1 2.906000e+03 4.509804e+01 21857 0.90 2 2.073000e+03 2.270974e+01 23544 0.97 3 1.854000e+03 1.180593e+01 24097 1.00 3 1.854000e+03 1.617251e+00 24293 1.01 3 1.854000e+03 1.617251e+ 03 0.000000e+00找到最优解。intinprog停止是因为目标值在一个间隙公差范围内的最优值,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。

为了比较,使用初始可行点找到解。

x0。x=[8 62 23 103 53 84 46 34]'; [x2,fval2,exitflag2,output2] = solve(prob,x0);
使用intinprog解决问题。LP:最优目标值为1554.047531。切割生成:应用8强CG切割。下界是159100万。相对差距为59.20%。分支和边界:节点总数int整数相对探索时间(s)解值间隙(%)3627 0.22 2 2.154000e+03 2.593968e+01 5844 0.32 3 1.8554000e +03 1.180593e+01 6204 0.34 3 1.8554000e +03 1.455526e+00 6400 0.35 3 1.8554000e +03 0.000000e+00找到最优解。intinprog停止是因为目标值在一个间隙公差范围内的最优值,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。
流(在没有初始点的情况下,求解需要%d步。对于初始点,求解需要%d步。、output1.numnodes output2.numnodes)
在没有初始点的情况下,求解需要24293步。对于初始点,solve需要6400步。

给出一个起始点并不总能改善问题。对于这个问题,使用初始点可以节省时间和计算步骤。然而,对于某些问题,初始点可能会导致解决采取更多的步骤。

对于某些求解器,可以将目标函数值和约束函数值(如果有的话)传递给解决x0论点。这可以节省求解器的时间。传递一个向量OptimizationValues对象。创建这个矢量optimvalues函数。

可以使用目标函数值的求解器有:

  • 遗传算法

  • gamultiobj

  • paretosearch

  • surrogateopt

可以使用非线性约束函数值的求解器有:

  • paretosearch

  • surrogateopt

例如,最小化山峰函数使用surrogateopt,从初始点网格的值开始。创建一个从-10到10的网格x变量,5/25/2y间距为1/2的变量。计算初始点处的目标函数值。

X = optimvar()“x”下界= -10,UpperBound = 10);Y = optimvar()“y”下界= 5/2 UpperBound = 5/2);问题=最优问题“客观”山峰(x, y));Xval = -10:10;Yval = (-5:5)/2;[x0x,x0y] = meshgrid(xval,yval);峰值=峰值(x0x,x0y);

中的值传递x0optimvalues.这节省了时间解决,因为解决不需要计算值。将值作为行向量传递。

X0 = optimvalues(prob;“x”x0x(:)”,“y”x0y(:)”,“客观”, peaksvals(:)”);

使用解决问题surrogateopt初始值。

[sol,fval,eflag,output] = solve(prob,x0,Solver=“surrogateopt”
使用替代选择解决问题。

图形优化绘图函数包含一个轴对象。标题为最佳函数值:-6.55113的axes对象包含一个类型为line的对象。该对象表示最佳函数值。

surrogateopt停止了,因为它超出了'options.MaxFunctionEvaluations'设置的函数计算限制。
索尔=带有字段的结构体:X: 0.2283 y: -1.6256
Fval = -6.5511
eflag = SolverLimitExceeded
输出=带有字段的结构体:Elapsedtime: 45.5839 funccount: 200 constrviolation: 0 ineq: [1x1 struct] rngstate: [1x1 struct] message: 'surrogateopt已停止,因为它超过了由…求解器:'surrogateopt'

求一个局部最小值山峰量程功能 - 5 x y 5 从点开始[1,2]

X = optimvar()“x”下界= 5,UpperBound = 5);Y = optimvar()“y”下界= 5,UpperBound = 5);x0。x=1;x0。y=2;prob = optimproblem(目标=peaks(x,y));Opts = optimoptions(“fmincon”显示=“没有”);[sol,fval] = solve(prob,x0,Options=opts)
索尔=带有字段的结构体:X: -3.3867 y: 3.6341
Fval = 1.1224e-07

试着找到一个更好的解决方案GlobalSearch解算器。这个求解器运行fmincon多次,这可能会产生更好的解决方案。

ms = GlobalSearch;[sol2,fval2] = solve(问题,x,ms)
使用全局搜索解决问题。GlobalSearch停止了,因为它分析了所有的试验点。所有15个本地解算器运行都收敛于一个正的本地解算器退出标志。
sol2 =带有字段的结构体:X: 0.2283 y: -1.6255
Fval2 = -6.5511

GlobalSearch找到一个具有更好(更低)目标函数值的解。退出消息显示了这一点fmincon本地求解器运行15次。返回的解的目标函数值约为-6.5511,低于第一个解的值1.1224e-07。

解决问题

最小值 x - 3. x 1 - 2 x 2 - x 3. 年代 u b j e c t t o { x 3. b n 一个 r y x 1 x 2 0 x 1 + x 2 + x 3. 7 4 x 1 + 2 x 2 + x 3. 1 2

不显示迭代显示。

X = optimvar()“x”、2、1,下界的, 0);X3 = optimvar(“x3”“类型”“整数”下界的0,“UpperBound”1);Prob = optimproblem;概率。物镜= -3*x(1) - 2*x(2) - x3;prob.Constraints。con年代1=x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; options = optimoptions(“intlinprog”“显示”“关闭”);Sol =解(问题);“选项”选项)
索尔=带有字段的结构体:X: [2x1倍]x3: 1

检查解决方案。

sol.x
ans =2×10 5.5000
sol.x3
Ans = 1

解决使用intlinprog作为线性规划问题的求解器。

X = optimvar()“x”);Y = optimvar()“y”);Prob = optimproblem;概率。目标= -x - y/3;prob.Constraints。con年代1=x+ y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob,“规划求解”“intlinprog”
使用intinprog解决问题。LP:最优目标值为-1.111111。找到最优解。没有指定整数变量。inlinprog解决了线性问题。
索尔=带有字段的结构体:X: 0.6667 y: 1.3333

求解中描述的混合整数线性规划问题用非默认选项求解整数规划问题并检查所有输出数据。

X = optimvar()“x”、2、1,下界的, 0);X3 = optimvar(“x3”“类型”“整数”下界的0,“UpperBound”1);Prob = optimproblem;概率。物镜= -3*x(1) - 2*x(2) - x3;prob.Constraints。con年代1=x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; [sol,fval,exitflag,output] = solve(prob)
使用intinprog解决问题。LP:最优目标值- 12000000。找到最优解。Intlinprog停止在根节点,因为目标值在最优值的容差范围内,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。
索尔=带有字段的结构体:X: [2x1倍]x3: 1
Fval = -12
exitflag = OptimalSolution
输出=带有字段的结构体:relativegap: 0 absolutegap: 0 numfeaspoints: 1 numnodes: 0 constrviolation: 0 message: 'Optimal solution found.... .求解器:intlinprog

对于没有任何整数约束的问题,您还可以获得非空拉格朗日乘子结构作为第五个输出。

使用命名索引变量创建并解决一个优化问题。问题是在加权流量的约束下,最大化水果到各个机场的利润加权流量。

rng (0)%为了重现性P = optimproblem()“ObjectiveSense”“最大化”);Flow = optimvar(“流”{“苹果”“橘子”“香蕉”“浆果”}, {“纽约”“bo”“宽松”},下界的0,“类型”“整数”);p.目标= sum(sum(rand(4,3).*flow));p.Constraints.NYC = rand(1,4)*flow(:,“纽约”) <= 10;p.Constraints.BOS = rand(1,4)*flow(:,“bo”) <= 12;p.Constraints.LAX = rand(1,4)*flow(:,)“宽松”) <= 35;Sol = solve(p);
使用intinprog解决问题。LP:最优目标值为-1027.472366。启发式:使用ZI round找到1个解决方案。上限是-1027.233133。相对差距为0.00%。找到最优解。Intlinprog停止在根节点,因为目标值在最优值的容差范围内,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。

找到最佳的橙子和浆果流到纽约和洛杉矶。

[idxFruit,idxAirports] = findinindex(流量,{“橘子”“浆果”}, {“纽约”“宽松”})
idxFruit =1×22 4
idxAirports =1×21 3
orangeBerries = sol.flow(idxFruit, idxAirports)
orangeBerries =2×2980.0000 70.0000

这个显示意味着没有橙子会纽约70个浆果纽约980个橙子将会宽松的,没有浆果宽松的

列出以下最优流程:

果机场

----- --------

浆果纽约

苹果BOS

橙子松懈

Idx = findinindex(流量,{“浆果”“苹果”“橘子”}, {“纽约”“bo”“宽松”})
idx =1×34 5 10
optimalFlow = sol.flow(idx)
optimalFlow =1×370.0000 28.0000 980.0000

这个显示意味着70个浆果将会纽约28个苹果BOS980个橙子将会宽松的

求解非线性方程组

经验值 - 经验值 - x 1 + x 2 x 2 1 + x 1 2 x 1 因为 x 2 + x 2 x 1 1 2

使用基于问题的方法,首先定义x作为二元优化变量。

X = optimvar()“x”2);

创建第一个方程作为优化等式表达式。

eq1 = exp (exp (- x (x (1) + (2)))) = = x (2) * (1 + x (1) ^ 2);

同样,创建第二个方程作为优化等式表达式。

Eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) = 1/2;

创建一个方程问题,并将方程放入问题中。

问题=问题;prob.Equations。Eq1 = Eq1;prob.Equations。Eq2 = Eq2;

回顾问题。

显示(概率)
EquationProblem:解:x eq1: exp ((exp ((- x (x (1) + (2 )))))) == ( x (2) * (1 + x (1) ^ 2)) eq2: ((x(1)。* cos (x (2))) + (x(2)。* sin (x (1)))) = = 0.5

从点开始解决问题(0,0).对于基于问题的方法,将初始点指定为结构,将变量名指定为结构的字段。对于这个问题,只有一个变量,x

x0。x=[00]; [sol,fval,exitflag] = solve(prob,x0)
用fsolve解题。方程解决。求解完成是因为函数值的向量通过函数容差值测量接近于零,并且通过梯度测量问题呈现规则性。
索尔=带有字段的结构体:X: [2x1倍]
fval =带有字段的结构体:Eq1: -2.4070e-07 eq2: -3.8255e-08
exitflag = EquationSolved

查看解决方案点。

disp (sol.x)
0.3532 - 0.6061

不支万博1manbetx持的功能fcn2optimexpr

如果您的方程函数不是由初等函数组成,则必须使用fcn2optimexpr.对于本例:

ls1 = fcn2optimexpr (@ (x) exp (exp (- x (x (1) + (2)))), x);Eq1 = ls1 == x(2)*(1 + x(1)^2)ls2 = fcn2optimexpr (@ (x) x (1) * cos (x (2)) + x (2) * sin (x (1)), x);Eq2 = ls2 == 1/2;

看到万博1manbetx支持的变量和表达式优化操作将非线性函数转换为优化表达式

输入参数

全部折叠

优化问题或方程问题,指定为OptimizationProblem对象或EquationProblem对象。创建一个优化问题,使用optimproblem;创建一个方程问题,使用eqnproblem

警告

基于问题的方法不支持目标函数中的复数值、非线性等式或非线性不等式。万博1manbetx如果函数计算具有复杂值,即使作为中间值,最终结果也可能是不正确的。

例子:Prob = optimproblem;概率。目标= obj;prob.Constraints。con1 = con1;

例子:问题=问题;概率。方程=等式;

初始点,指定为一个结构,其字段名等于中的变量名概率

对于一些全局优化工具箱解决,x0可以是向量吗OptimizationValues对象表示多个初始点。创建点optimvalues函数。这些求解器是:

  • 遗传算法(全局优化工具箱)gamultiobj(全局优化工具箱)paretosearch(全局优化工具箱)particleswarm(全局优化工具箱).这些解算器接受多个起始点作为初始种群的成员。

  • MultiStart(全局优化工具箱).这个解算器接受多个初始点作为局部解算器,例如fmincon

  • surrogateopt(全局优化工具箱).此求解器接受多个初始点来帮助创建初始代理。

例如使用x0使用已命名索引变量,请参见创建初始点优化与命名索引变量

例子:如果概率有变量命名为xyx0。x=[3.,2,17]; x0.y = [pi/3,2*pi/3]

数据类型:结构体

多个启动求解器,指定为aMultiStart(全局优化工具箱)对象或GlobalSearch(全局优化工具箱)对象。创建女士使用MultiStartGlobalSearch命令。

目前,GlobalSearch万博1manbetx只支持fmincon局部求解器,和MultiStart万博1manbetx只支持fminconfminunc,lsqnonlin当地的解决者。

例子:ms = MultiStart;

例子:ms = GlobalSearch(FunctionTolerance=1e-4);

名称-值参数

指定可选的参数对为Name1 = Value1,…,以=家,在那里名字是参数名和吗价值是对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字在报价。

例子:解决(问题提出,“选项”,选择)

的最小起始点数MultiStart(全局优化工具箱),指定为正整数。此参数仅在调用时适用解决使用女士论点。解决中的所有值x0作为起点。如果MinNumStartPoints大于中值的个数x0,然后解决在问题范围内均匀随机地生成更多的起始点。如果一个组件是无界的,解决使用默认的人工边界生成点MultiStart

例子:解决(问题,x0,女士,MinNumStartPoints = 50)

数据类型:

创建的对象指定的优化选项optimoptions或选项结构,例如由创建的optimset

在内部,解决函数调用相关求解器,详细信息见“规划求解”参数的参考。确保选项与求解器兼容。例如,intlinprog不允许选项是一个结构,和lsqnonneg不允许选项是对象。

有关选项设置的建议,以改善intlinprog解或解的速度,参见整型线性规划.为linprog,默认值对偶单纯形的算法通常具有内存效率高、速度快的特点。偶尔,linprog解决一个大问题的速度更快算法选择是“内点”.有关改进非线性问题解决方案的选项设置建议,请参见常用选项:调优和故障排除改善结果

例子:options = optimoptions('intlinprog','Display','none')

优化求解器,指定为列出的求解器的名称。对于优化问题,此表包含每种问题类型的可用求解器,包括来自的求解器全局优化工具箱.方程问题的详细信息出现在优化求解器详细信息下面。

用于转换具有整数约束的非线性问题prob2struct,所得到的问题结构可能取决于所选择的求解器。如果你没有全局优化工具箱许可时,必须指定解算器。看到非线性问题优化中的整数约束

下面列出了每种优化问题类型的默认求解器。

问题类型 默认的解算器
线性规划(LP) linprog
混合整数线性规划(MILP) intlinprog
二次规划(QP) quadprog
二阶锥规划(SOCP) coneprog
线性最小二乘 lsqlin
非线性最小二乘 lsqnonlin
非线性规划(NLP)

fminunc对于没有约束的问题,否则fmincon

混合整数非线性规划 遗传算法(全局优化工具箱)
多目标 gamultiobj(全局优化工具箱)

在这个表格中,是的表示求解器可用于该问题类型,x表示解算器不可用。

问题类型

LP MILP QP 二次 线性最小二乘 非线性最小二乘 NLP 适应
解算器
linprog

是的

x x x x x x x
intlinprog

是的

是的

x x x x x x
quadprog

是的

x

是的

是的

是的

x x x
coneprog

是的

x x

是的

x x x x
lsqlin x x x x

是的

x x x
lsqnonneg x x x x

是的

x x x
lsqnonlin x x x x

是的

是的

x x
fminunc

是的

x

是的

x

是的

是的

是的

x
fmincon

是的

x

是的

是的

是的

是的

是的

x
patternsearch(全局优化工具箱)

是的

x

是的

是的

是的

是的

是的

x
遗传算法(全局优化工具箱)

是的

是的

是的

是的

是的

是的

是的

是的

particleswarm(全局优化工具箱)

是的

x

是的

x

是的

是的

是的

x
simulannealbnd(全局优化工具箱)

是的

x

是的

x

是的

是的

是的

x
surrogateopt(全局优化工具箱)

是的

是的

是的

是的

是的

是的

是的

是的

gamultiobj(全局优化工具箱)

是的

是的

是的

是的

是的

是的

是的

是的

paretosearch(全局优化工具箱)

是的

x

是的

是的

是的

是的

是的

x

请注意

如果你选择lsqcurvefit作为最小二乘问题的解,解决使用lsqnonlin.的lsqcurvefitlsqnonlin求解器是相同的解决

谨慎

对于最大化问题(概率。ObjectiveSense“马克斯”“最大化”),不指定最小二乘求解器(以名称开头的求解器)lsq).如果你知道,解决抛出错误,因为这些解算器不能最大化。

对于方程求解,此表包含每种问题类型的可用求解器。在表格中,

  • *指示问题类型的默认求解器。

  • Y指示可用的求解器。

  • N表示不可用的求解器。

万博1manbetx支持的方程求解器

方程类型 lsqlin lsqnonneg fzero fsolve lsqnonlin
线性 * N Y(标量) Y Y
线性加界 * Y N N Y
标量非线性 N N * Y Y
非线性系统 N N N * Y
非线性系统加界 N N N N *

例子:“intlinprog”

数据类型:字符|字符串

指示使用自动微分(AD)非线性目标函数,指定为“汽车”(如可能,使用AD),“auto-forward”(如有可能,使用forward AD),自动翻转的(如果可能的话,使用反向AD),或者有限差分的(不要使用AD)。选择包括汽车在支持目标函数的情况下,使底层求解器在求解问题时使用梯度信息,如万博1manbetx万博1manbetx支持的变量和表达式优化操作.使用示例请参见自动微分在基于问题的优化中的作用

解算器默认选择以下AD类型:

  • 对于一般的非线性目标函数,fmincon默认情况下,为目标函数反转AD。fmincon当非线性约束数小于变量数时,默认为非线性约束函数的反向AD。否则,fmincon对于非线性约束函数,默认为转发AD。

  • 对于一般的非线性目标函数,fminunc默认为反向AD。

  • 对于最小二乘目标函数,fminconfminunc缺省情况下,为目标功能转发AD。有关基于问题的最小二乘目标函数的定义,请参见为基于问题的最小二乘编写目标函数

  • lsqnonlin当目标向量中的元素个数大于等于变量个数时,默认转发AD。否则,lsqnonlin默认为反向AD。

  • fsolve当方程的数量大于或等于变量的数量时,默认转发AD。否则,fsolve默认为反向AD。

例子:有限差分的

数据类型:字符|字符串

指示对非线性约束函数使用自动微分(AD),指定为“汽车”(如可能,使用AD),“auto-forward”(如有可能,使用forward AD),自动翻转的(如果可能的话,使用反向AD),或者有限差分的(不要使用AD)。选择包括汽车在支持约束函数的情况下,使底层求解器在求解问题时使用梯度信息,如万博1manbetx万博1manbetx支持的变量和表达式优化操作.使用示例请参见自动微分在基于问题的优化中的作用

解算器默认选择以下AD类型:

  • 对于一般的非线性目标函数,fmincon默认情况下,为目标函数反转AD。fmincon当非线性约束数小于变量数时,默认为非线性约束函数的反向AD。否则,fmincon对于非线性约束函数,默认为转发AD。

  • 对于一般的非线性目标函数,fminunc默认为反向AD。

  • 对于最小二乘目标函数,fminconfminunc缺省情况下,为目标功能转发AD。有关基于问题的最小二乘目标函数的定义,请参见为基于问题的最小二乘编写目标函数

  • lsqnonlin当目标向量中的元素个数大于等于变量个数时,默认转发AD。否则,lsqnonlin默认为反向AD。

  • fsolve当方程的数量大于或等于变量的数量时,默认转发AD。否则,fsolve默认为反向AD。

例子:有限差分的

数据类型:字符|字符串

指示对非线性约束函数使用自动微分(AD),指定为“汽车”(如可能,使用AD),“auto-forward”(如有可能,使用forward AD),自动翻转的(如果可能的话,使用反向AD),或者有限差分的(不要使用AD)。选择包括汽车在支持方程函数的情况下,使底层求解器在求解问题时使用梯度信息,如万博1manbetx万博1manbetx支持的变量和表达式优化操作.使用示例请参见自动微分在基于问题的优化中的作用

解算器默认选择以下AD类型:

  • 对于一般的非线性目标函数,fmincon默认情况下,为目标函数反转AD。fmincon当非线性约束数小于变量数时,默认为非线性约束函数的反向AD。否则,fmincon对于非线性约束函数,默认为转发AD。

  • 对于一般的非线性目标函数,fminunc默认为反向AD。

  • 对于最小二乘目标函数,fminconfminunc缺省情况下,为目标功能转发AD。有关基于问题的最小二乘目标函数的定义,请参见为基于问题的最小二乘编写目标函数

  • lsqnonlin当目标向量中的元素个数大于等于变量个数时,默认转发AD。否则,lsqnonlin默认为反向AD。

  • fsolve当方程的数量大于或等于变量的数量时,默认转发AD。否则,fsolve默认为反向AD。

例子:有限差分的

数据类型:字符|字符串

输出参数

全部折叠

解决方案,作为结构或OptimizationValues向量。索尔是一个OptimizationValues向量,当问题是多目标时。对于单目标问题,返回结构的字段是问题中优化变量的名称。看到optimvar

在解处的目标函数值,作为下列之一返回:

问题类型 返回值(s)
优化标量目标函数fx 实数f索尔
最小二乘 实数,解处残差的平方和
解决方程 如果概率。方程是一个单入口:解处函数值的实向量,意思是方程的左边减去右边
如果概率。方程有多个命名字段:结构与相同的名称概率。方程,其中每个字段值是命名方程的左侧减去右侧
多目标 矩阵中每个目标函数分量一行,每个解点一列。

提示

如果你忽略了要求fval对于定义为优化表达式或方程表达式的目标,可以使用

fval = evaluate(probo . objective,sol)

如果物镜被定义为只有一个字段的结构,

fval = evaluate(probe . objective . objectivename,sol)

如果目标是包含多个字段的结构,则编写循环。

fnames = fields(probs . equations);i = 1:length(fnames) fval.(fnames{i}) = evaluate(probs . equations .(fnames{i}),sol);结束

解算器停止的原因,作为枚举变量返回。你可以转换exitflag到它的数值等价物双(exitflag),并将其转换为等效的字符串字符串(exitflag)

的退出标志intlinprog解算器。

退出标志intlinprog 数值上等于 意义
OptimalWithPoorFeasibility 3.

该解相对于相对值是可行的ConstraintTolerance宽容,但绝对的宽容是不可行的。

IntegerFeasible 2 intlinprog提前停止,并找到一个整数可行点。
OptimalSolution

1

求解器收敛为一个解x

SolverLimitExceeded

0

intlinprog超过下列公差之一:

  • LPMaxIterations

  • MaxNodes

  • MaxTime

  • RootLPMaxIterations

看到公差和停止标准解决还在根节点的内存耗尽时返回此退出标志。

OutputFcnStop 1 intlinprog由输出函数或绘图函数停止。
NoFeasiblePointFound

2

没有找到可行点。

无限

-3

这个问题没有界限。

FeasibilityLost

9

解算器失去了可行性。

Exitflags3.9与具有很大不可行性的万博 尤文图斯解决方案相关。这些问题通常产生于具有较大条件数的线性约束矩阵,或者具有较大解分量的问题。要纠正这些问题,可以尝试缩放系数矩阵,消除冗余的线性约束,或者在变量上给出更严格的界限。

的退出标志linprog解算器。

退出标志linprog 数值上等于 意义
OptimalWithPoorFeasibility 3.

该解相对于相对值是可行的ConstraintTolerance宽容,但绝对的宽容是不可行的。

OptimalSolution 1

求解器收敛为一个解x

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations

NoFeasiblePointFound 2

没有找到可行点。

无限 -3

这个问题没有界限。

FoundNaN 4

在执行算法时遇到的值。

PrimalDualInfeasible 5

原始问题和对偶问题都不可行。

DirectionTooSmall 7

搜索方向太小。没有进一步的进展。

FeasibilityLost 9

解算器失去了可行性。

Exitflags3.9与具有很大不可行性的万博 尤文图斯解决方案相关。这些问题通常产生于具有较大条件数的线性约束矩阵,或者具有较大解分量的问题。要纠正这些问题,可以尝试缩放系数矩阵,消除冗余的线性约束,或者在变量上给出更严格的界限。

的退出标志lsqlin解算器。

退出标志lsqlin 数值上等于 意义
FunctionChangeBelowTolerance 3.

残留量的变化小于规定的公差选项。FunctionTolerance.(trust-region-reflective算法)

StepSizeBelowTolerance

2

步长小于选项。StepTolerance,满足约束条件。(内点算法)

OptimalSolution 1

求解器收敛为一个解x

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations

NoFeasiblePointFound 2

对于优化问题,问题是不可行的。或者,对于内点算法,步长小于选项。StepTolerance,但不满足约束条件。

对于方程问题,找不到解。

IllConditioned 4

不良条件会阻碍进一步的优化。

NoDescentDirectionFound 8

搜索方向太小。没有进一步的进展。(内点算法)

的退出标志quadprog解算器。

退出标志quadprog 数值上等于 意义
LocalMinimumFound 4

找到局部最小值;最小值不是唯一的。

FunctionChangeBelowTolerance 3.

目标函数值的变化小于规定的公差选项。FunctionTolerance.(trust-region-reflective算法)

StepSizeBelowTolerance

2

步长小于选项。StepTolerance,满足约束条件。(interior-point-convex算法)

OptimalSolution 1

求解器收敛为一个解x

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations

NoFeasiblePointFound 2

这个问题不可行。或者,对于内点算法,步长小于选项。StepTolerance,但不满足约束条件。

IllConditioned 4

不良条件会阻碍进一步的优化。

非凸

6

检测到非凸问题。(interior-point-convex算法)

NoDescentDirectionFound 8

无法计算步进方向。(interior-point-convex算法)

的退出标志coneprog解算器。

退出标志coneprog 数值上等于 意义
OptimalSolution 1

求解器收敛为一个解x

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations,或溶液时间(以秒为单位)超过选项。MaxTime

NoFeasiblePointFound 2

这个问题不可行。

无限 -3

这个问题没有界限。

DirectionTooSmall

7

搜索方向变得太小了。没有进一步的进展。

不稳定 -10年

这个问题在数值上不稳定。

的退出标志lsqcurvefitlsqnonlin解算器。

退出标志lsqnonlin 数值上等于 意义
SearchDirectionTooSmall 4

搜索方向的量级小于选项。StepTolerance

FunctionChangeBelowTolerance 3.

残差的变化小于选项。FunctionTolerance

StepSizeBelowTolerance

2

步长小于选项。StepTolerance

OptimalSolution 1

求解器收敛为一个解x

SolverLimitExceeded 0

超过的迭代次数选项。MaxIterations或者超出函数求值的次数选项。MaxFunctionEvaluations

OutputFcnStop 1

由输出函数或绘图函数停止。

NoFeasiblePointFound 2

对于优化问题,问题是不可行的:边界乌兰巴托是不一致的。

对于方程问题,找不到解。

的退出标志fminunc解算器。

退出标志fminunc 数值上等于 意义
NoDecreaseAlongSearchDirection 5

目标函数的预测下降小于选项。FunctionTolerance宽容。

FunctionChangeBelowTolerance 3.

目标函数值的变化小于选项。FunctionTolerance宽容。

StepSizeBelowTolerance

2

的变化x选项。StepTolerance宽容。

OptimalSolution 1

梯度的大小小于选项。OptimalityTolerance宽容。

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations或者函数求值的次数超过选项。MaxFunctionEvaluations

OutputFcnStop 1

由输出函数或绘图函数停止。

无限 -3

当前迭代的目标函数如下选项。ObjectiveLimit

的退出标志fmincon解算器。

退出标志fmincon 数值上等于 意义
NoDecreaseAlongSearchDirection 5

搜索方向上的方向导数值小于2*选项。OptimalityTolerance最大约束违反小于选项。ConstraintTolerance

SearchDirectionTooSmall 4

搜索方向的星等小于2*选项。StepTolerance最大约束违反小于选项。ConstraintTolerance

FunctionChangeBelowTolerance 3.

目标函数值的变化小于选项。FunctionTolerance最大约束违反小于选项。ConstraintTolerance

StepSizeBelowTolerance

2

的变化x小于选项。StepTolerance最大约束违反小于选项。ConstraintTolerance

OptimalSolution 1

一阶最优测度小于选项。OptimalityTolerance,最大约束违反小于选项。ConstraintTolerance

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations或者函数求值的次数超过选项。MaxFunctionEvaluations

OutputFcnStop 1

由输出函数或绘图函数停止。

NoFeasiblePointFound 2

没有找到可行点。

无限 -3

当前迭代的目标函数如下选项。ObjectiveLimit最大约束违反小于选项。ConstraintTolerance

的退出标志fsolve解算器。

退出标志fsolve 数值上等于 意义
SearchDirectionTooSmall 4

搜索方向的量级小于选项。StepTolerance,方程解。

FunctionChangeBelowTolerance 3.

目标函数值的变化小于选项。FunctionTolerance,方程解。

StepSizeBelowTolerance

2

的变化x小于选项。StepTolerance,方程解。

OptimalSolution 1

一阶最优测度小于选项。OptimalityTolerance,方程解。

SolverLimitExceeded 0

迭代次数超过选项。MaxIterations或者函数求值的次数超过选项。MaxFunctionEvaluations

OutputFcnStop 1

由输出函数或绘图函数停止。

NoFeasiblePointFound 2

收敛到一个不是根的点。

TrustRegionRadiusTooSmall -3

方程没有解。信任区域半径太小(trust-region-dogleg算法)。

的退出标志fzero解算器。

退出标志fzero 数值上等于 意义
OptimalSolution 1

方程解决。

OutputFcnStop 1

由输出函数或绘图函数停止。

FoundNaNInfOrComplex 4

,或在搜索包含符号变化的间隔时遇到的复值。

SingularPoint 5

可能会收敛到一个奇异点。

CannotDetectSignChange 6 没有发现两个函数值符号相反的点。

的退出标志patternsearch解算器。

退出标志patternsearch 数值上等于 意义
SearchDirectionTooSmall 4

该步进幅度小于机器精度,且约束违反小于ConstraintTolerance

FunctionChangeBelowTolerance 3.

的变化fval且网孔尺寸均小于规定公差,且约束违反均小于ConstraintTolerance

StepSizeBelowTolerance

2

的变化x而网目尺寸都比StepTolerance,约束违反小于ConstraintTolerance

SolverConvergedSuccessfully 1

没有非线性约束—网格尺寸的大小小于规定的公差,并且约束违反小于ConstraintTolerance

具有非线性约束-的大小互补措施(在此表后定义)小于√ConstraintTolerance,子问题使用比MeshTolerance,约束违反小于ConstraintTolerance

SolverLimitExceeded 0

达到函数求值或迭代的最大次数。

OutputFcnStop 1

由输出函数或绘图函数停止。

NoFeasiblePointFound 2

没有找到可行点。

在非线性约束解算器中互补措施向量的范数,它的元素是cλ,在那里c是否违反了非线性不等式约束λ为相应的拉格朗日乘数。

的退出标志遗传算法解算器。

退出标志遗传算法 数值上等于 意义
MinimumFitnessLimitReached 5

最小适应度极限FitnessLimit达到且约束违反小于ConstraintTolerance

SearchDirectionTooSmall 4

该步进幅度小于机器精度,且约束违反小于ConstraintTolerance

FunctionChangeBelowTolerance 3.

适应度函数的值在MaxStallGenerations代与约束的违背小于ConstraintTolerance

SolverConvergedSuccessfully 1

没有非线性约束-适应度函数值的平均累积变化MaxStallGenerations代数少于FunctionTolerance,约束违反小于ConstraintTolerance

具有非线性约束-互补性措施的大小(见互补措施(全局优化工具箱))小于√ConstraintTolerance,则使用小于的容差来解决子问题FunctionTolerance,约束违反小于ConstraintTolerance

SolverLimitExceeded 0

最大代数MaxGenerations超过了。

OutputFcnStop 1

由输出函数或绘图函数停止。

NoFeasiblePointFound 2

没有找到可行点。

StallTimeLimitExceeded 4

失速时限MaxStallTime超过了。

TimeLimitExceeded 5

时间限制MaxTime超过了。

的退出标志particleswarm解算器。

退出标志particleswarm 数值上等于 意义
SolverConvergedSuccessfully 1

目标值相对于上次的变化选项。MaxStallIterations迭代次数小于选项。FunctionTolerance

SolverLimitExceeded 0

超过的迭代次数选项。MaxIterations

OutputFcnStop 1

由输出函数或绘图函数停止迭代。

NoFeasiblePointFound 2

边界是不一致的:对一些磅(我)>乌兰巴托(我)

无限 -3

最佳目标函数值如下选项。ObjectiveLimit

StallTimeLimitExceeded 4

最佳目标函数值没有变化选项。MaxStallTime秒。

TimeLimitExceeded 5

超出运行时间选项。MaxTime秒。

的退出标志simulannealbnd解算器。

退出标志simulannealbnd 数值上等于 意义
ObjectiveValueBelowLimit 5

目标函数值小于选项。ObjectiveLimit

SolverConvergedSuccessfully 1

目标函数值的平均变化选项。MaxStallIterations迭代次数小于选项。FunctionTolerance

SolverLimitExceeded 0

最大代数MaxGenerations超过了。

OutputFcnStop 1

以输出函数或绘图函数结束的优化。

NoFeasiblePointFound 2

没有找到可行点。

TimeLimitExceeded 5

超过时间限制。

的退出标志surrogateopt解算器。

退出标志surrogateopt 数值上等于 意义
BoundsEqual 10

由于下列条件之一,问题具有唯一可行解:

  • 所有上界乌兰巴托(全局优化工具箱)等于下界吗(全局优化工具箱)

  • 线性等式约束Aeq*x = beq边界有一个唯一解点。

surrogateopt返回可行点和函数值,不执行任何优化。

FeasiblePointFound 3. 找到可行点。由于找到的新的可行点太少,求解器停止继续。
ObjectiveLimitAttained 1

目标函数值小于选项。ObjectiveLimit.此退出标志优先于退出标志10当两者都适用时。

SolverLimitExceeded 0

函数求值的次数超过选项。MaxFunctionEvaluations或者经过的时间超过选项。MaxTime.如果问题存在非线性不等式,则解是可行的。

OutputFcnStop 1

优化由输出函数或绘图函数终止。

NoFeasiblePointFound 2

由于下列原因之一,找不到可行点:

  • 下界磅(我)超过相应的上界乌兰巴托(我).或者一个或多个装天花板(磅(i))超过相应的地板(乌兰巴托(i))对我来说intcon(全局优化工具箱).在这种情况下,解决返回X = []Fval = []

  • Lb = b重点是是不可行的。在这种情况下,X = lb,Fval = objconstr(x)。Fval

  • 线性约束和整数约束(如果存在)与边界一起是不可行的。在这种情况下,解决返回X = []Fval = []

  • 边界约束、整数约束和线性约束是可行的,但在非线性约束下没有可行的解。在这种情况下,x最小最大值点是否为非线性约束不可行点,且Fval = objconstr(x)。Fval

的退出标志MultiStartGlobalSearch解决者。

退出标志MultiStartGlobalSearch 数值上等于 意义
LocalMinimumFoundSomeConverged 2 至少找到一个局部最小值。局部求解器的一些运行是收敛的。
LocalMinimumFoundAllConverged 1 至少找到一个局部最小值。局部求解器的所有运行都是收敛的。
SolverLimitExceeded 0 没有找到局部最小值。至少调用一次本地求解器,并且至少有一个本地求解器调用的迭代已用完。
OutputFcnStop 1 由输出函数或绘图函数停止。
NoFeasibleLocalMinimumFound 2 没有找到可行的局部最小值。
TimeLimitExceeded 5 MaxTime限制超过。
NoSolutionFound 8 没有找到解决方案。所有运行都有本地解算器退出标志-2或更小,并非都等于-2。
FailureInSuppliedFcn -10年 在目标或非线性约束函数中遇到失败。

的退出标志paretosearch解算器。

退出标志paretosearch 数值上等于 意义
SolverConvergedSuccessfully 1

满足下列条件之一:

  • 所有在位者的网格尺寸都小于选项。MeshTolerance并且约束(如果有的话)满足于内部选项。ConstraintTolerance

  • 帕累托分布的相对变化小于选项。ParetoSetChangeTolerance并且约束(如果有的话)满足于内部选项。ConstraintTolerance

  • 帕累托集合体积的相对变化小于选项。ParetoSetChangeTolerance并且约束(如果有的话)满足于内部选项。ConstraintTolerance

SolverLimitExceeded 0 迭代次数超过选项。MaxIterations,或者函数求值的次数超过选项。MaxFunctionEvaluations
OutputFcnStop 1 由输出函数或绘图函数停止。
NoFeasiblePointFound 2 求解器无法找到满足所有约束条件的点。
TimeLimitExceeded 5 优化时间超过选项。MaxTime

的退出标志gamultiobj解算器。

退出标志paretosearch 数值上等于 意义
SolverConvergedSuccessfully 1 几何平均值的相对变化值的价差选项。MaxStallGenerations代数少于选项。FunctionTolerance,最终价差小于过去的平均价差选项。MaxStallGenerations一代又一代。
SolverLimitExceeded 0 世代数超过选项。MaxGenerations
OutputFcnStop 1 由输出函数或绘图函数停止。
NoFeasiblePointFound 2 求解器无法找到满足所有约束条件的点。
TimeLimitExceeded 5 优化时间超过选项。MaxTime

关于优化过程的信息,作为结构返回。输出结构包含相关底层求解器输出字段中的字段,具体取决于哪个求解器解决被称为:

  • “遗传算法”输出(全局优化工具箱)

  • “gamultiobj”输出(全局优化工具箱)

  • “paretosearch”输出(全局优化工具箱)

  • “particleswarm”输出(全局优化工具箱)

  • “patternsearch”输出(全局优化工具箱)

  • “simulannealbnd”输出(全局优化工具箱)

  • “surrogateopt”输出(全局优化工具箱)

  • “MultiStart”“GlobalSearch”返回本地求解器的输出结构。此外,输出结构包含以下字段:

    • globalSolver——要么“MultiStart”“GlobalSearch”

    • objectiveDerivative—取值为本节末尾描述的值。

    • constraintDerivative-采用本节末尾描述的值,或“汽车”概率没有非线性约束。

    • 解算器—本地求解器,如“fmincon”

    • 当地的-包含有关优化的额外信息的结构。

      • 索尔-局部解,作为的万博 尤文图斯向量返回OptimizationValues对象。

      • x0-本地解算器的初始点,作为单元数组返回。

      • exitflag-本地解决方案的退出标志,作为整数向量返回。万博 尤文图斯

      • 输出-结构数组,每一行对应一个局部解决方案。每一行都是对应于一个局部解的局部输出结构。

解决包含附加字段解算器输出结构来标识所使用的求解器,例如“intlinprog”

解算器是一个非线性优化工具箱™求解器,解决包括一个或两个描述导数估计类型的额外字段。的objectivederivative如果合适的话,constraintderivative字段可以采用以下值:

  • “reverse-AD”用于反向自动微分

  • “forward-AD”用于正向自动分异

  • “有限差分”对于有限差分估计

  • “封闭”对于线性或二次函数

解的拉格朗日乘数,作为一个结构返回。

请注意

解决不返回λ解决方程的问题。

intlinprogfminunc解决,λ是空的,[].对于其他的解,λ有这些字段:

  • 变量-包含每个问题变量的字段。每个问题变量名是一个包含两个字段的结构:

    • 较低的-与变量相关的拉格朗日乘数下界属性,作为与变量大小相同的数组返回。非零项意味着解在下界。这些乘数在结构中lambda.Variables。variablename.Lower

    • -与变量相关的拉格朗日乘数UpperBound属性,作为与变量大小相同的数组返回。非零项意味着解在上界。这些乘数在结构中lambda.Variables。variablename.Upper

  • 约束-为每个问题约束包含一个字段。每个问题约束都在一个结构中,该结构的名称是约束名称,其值是与约束大小相同的数字数组。非零项意味着约束在解处是有效的。这些乘数在结构中lambda.Constraints。constraintname

    请注意

    约束数组的元素都具有相同的比较值(< ===,或>=),并且都是同一类型(线性、二次或非线性)。

算法

全部折叠

转换到求解器形式

在内部,解决函数通过调用求解器来解决优化问题。有关问题的默认求解器和支持的求解器,请参阅万博1manbetx“规划求解”论点。

之前解决可以调用求解器,将问题必须转换成求解器形式,要么通过解决或者其他一些相关的函数或对象。这种转换需要,例如,具有矩阵表示而不是优化变量表达式的线性约束。

算法的第一步是将优化表达式放入问题中。一个OptimizationProblem对象具有其表达式中使用的变量的内部列表。每个变量在表达式中都有一个线性索引和一个大小。因此,问题变量具有隐含的矩阵形式。的prob2struct函数执行从问题形式到求解形式的转换。使用示例请参见将问题转化为结构

对于非线性优化问题,解决使用自动分化计算目标函数和非线性约束函数的梯度。当目标函数和约束函数由万博1manbetx支持的变量和表达式优化操作不要使用fcn2optimexpr函数。当自动微分不适用时,求解器使用有限差分估计导数。有关自动区分的详细信息,请参见自动鉴别背景

对于默认和允许的解算器解决调用,根据问题的目标和约束,见“规划求解”.方法覆盖默认值“规划求解”名称-值对参数解决

对于这个算法intlinprog用于解决MILP问题,参见intlinprog算法.对于那些linprog用于解决线性规划问题,参见线性规划算法.对于那些quadprog用于解决二次规划问题,参见二次规划算法.有关线性或非线性最小二乘求解器算法,请参见最小二乘(模型拟合)算法.有关非线性求解器算法,请参见无约束非线性优化算法约束非线性优化算法

对于非线性方程的求解,解决在内部将每个方程表示为左右两边的差。然后解决试图最小化方程式各分量的平方和。有关求解非线性方程组的算法,请参见方程求解算法.当问题有边界时,解决调用lsqnonlin使方程式各分量的平方和最小。看到最小二乘(模型拟合)算法

请注意

如果你的目标函数是平方和,你想解决要识别它,把它写成either规范(expr) ^ 2总和(expr。^ 2),而不是expr‘* expr或者其他形式。内部解析器只有在表示为范数的平方或显式平方和时才能识别平方和。有关详情,请参阅为基于问题的最小二乘编写目标函数.使用示例请参见非负线性最小二乘,基于问题

自动分化

AD (Automatic differentiation)适用于解决prob2struct在以下条件下发挥作用:

  • 支持目标函数和约束函数,如万博1manbetx万博1manbetx支持的变量和表达式优化操作.它们不需要使用fcn2optimexpr函数。

  • 解算器过来了解决fminconfminuncfsolve,或lsqnonlin

  • 对于优化问题,“ObjectiveDerivative”“ConstraintDerivative”的名称-值对参数解决prob2struct设置为“汽车”(默认),“auto-forward”,或自动翻转的

  • 对于方程问题,“EquationDerivative”选项设置为“汽车”(默认),“auto-forward”,或自动翻转的

AD应用时 支持的所有约束函数万博1manbetx 不支持一个或多个约束万博1manbetx
目标功能支持万博1manbetx AD用于目标和约束 AD仅用于客观
目标功能不支持万博1manbetx AD仅用于约束 AD未使用

当这些条件不满足时,解决通过有限差分估计梯度,和prob2struct不会在其生成的函数文件中创建渐变。

解算器默认选择以下AD类型:

  • 对于一般的非线性目标函数,fmincon默认情况下,为目标函数反转AD。fmincon当非线性约束数小于变量数时,默认为非线性约束函数的反向AD。否则,fmincon对于非线性约束函数,默认为转发AD。

  • 对于一般的非线性目标函数,fminunc默认为反向AD。

  • 对于最小二乘目标函数,fminconfminunc缺省情况下,为目标功能转发AD。有关基于问题的最小二乘目标函数的定义,请参见为基于问题的最小二乘编写目标函数

  • lsqnonlin当目标向量中的元素个数大于等于变量个数时,默认转发AD。否则,lsqnonlin默认为反向AD。

  • fsolve当方程的数量大于或等于变量的数量时,默认转发AD。否则,fsolve默认为反向AD。

请注意

在由。转换的问题中使用自动导数prob2struct,传递指定这些衍生品的选项。

选项= optimoptions(“fmincon”“SpecifyObjectiveGradient”,真的,“SpecifyConstraintGradient”,真正的);问题。选项=选项;

目前,AD只适用于一阶导数;它不适用于二阶或更高阶导数。所以,例如,如果你想使用一个分析的Hessian来加速你的优化,你不能使用解决,并且必须使用中描述的方法在基于问题的工作流中提供衍生品

扩展功能

版本历史

在R2017b中引入

全部展开

从R2018b开始的错误