这个是最优化方法的DFP算法


function DFP
syms x1 x2 t;
%f=4*(x1-5)^2+(x2-6)^2;
f=x1^2+4*x2^2;
%X0=[8;9];
X0=[1;1];
e=0.01;
g=jacobian(f).';
f0=subs(f,[x1,x2],[X0(1),X0(2)])
g0=subs(g,[x1,x2],[X0(1),X0(2)])
H0=[1 0;0 1];
P0=-g0
k=0;
while 1
    fp=subs(f,[x1,x2],[X0+t*P0])
    tk=solve(diff(fp,t))
    X1=X0+tk*P0
    
    f1=subs(f,[x1,x2],[X1(1),X1(2)])
    g1=subs(g,[x1,x2],[X1(1),X1(2)])
    
    if norm(g1)<=e
        X1,f1
    else
        if k==2
            X0=X1;
            f0=f1;
            g0=g1;
            H0=[1 0;0 1];
            P0=-g0;
            k=0;
        else
            s0=X1-X0;
            y0=g1-g0;
            H1=H0+(s0*s0')/(s0'*y0)-(H0*y0*y0'*H0)/(y0'*H0*y0);
            P1=-H1*g1;
            k=k+1;
            X0=X1;
        end
    end
end