最优化之 DFP 算法考试题代码:Dfp.m 文件function [x,val,k]=dfp(fun,gfun,x0) %功能 : 用 DFP算法求解无约束问题 : min f(x) %输入 : x0 是初始点 , fun, gfun 分别是目标函数及其梯度%输出 : x, val 分别是近似最优点和最优值, k 是迭代次数maxk=1e5; %给出最大迭代次数rho=0.55;sigma=0.4; epsilon=1e-5; k=0; n=length(x0); Hk=inv(feval('He',x0)); %Hk=eye(n); while(k0) Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk); end k=k+1; x0=x; end val=feval(fun,x0); fun.m 文件( 此处为目标函数,因题而异) function f=fun(x) f=100*(x(1)^2-x(2))^2+(x(1)-1)^2; gfun.m 文件(目标函数的梯度)function gf=gfun(x) gf=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]'; He.m 文件( Hesse阵)function He=He(x) He=[1200*x(1)^2-400*x(2)+2, -400*x(1); -400*x(1), 200]; 题 目 : 利 用DFP算 法 求 解212122218634minxxxxxxxf,221,RxxxT,取Tx1,10。解: 打开 MATLAB 软件,编写程序中写到的m 文件并保存,其中:函数和梯度 gfu.m 和 hesse矩阵需要手工计算然后写入,对于 n 元函数),,,(21nxxxf梯度公式:nxfxfxffgradf,,,21hesse矩阵(黑塞矩阵公式) :2222122222212212212212)(nnnnnxfxxfxxfxxfxfxxfxxfxxfxfxH对于此题,212122218634xxxxxxxf,则848,6321221xxxxf8332)(xHfun.m 文件( 此处为目标函数,因题而异) function f=fun(x)f=x(1)^2+4*x(2)^2-3*x(1)*x(2)-6*x(1)+8*x(2);function gf=gfun(x)gf=[2*x(1)-3*x(2)-6, 8*x(2)-3*x(1)+8]';function He=He(x)He=[2,-3;-3,8];(1) 输入 x0=[1,1]';[x,val,k]=dfp('fun','gfun',x0)(2) 显示结果: