最优化 马昌凤 第五章作业

上传人:小** 文档编号:89254411 上传时间:2019-05-22 格式:DOC 页数:8 大小:140.78KB
返回 下载 相关 举报
最优化 马昌凤 第五章作业_第1页
第1页 / 共8页
最优化 马昌凤 第五章作业_第2页
第2页 / 共8页
最优化 马昌凤 第五章作业_第3页
第3页 / 共8页
最优化 马昌凤 第五章作业_第4页
第4页 / 共8页
最优化 马昌凤 第五章作业_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《最优化 马昌凤 第五章作业》由会员分享,可在线阅读,更多相关《最优化 马昌凤 第五章作业(8页珍藏版)》请在金锄头文库上搜索。

1、最优化方法及其Matlab程序设计习题作业暨实验报告 学院:数学与信息科学学院 班级:12级信计一班 姓名:李明 学号:1201214049第四章 共轭梯度法1、 上机问题与求解过程1、用算法求解取初始点和初始矩阵为 。解: 仿照书上编写程序,将程序矩阵变为具体如下:functionx,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;

2、k=0; n=length(x0);Hk=2 1;1 1;while(kmaxk) gk=feval(gfun,x0);%计算梯度 if(norm(gk)epsilon),break;end dk=-Hk*gk;%计算搜索方向 m=0;mk=0; while(m20)%用Armijo搜索求步长 if(feval(fun,x0+rhom*dk)0) Hk=Hk-(Hk*yk*yk*Hk)/(yk*Hk*yk)+(sk*sk)/(sk*yk); end k=k+1;x0=x;endval=feval(fun,x0); 然后仿照书上建立两个目标函数和梯度的M文件:function f=fun(x)f

3、=x(1)2+3*x(2)2;function g=gfun(x)g=2*x(1) 6*x(2); 选取初始点为,调用函数程序,得出最小极值点为,极小值为,在界面框中输入的程序如下:x0=1 -1;x,val,k=dfp(fun,gfun,x0)x = 1.0e-06 * -0.2203 -0.1599val = 1.2527e-13k =4 从结果可以看出迭代次数为次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。2、 用算法求的极小点,选取初始点为解: 仿照书上编写程序具体如下:functionx,val,k=bfgs(fun,gfun,x0,varargin)%功能:用BFGS算

4、法求解无约束问题:min f(x);%输入:x0是初始点,fun,gfun分别是目标函数及梯度;%varargin是输入的可变参数变量,简单调用bfgs时可以忽略它;%但若其他程序循环调用该程序时将会发生重要的作用%输出:x,val分别为近似最优点和最优值,k是迭代次数maxk=500;rho=0.55;sigma=0.4;epsilon=1e-5;k=0; n=length(x0);Bk=eye(n);while(kmaxk) gk=feval(gfun,x0,varargin:); if(norm(gk)epsilon),break;end dk=-Bkgk;%解方程组,计算搜索方向 m=

5、0;mk=0; while(m20)%用Armijo搜索求步长 newf=feval(fun,x0+rhom*dk,varargin:); oldf=feval(fun,x0,varargin:); if(newf0) Bk=Bk-(Bk*sk*sk*Bk)/(sk*Bk*sk)+(yk*yk)/(yk*sk); end k=k+1;x0=x;endval=feval(fun,x0,varargin:);%在一开始的时候输入格式有错误为:x,val,k=bfgs(fun,gfun,x0,varargin)%后来改为x,val,k=bfgs(fun,gfun,x0)得出正确答案 建立两个目标函数

6、和梯度的M文件:function f=fun(x)f=x(1)2+x(2)2+x(1)*x(2);function g=gfun(x)g=2*x(1)+x(2) 2*x(2)+x(1); 选取初始点为,调用函数程序,得出最小极值点为,极小值为,在界面框中输入的命令如下:x0=3 2;x,val,k=bfgs(fun,gfun,x0)x = 1.0e-05 * 0.0513 -0.1555val = 1.8846e-12k = 3从结果可以看出迭代次数为次,如果选取不同的初值点则迭代次数不一样,但是极小值相同。3、 分别利用算法和算法的程序求解下列优化问题取取解:(1) 算法解题与前面程序相同,

