资源简介
DFP 二元搜索
代码片段和文件信息
function [Xkfx0]=DFP(f X0 var eps)
%初始化符号函数,梯度,维数等
syms var t;
g = jacobian(f)‘; %Jacobian转置->Grad
fx = matlabFunction(f); %符号函数->函数句柄(R2009以上支持)
gx = matlabFunction(g);
n = length(var); %维数
X = X0; Xk = X0;
while 1
fx0 = fx(X(1)X(2)); gx0 = gx(X(1)X(2));
Hk = eye(n); %n*n单一矩阵
Pk = -gx0; %初始方向
k = 0; %迭代次数
while 1
Y = Xk + t*Pk;
y = fx(Y(1)Y(2));
tk=Gold(y1.0e-2);
Xk = Xk + tk*Pk;
fx1 = fx(Xk(1)Xk(2));
gx1 = gx(Xk(1)Xk(2));
if norm(gx1) < eps
X = Xk; fx0 = fx1;
break;
end
Sk = Xk - X; Yk = gx1 - gx0;
Hk = Hk + Sk*Sk‘/(Sk‘*Yk) - Hk*(Yk)*Yk‘*Hk/(Yk‘*Hk*Yk);
Pk = -Hk*gx1; %校正方向
k = k+1;
end
if norm(gx1) < eps
disp(‘X(k+1) = ‘); disp(Xk);
disp(‘F(K+1) = ‘); disp(fx0);
break;
end
end
function t = Gold(feps)
%利用黄金分割法求步长
%此处显示详细说明
% [ab]=minJT(f00.1eps);
a=-0.5;
b=1;
d=b-a;
c=0.618;
ta=a+c*(b-a);
tb=a+(1-c)*(b-a);
k=0;
% fx=matlabFunction(f);
while d>eps
% fa=fx(ta);
% fb=fx(t
评论
共有 条评论