主要内容

与线性等式约束最小化,信赖域反射算法

fmincontrust-region-reflective算法可以减少非线性目标函数服从线性等式约束(没有界限或任何其他限制)。例如,最小化

f ( x ) = = 1 n - - - - - - 1 ( ( x 2 ) ( x + 1 2 + 1 ) + ( x + 1 2 ) ( x 2 + 1 ) ) ,

线性等式约束。这个例子需要 n = 1 0 0 0

创建问题

browneq.mat文件包含矩阵Aeq说真的,它代表了线性约束Aeq * x =说真的。的Aeq矩阵表示线性约束(100 100行Aeq是一个100 -,- 1000矩阵)。加载browneq.mat数据。

负载browneq.mat

brownfgh辅助函数在这个例子实现了目标函数,包括其梯度和黑森。

设置选项

trust-region-reflective算法要求目标函数包括梯度。该算法在目标函数接受一个黑森。将选项设置为包括所有的导数信息。

选择= optimoptions (“fmincon”,“算法”,“trust-region-reflective”,“SpecifyObjectiveGradient”,真的,“HessianFcn”,“目标”);

解决问题

设置初始点1为奇数项和偶数项+ 1。

n = 1000;x0 =的(n - 1);x0 (2:2: n) = 1;

这个问题没有边界,线性不等式约束,或非线性约束,所以设置这些参数[]

一个= [];b = [];磅= [];乌兰巴托= [];nonlcon = [];

调用fmincon来解决这个问题。

[x, fval exitflag、输出]=fmincon (@brownfgh x0, A、b Aeq,说真的,磅,乌兰巴托,nonlcon,选项);
局部最小值。fmincon停止是因为最后的函数值的变化相对于其初始值小于公差的值函数。

检查解决方案和解决方案的过程

检查出口标志,目标函数值和约束违反。

disp (exitflag)
3
disp (fval)
205.9313
disp (output.constrviolation)
2.2338 e-13

的exitflag价值3表示fmincon停止因为目标函数的变化值小于公差FunctionTolerance。最后给出了目标函数值fval。满足约束,如图所示output.constrviolation,它显示一个非常小的数字。

计算约束违反自己,执行下面的代码。

规范(Aeq * x-beq正)
ans = 2.2338 e-13

Helper函数

下面的代码创建brownfghhelper函数。

函数[f, g, H] = brownfgh (x)% BROWNFGH非线性最小化问题(函数,其梯度%,黑森)。%的文档的例子。% 1990 - 2019版权MathWorks公司。%评估函数。n =长度(x);y = 0 (n, 1);我= 1:(n - 1);y (i) = (x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1) + (x (i + 1)。^ 2)。^ (x (i) ^ 2 + 1);f = (y)总和;%计算梯度。如果nargout > 1 i = 1: (n - 1);g = 0 (n, 1);g (i) = 2 * (x (i + 1)。^ 2 + 1)。* x (i)。* ((x (i) ^ 2) ^ (x (i + 1)。^ 2)) +2 * x (i)。* ((x (i + 1)。^ 2)。^ (x (i) ^ 2 + 1))。*日志(x (i + 1)。^ 2);g (i + 1) = g (i + 1) +2 * x (i + 1) * ((x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1))。*日志(x (i)。^ 2) +2 * (x(我)^ 2 + 1)。* x (i + 1) * ((x (i + 1)。^ 2)。^ (x(我)^ 2));结束%评估(稀疏对称)海赛矩阵如果nargout > 2 v = 0 (n, 1);我= 1:(n - 1);v (i) = 2 * (x (i + 1)。^ 2 + 1)。* ((x (i) ^ 2) ^ (x (i + 1)。^ 2)) +4 * (x (i + 1) ^ 2 + 1)。* (x (i + 1)。^ 2)。* (x (i) ^ 2) * ((x (i) ^ 2) ^ ((x (i + 1)。^ 2) 1)) +2 * ((x (i + 1)。^ 2)。^ (x (i) ^ 2 + 1))。*(日志(x (i + 1)。^ 2));v (i) =(我)+ 4 * (x (i) ^ 2) * ((x (i + 1)。^ 2)。^ (x (i) ^ 2 + 1))。*((日志(x (i + 1)。^ 2)) ^ 2);v (i + 1) = (i + 1) +2 * (x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1)。*(日志(x(我)^ 2))+4 * (x (i + 1)。^ 2)。* ((x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1))。*((日志(x(我)^ 2))^ 2)+2 * (x(我)^ 2 + 1)。* ((x (i + 1)。^ 2)。^ (x(我)^ 2));v (i + 1) = (i + 1) + 4 * (x (i) ^ 2 + 1)。* (x (i + 1)。^ 2)。* (x (i) ^ 2) * ((x (i + 1)。^ 2)。^ (x (i) ^ 2 - 1));v0 = v;v = 0 (n - 1, 1);v (i) = 4 * x (i + 1)。* x (i)。* ((x (i) ^ 2) ^ (x (i + 1)。^ 2)) +4 * x (i + 1) * (x (i + 1) ^ 2 + 1)。* x (i)。* ((x (i) ^ 2) ^ (x (i + 1)。^ 2))。*日志(x(我)^ 2);v (i) = (1) + 4 * x (i + 1)。* x (i)。* ((x (i + 1)。^ 2)。^ (x(我)^ 2)。*日志(x (i + 1)。^ 2);v (i) = (i) + 4 * x (i)。* ((x (i + 1)。^ 2)。^ (x(我)^ 2)。* x (i + 1);v1 = v;i = [(1: n)”; (1: (n - 1)));j = [(1: n); (2: n));s = (v0; 2 * v1);H =稀疏(i, j s n, n);H = (H + H) / 2;结束结束

相关的话题