7、编写不同的函数文件,如下:function f=fun(x)f=x(1)2+x(2)2-3*x(1)-x(1)*x(2)+3;function g=gfun(x)g=2*x(1)-x(2)-3 2*x(2)-x(1);在窗口中输入命令并得出结果: x0=0 0;x,val,k=bfgs(fun,gfun,x0)x = 2.0000 1.0000val = 3.4737e-12k =4由输入的命令与现实的结果可以知道,极小值点为,迭代的次数为4次。算法解题:在上面计算的基础之上,添加函数文件,调用第一题程序:function He=Hess(x)He=2 ,-1; -1, 2;在窗口中输入命令并

8、得出结果: x0=0 0; x,val,k=dfp(fun,gfun,x0)x = 2 1val = 0k = 1 由输入的命令与现实的结果可以知道,极小值点为,迭代的次数为1次。(2) 算法解题与前面程序相同,编写不同的函数文件,如下:function f=fun(x)f=4*(1-x(1)2+5*(x(2)-x(1)2);function g=gfun(x)g=-8*(1-x(1)-10*x(1)*(x(2)-x(1)2) 10*(x(2)-x(1)2);在窗口中输入命令并得出结果: x0=2 0;x,val,k=bfgs(fun,gfun,x0)x = 1.0000 1.0000val

9、= -1.6236e-06k = 31由输入的命令与现实的结果可以知道,极小值点为,迭代的次数为31次。算法解题:在上面计算的基础之上,添加函数文件,调用第一题程序:function He=Hess(x)He=8-10*(x(2)-x(1)2)+20*x(1) ,-10*x(1); -10*x(1), 10;在窗口中输入命令并得出结果:x0=2 0;x,val,k=dfp(fun,gfun,x0)x = 1.0000 1.0000val = 1.7009e-07k = 18 由输入的命令与现实的结果可以知道,极小值点为,迭代的次数为18次。4、 分别利用算法和算法的程序求奇异函数的极小值: 初

10、始点取为。解:算法解题与前面程序相同,编写不同的函数文件,如下: function f=fun(x)f=(x(1)+10*x(2)2+5*(x(3)-10*x(4)2+(x(2)-2*x(3)2+10*(x(1)-x(4)2;function g=gfun(x)g=20*(x(1)+10*x(2)+20*(x(1)-x(4) 20*(x(1)+10*x(2)+2*(x(2)-2*x(3) 10*(x(3)-10*x(4)-4*(x(2)-2*x(3) -100*(x(3)-10*x(4)-20*(x(1)-x(4);在窗口中输入命令并得出结果:x0=3,-1,0,1;x,val,k=bfgs(

11、fun,gfun,x0)x = 1.0e-08 * -0.0062 0.0131 0.4465 0.0432val = 8.1534e-17k = 13由输入的命令与现实的结果可以知道,极小值点为,迭代的次数为13次。算法解题:在上面计算的基础之上,添加矩阵文件,function He=Hess(x)n=length(x);He=zeros(n,n);He=40,20,0,-20; 20,202,-4,0; 0,-4,18,-100; -20,0,-100,1020; 调用第一题程序。由输入的命令与现实的结果可以知道,极小值点为。二、实验结果与心得 通过上机作四道题可以发现使用拟牛顿法求解问题,DFP方法需要Hess矩阵比较麻烦,但是计算结果精确程度较高,收敛速度快。迭代次数少。而BFGS方法不需要Hess矩阵,初始矩阵为单位矩阵,但是迭代速度慢。在做第四题的时候用DFP方法计算速度较快,但结果明显不精确到真实值。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号