最优化 马昌凤 第三章作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最优化方法及其Matlab程序设计习题作业暨实验报告
学院:数学与信息科学学院
班级:12级信计一班
姓名:李明
学号:1201214049
第三章 最速下降法和牛顿法
一、上机问题与求解过程
1、用最速下降法求212
221216423),(x x x x x x f --+=的极小值。 解:
仿照书上编写最速下降法程序如下:
function [x,val,k]=grad(fun,gfun,x0) %功能:用最速下降法求解无约束化问题:min f(x) %输入:x0是初始点,fun,gfun 分别是目标函数和梯度 %输出:x,val 分别是近似嘴有点和最优值,k 是迭代次数 maxk=5000;
rho=0.5;sigma=0.4;
%一开始选择时选择的rho 和sibma 选择的数据不够合理,此处我参照书上的数据编写数据 k=0;epsilon=1e-5; while (k g=feval(gfun,x0); %计算梯度 d=-g; %计算搜索方向 if (norm(d) %Armijo 搜索 if (feval(fun,x0+rho^m*d) %直接利用Armijo 搜索公式,一开始的时候没有记住公式编写出现错误 end m=m+1; end x0=x0+rho^mk*d; k=k+1; end x=x0; val=feval(fun,x0) %求得每一个的函数值 然后仿照书上建立两个目标函数和梯度的M 文件: function f=fun(x) f=3*x(1)^2+2*x(2)^2-4*x(1)-6*x(2); function g=gfun(x) g=[6*x(1)-4,4*x(2)-6]'; 选取初始点为']0,0[,调用函数程序,得出最小极值点为 ']500.1,6667.0[,极小值为8333.5-,在界面框中输入的程序如下: [x,val,k]=grad('fun','gfun',x0) val = -5.8333 x = 0.6667 1.5000 val = -5.8333 k = 10 从结果可以看出迭代次数为10次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。 2、分别用牛顿法和阻尼牛顿法求解函数212 22121484),(x x x x x x f --+=的极小点。 解: 牛顿法: 改编书上的阻尼牛顿法,将Armijo 线性搜索公式去掉,改编为牛顿法,其中程序为: function [x,val,k]=netwn(fun,gfun,Hess,x0) %功能:用牛顿法求解无约束问题:min f(x) %输入:x0是初始点,fun,gfun,Hess 分别是求 % 目标函数值,梯度,Hesse 矩阵函数 %输出:x,val 分别是近似点最优解和最优质,k 是迭代次数 maxk=500; %因为是牛顿法,感觉不能简单直接找出最佳数值,所以需要加大迭代次数 k=0;epsilon=1e-5; while (k gk=feval(gfun,x0);%计算梯度 Gk=feval(Hess,x0);%计算Hess 矩阵 if (norm(gk) %直接根据前面的算法框架,得出上面迭代步骤 k=k+1; end %只是将阻尼牛顿法,简单的删去Armijo 搜索公式 x=x0; val=feval(fun,x); 然后仿照书上建立两个目标函数和梯度的M 文件: function f=fun(x) f=4*x(1)^2+x(2)^2-8*x(1)-4*x(2); function g=gfun(x) g=[8*x(1)-8,2*x(2)-4]'; 最后仿照书上建立Hess矩阵的M文件: function He=Hess(x) n=length(x); He=zeros(n,n); He=[8,0; 0,2]; 选取初始点为']0,0[,调用函数程序,得出最小极值点为']2,1[,极 小值为8 ,在界面框中输入的程序如下: x0=[0 0]'; x,val,k]=netwn('fun','gfun','Hess',x0) x = 1 2 val = -8 k = 1 从结果可以看出迭代次数为10次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。下面看阻尼牛顿法: 阻尼牛顿法: 仿照书上编写程序并结合Armijo线性搜索步长,有算法程序如下:function [x,val,k]=znetwn(fun,gfun,Hess,x0) %功能:用牛顿法求解无约束问题:min f(x) %输入:x0是初始点,fun,gfun,Hess分别是求 % 目标函数值,梯度,Hesse矩阵函数 %输出:x,val分别是近似点最优解和最优质,k是迭代次数 maxk=100; rho=0.50;sigma=0.4; k=0;epsilon=1e-5; while(k gk=feval(gfun,x0);%计算梯度 Gk=feval(Hess,x0);%计算Hess矩阵 dk=-Gk\gk;%计算搜索方向 if(norm(gk) %检查终止准则 m=0;mk=0; while(m<20) if(feval(fun,x0+rho^m*dk)