主要内容gydF4y2Ba

最小化与梯度和黑森gydF4y2Ba

这个例子展示了如何用显式三对角黑森矩阵求解非线性最小化问题gydF4y2Ba HgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba .问题是找到gydF4y2Ba xgydF4y2Ba 最小化gydF4y2Ba

fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba =gydF4y2Ba ∑gydF4y2Ba 我gydF4y2Ba =gydF4y2Ba 1gydF4y2Ba ngydF4y2Ba -gydF4y2Ba 1gydF4y2Ba (gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba +gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba 2gydF4y2Ba )gydF4y2Ba (gydF4y2Ba xgydF4y2Ba 我gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba )gydF4y2Ba )gydF4y2Ba ,gydF4y2Ba

在哪里gydF4y2Ba ngydF4y2Ba = 1000。gydF4y2Ba

辅助函数gydF4y2BabrownfghgydF4y2Ba在gydF4y2Ba本例结束gydF4y2Ba计算gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba ,其梯度gydF4y2Ba ggydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba ,是黑森语gydF4y2Ba HgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba .要指定gydF4y2BafminuncgydF4y2Ba求解器利用导数信息,设置gydF4y2BaSpecifyObjectiveGradientgydF4y2Ba而且gydF4y2BaHessianFcngydF4y2Ba选择使用gydF4y2BaoptimoptionsgydF4y2Ba.用黑森枪gydF4y2BafminuncgydF4y2Ba,你必须使用gydF4y2Ba“信赖域”gydF4y2Ba算法。gydF4y2Ba

选项= optimoptions(@fminunc,gydF4y2Ba“算法”gydF4y2Ba,gydF4y2Ba“信赖域”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“SpecifyObjectiveGradient”gydF4y2Ba,真的,gydF4y2Ba“HessianFcn”gydF4y2Ba,gydF4y2Ba“目标”gydF4y2Ba);gydF4y2Ba

设置参数gydF4y2BangydF4y2Ba到1000,并设置初始点gydF4y2BaxstartgydF4y2Ba到-1表示奇数分量,到+1表示偶数分量。gydF4y2Ba

N = 1000;Xstart = -ones(n,1);Xstart (2:2:n) = 1;gydF4y2Ba

求的最小值gydF4y2Ba fgydF4y2Ba .gydF4y2Ba

[x,fval,exitflag,output] = fminunc(@brownfgh,xstart,options);gydF4y2Ba
找到局部极小值。优化完成,因为梯度的大小小于最优性公差的值。gydF4y2Ba

检查解决方案和解决过程。gydF4y2Ba

disp (fval)gydF4y2Ba
2.8709 e-17gydF4y2Ba
disp (exitflag)gydF4y2Ba
1gydF4y2Ba
disp(输出)gydF4y2Ba
迭代:7 funcCount: 8步长:0.0039 cgiterations: 7 firstorderopt: 4.7948e-10算法:'信任区域'消息:'本地最小值找到....' constrviolation: []gydF4y2Ba

这个函数gydF4y2Ba fgydF4y2Ba (gydF4y2Ba xgydF4y2Ba )gydF4y2Ba 是幂的平方和,因此是非负的。解决方案gydF4y2BafvalgydF4y2Ba接近于零,所以它显然是最小值。退出标志gydF4y2Ba1gydF4y2Ba也表明gydF4y2BafminuncgydF4y2Ba找到解决方案。的gydF4y2Ba输出gydF4y2Ba结构表明gydF4y2BafminuncgydF4y2Ba只需要7次迭代就可以得到解决方案。gydF4y2Ba

显示解决方案中最大和最小的元素。gydF4y2Ba

disp (max (x))gydF4y2Ba
1.1987平台以及gydF4y2Ba
disp (min (x))gydF4y2Ba
-1.1987平台以及gydF4y2Ba

这个解非常接近于所有的元素gydF4y2BaX = 0gydF4y2Ba.gydF4y2Ba

Helper函数gydF4y2Ba

此代码创建gydF4y2BabrownfghgydF4y2Bahelper函数。gydF4y2Ba

函数gydF4y2Ba[f,g,H] = brownfgh(x)gydF4y2Ba非线性最小化问题(函数,它的梯度gydF4y2Ba%和黑森)gydF4y2Ba%文档示例gydF4y2Ba版权所有:The MathWorks, Inc.gydF4y2Ba计算函数值。gydF4y2Ban =长度(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)总和;gydF4y2Ba%gydF4y2Ba计算梯度。gydF4y2Ba如果gydF4y2BaNargout > 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))+gydF4y2Ba...gydF4y2Ba2 * x (i)。* ((x (i + 1)。^ 2)。^ (x (i) ^ 2 + 1))。*日志(x (i + 1)。^ 2);g (i + 1) = g (i + 1) +gydF4y2Ba...gydF4y2Ba2 * x (i + 1) * ((x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1))。*日志(x (i)。^ 2)+gydF4y2Ba...gydF4y2Ba2 * (x(我)^ 2 + 1)。* x (i + 1) * ((x (i + 1)。^ 2)。^ (x(我)^ 2));gydF4y2Ba结束gydF4y2Ba%gydF4y2Ba计算(稀疏,对称)黑森矩阵gydF4y2Ba如果gydF4y2BaNargout > 2 v= 0 (n,1);我= 1:(n - 1);v (i) = 2 * (x (i + 1)。^ 2 + 1)。* ((x (i) ^ 2) ^ (x (i + 1)。^ 2))+gydF4y2Ba...gydF4y2Ba4 * (x (i + 1) ^ 2 + 1)。* (x (i + 1)。^ 2)。* (x (i) ^ 2) * ((x (i) ^ 2) ^ ((x (i + 1)。^ 2)1))+gydF4y2Ba...gydF4y2Ba2 * ((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) +gydF4y2Ba...gydF4y2Ba2 * (x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1)。*(日志(x(我)^ 2))+gydF4y2Ba...gydF4y2Ba4 * (x (i + 1)。^ 2)。* ((x (i) ^ 2) ^ (x (i + 1) ^ 2 + 1))。*((日志(x(我)^ 2))^ 2)+gydF4y2Ba...gydF4y2Ba2 * (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))+gydF4y2Ba...gydF4y2Ba4 * 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;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

相关的话题gydF4y2Ba