dfp.m

来自「用matlab语言来实现DFP算法」· M 代码 · 共 28 行

M
28
字号
function opt=DFP()
%
% DFP算法求无约束优化问题的最小值
%
global x p k H
x=[2 2]';                                             %初始迭代点
H=eye(2);                                             %初始矩阵H0=E
eps=1e-32;                                            %控制误差
g=dfun(x);
k=0;                                                  %迭代次数
while 1
    p=-1*H*g;
    t_min=fminbnd(@f_search,0,10);                    %进行一维搜索求t的最小值
    temp_x=x;
    x=x+t_min*p;
    temp_g=g;
    g=dfun(x);
    if norm(g)<eps                                     %是否满足的要求的精度
        opt=x;                                         %求得最优值opt
        break;
    end
    s=x-temp_x;
    y=g-temp_g;
    H=H-(1/(y'*H*y))*(H*y*y'*H)+(1/(y'*s))*(s*s');     %对H进行修正
    k=k+1;
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?