最优化计算方法课程设计
2015.12.7
中国矿业大学(北京)
2015年11月30日 上机题目 题目21
编写程序实现多元函数的牛顿法。
编写函数 [x,minf]=minNewton(f,x0,var,eps). 其中f为目标函数,x0为初始点,
var自变量向量,eps为算法终止的精度。 用牛顿法求解多维无约束优化问题minf(x)。 算法为:
function [x,minf]=minNewton(f,x0,var,eps) xk=x0; k=0;
df=jacobian(f,var); ddf=jacobian(df,var); k1=0;
kmax=10000; while(k1 minf=double(subs(f,var,xk)); break; end dk=-inv(subs(ddf,var,xk))*subs(df,var,xk)'; xk=xk+dk'; k=k+1; k1=k1+1; end if(k1>=kmax) x='error'; minf='error'; end 题目22 用牛顿法求解无约束二元函数f(t,s)=(t-4)2+(s+2)2+1的极小值,初始点取 x0=(0,0)T。 在Matlab输入如下: clear clc syms t; syms s; f=(t-4)^2+(s+2)^2+1; x0=[0,0]; var=[t,s]; eps=0.01; 1 中国矿业大学(北京) [x,minf]=minNewton(f,x0,var,eps) 结果为: x =[4 ,-2] minf = 1 题目23 编写程序实现多元函数的修正牛顿法。 编写函数 [x,minf]=modifiedNewton(f,x0,var,eps). 其中f为目标函数,x0为初始点, var自变量向量,eps为算法终止的精度。 用修正牛顿法求解多维无约束优化问题minf(x)。 算法为: function [x,minf]=modifiedNewton(f,x0,var,eps) xk=x0; k=0; df=jacobian(f,var); ddf=jacobian(df,var); syms alpha1; k1=0; kmax=10000; while(k1 minf=double(subs(f,var,xk)); break; end dk=-inv(subs(ddf,var,xk))*subs(df,var,xk)'; [alphak,temp]=Goldstein(subs(f,var,xk+alpha1*dk'),inf,0.4,0.75,2,eps,alpha1); if(alphak=='error') x='error'; minf='error'; break; end xk=xk+alphak*dk'; k=k+1; k1=k1+1; end if(k1>=kmax) x='error'; minf='error'; end 题目24 2 中国矿业大学(北京) 用修正牛顿法求解无约束二元函数f(t,s)=(t-4)2+(s+2)2+1的极小值,初始点取x0=(0,0)T。 在Matlab输入如下: clear clc syms t; syms s; f=(t-4)^2+(s+2)^2+1; x0=[0,0]; var=[t,s]; eps=0.01; [x,minf]=modifiedNewton(f,x0,var,eps) 结果为: x = [3.9958 ,-1.9979] minf =1.0000 题目25 编写程序实现多元函数的DFP法。 编写函数 [x,minf]=QNDFP(f,x0,var,eps). 其中f为目标函数,x0为初始点, var自变量向量,eps为算法终止的精度。 用DFP法求解多维无约束优化问题minf(x)。 算法为: function [x,minf]=QNDFP(f,x0,var,eps) xk=x0; k=0; n=length(xk); Hk=eye(n); syms alpha1; df=jacobian(f,var); k1=0; kmax=1000; s=2; while(k1<=kmax) if(s==2) if(norm(subs(df,var,xk))<=eps) x=double(xk); minf=double(subs(f,var,xk)); break; else s=3; end 3 中国矿业大学(北京) end if(s==3) dk=-Hk*subs(df,var,xk)'; k=0; s=4; end if(s==4) [alphak,temp]=Goldstein(subs(f,var,xk+alpha1*dk'),inf,0.4,0.75,2,eps,alpha1); if(alphak=='error') x='error'; minf='error'; break; end tempxk=xk; xk=xk+alphak*dk'; s=5; end if(s==5) if(norm(subs(df,var,xk))<=eps) x=double(xk); minf=double(subs(f,var,xk)); break; else s=6; end end if(s==6) if(k==n+1) s=3; else s=7; end end if(s==7) sk=xk-tempxk; yk=subs(df,var,xk)-subs(df,var,tempxk); Hk=Hk+sk'*sk/dot(sk,yk)-Hk*yk'*yk*Hk/dot(yk*Hk,yk); dk=-Hk*subs(df,var,xk)'; s=4; end k1=k1+1; 4 中国矿业大学(北京) end if(k1>=kmax) x='error'; minf='error'; end 题目26 用DFP法求解无约束二元函数f(t,s)=t2-ts+s2+2的极小值,初始点取 x0=(-4,6)T。 在Matlab输入如下: clear clc syms t; syms s; f=t^2-t*s+s^2+2; x0=[-4,6]; var=[t,s]; eps=0.01; [x,minf]=QNDFP(f,x0,var,eps) 结果为: x =[0.0010, 0.0028] minf =2.0000 5 因篇幅问题不能全部显示,请点此查看更多更全内容