DFP变尺度法
- 格式:docx
- 大小:16.14 KB
- 文档页数:6
约束变尺度法Newton 法最突出的优点是收敛速度快,在这一点上其它算法无法比拟的。
因此,建议凡是Hesse 矩阵比较容易求出的问题,尽可能使用Newton 法求解。
但是,Newton 法也有一个严重缺陷,就是每次迭代都要计算目标函数的Hesse 矩阵和它的逆矩阵,当问题的维数较大时,计算量迅速增加,从而就抵消了Newton 法的优点。
为此,人们开始寻找一种算法既可以保持Newton 法收敛速度快的优点,又可以摆脱关于Hesse 矩阵的计算,这就是变尺度算法。
变尺度法是一种非常好的方法,其中DFP 算法和BFGS 算法。
可以说,直到目前为止,在不用Hesse 矩阵的方法中是最好的算法。
一、拟Newton 法为了吸收Newton 法收敛速度快的优点,同时避免Newton 法每次迭代都要计算目标函数的Hesse 矩阵和它的逆矩阵,人们提出了具有超线性收敛的拟Newton 法。
(一)拟Newton 法的基本原理在Newton 法中的基本迭代公式kk k k P t X X +=+1,其中1=k t ,)()]([12kkk Xf Xf P ∇∇-=-令)()(2kkkkXf gXf G∇=∇=,于是有,,,,21011=-=-+k g G X X k k k k其中X0是初始点, gk 和 Gk 分别是目标函数f (X )在点 Xk 的梯度和Hesse 矩阵.为了消除这个迭代公式中的Hesse 逆矩阵G-1k ,可用某种近似矩阵Hk=Hk(Xk)来替换它,即构造一矩阵序列{Hk}去逼近Hesse 逆矩阵序列{G-1k},此时kk k k g H X X -=+1事实上,式中 Pk= -Hk gk 无非是确定了第k 次迭代的搜索方向.为了取得更大的灵活性,考虑更一般的迭代公式kk k k k g H t X X -=+1其中步长tk 通过从Xk 出发沿Pk= -Hk gk 作直线搜索来确定.此式代表很广的一类迭代公式.例如,当Hk=I (单位矩阵)时,它变为最速下降法的迭代公式。
【MATLAB与机械设计】多维优化之DFP变尺度法1.程序框图其中E矩阵的求解公式为:2.MATLAB可执⾏程序function [k,x_min,f_min]= variable_metric_algorithm(f,x,exp)%% 程序说明%{该程序应⽤于多维⽆条件优化问题中的变尺度法变量说明:输⼊值部分f为⽬标函数,对于⽬标函数中⾃由变量的个数没有要求x为初值矩阵,要求在调⽤函数是必须为⼀⾏n列的形式,否则会导致后期维度出现错误exp为精度返回值部分k为迭代次数x_min为函数的局部极⼩值数列f_min为函数的局部极⼩值调⽤⽅法:clcclearsyms x1 x2%所有的⾃由变量且必须由x1,x2,x3……表⽰x=[0,0];f=x1^2+x2^2-x1*x2-10*x1-4*x2+60;exp=0.01;[k,x_min,f_min]=variable_metric_algorithm(f,x,exp)%}%% 确定维度x_size=size(x,2);x_i= sym(zeros(1,x_size));%class(x_i)for i=1:x_sizesyms(['x' num2str(i)]);x_i(1,i)=['x' num2str(i)];end%% 迭代主题grad_f=gradient(f,x_i);H=eye(x_size);fz_d=-subs(grad_f,x_i,x);fz_d=double(fz_d);g0=fz_d;k=0;while 1s=-H*g0;syms as=s';f_b=subs(f,x_i,x+a.*s);f_bd=diff(f_b,a);a=solve(f_bd==0,a);a=double(a);x_1=x+a*s;fz_d1=-subs(grad_f,x_i,x_1);fz_d1=double(fz_d1);fz_dm1=norm(fz_d1);g1=fz_d1;if fz_dm1<=expx_min=x_1;f_min=subs(f,x_i,x_min);k=k;break;elseif k==x_sizefz_d=-subs(grad_f,x_i,x_1);fz_d=double(fz_d);k=0;H=eye(x_size);elsedeta_x=x_1-x;deta_f_d=fz_d1-fz_d;A=(deta_x')*(deta_x);sub_A=(deta_x)*deta_f_d;B=H*deta_f_d*(deta_f_d')*H; sub_B=(deta_f_d')*H*deta_f_d; E=A./sub_A-B./sub_B;H=H+E;k=k+1;endx=x_1;g0=g1;endendend。