• 大小: 2KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-22
  • 语言: Matlab
  • 标签: DFP  

资源简介

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

评论

共有 条评论