⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfp.m

📁 最优化方法的一些基本算法的实现:1
💻 M
字号:
%用DFP方法求解
%               min{(1-x1)^2+2*(x2-x1^2)^2},
%初始点为x0=(0,0)',初始矩阵为单位矩阵,迭代三次。

clc;
clear;
syms x1 x2 times a b w;
fx=(1-x1)^2+2*(x2-x1^2)^2;
fab=subs(fx,{x1,x2},{a,b});
g=[diff(fx,x1);diff(fx,x2)];
G=[diff(g(1),x1) diff(g(1),x2);diff(g(2),x1) diff(g(2),x2)];
H=eye(2);
x1=0;x2=0;
g_old=eval(g);
d=-H*eval(g);
for times=1:3
    f=subs(fab,{a,b},{x1+w*d(1),x2+w*d(2)});
    t=diff(f);
    alfa=eval(solve(t));
    
    for k=1:length(alfa) 
        alfa_logic(k) = isreal(alfa(k)); 
    end 
    alfa_real=alfa(alfa_logic); 

    x1=x1+alfa_real*d(1);
    x2=x2+alfa_real*d(2); 
    if(times<3)
        s=[alfa_real*d(1);alfa_real*d(2)];
        y=eval(g)-g_old;
        H=H+(s*s')/(s'*y)-(H*y*y'*H)/(y'*H*y);
        g_old=eval(g);
        d=-H*eval(g);
        if d==[0;0];
            break;
        end
    end
end
min=[x1;x2];
fprintf('经过%d次迭代,求得极小点为(%f,%f),极小值为%f',times,min(1),min(2),eval(fx));     

⌨️ 快捷键说明

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