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

📄 dfp.m

📁 此源码包是我本学期最优化理论课程的大作业
💻 M
字号:
%DFP法
clear;
syms x1 x2;
fun=fun1;
x0=[0;0];%设置初值点
x=x0;
Dfx=[diff(fun,x1);diff(fun,x2)];
g=subs(Dfx,[x1 x2],x);
fx=subs(fun,[x1 x2],x);
d=-g;
e=1e-6;%设置精度
num=0;
alpha=1;
sigma=0.5;
rho=0.5;
%开始用Armijo型线搜索方法求步长,并取σ=0.5,ρ=0.5
while(subs(fun,[x1 x2],x+alpha*d)>(subs(fun,[x1 x2],x)+sigma*alpha*g'*d))
    alpha=rho*alpha;
end
x_next=x+alpha*d;
num=num+1;
fx=subs(fun,[x1 x2],x);
g_next=subs(Dfx,[x1 x2],x_next);
g_fan=sqrt(g'*g);
k=1;
H=eye(2);
while(g_fan>e)
    if(k==2)
        H_next=eye(2);
        k=1;
    else
        p=x_next-x;
        q=g_next-g;
        H_next=H+(p*p')/(p'*q)-(H*q*q'*H)/(q'*H*q);
        k=k+1;
    end
    H=H_next;
    g=g_next;
    x=x_next;
    d=-H*g;
    alpha=1;
    sigma=0.5;
    rho=0.5;
    %开始用Armijo型线搜索方法求步长,并取σ=0.5,ρ=0.5
    while(subs(fun,[x1 x2],x+alpha*d)>(subs(fun,[x1 x2],x)+sigma*alpha*g'*d))
        alpha=rho*alpha;
    end
    x_next=x+alpha*d;
    g_next=subs(Dfx,[x1 x2],x_next);
    g_fan=sqrt(g_next'*g_next);
    num=num+1;
    fx=subs(fun,[x1 x2],x);
end
x=x_next;
fx=subs(fun,[x1 x2],x);
fprintf('\nDFP法\n结果:\n优化精度为ε=%d\n初指点x0=[%d %d]\n最优点x=[ %d %d ] \n最优值fx=%d \n梯度模||g(x)||=%d \n迭代次数k=%d\n',e,x0(1),x0(2),x(1),x(2),fx,g_fan,num);
[x,y]=meshgrid(-3:0.1:3,-3:0.1:3);
z=(x.^2-y+1).^2+(x-cos(pi/2*y)).^2;
meshc(x,y,z);
xlabel('x1');
ylabel('x2');

⌨️ 快捷键说明

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