最速下降法与共轭梯度法实验

上传人:wt****50 文档编号:33650319 上传时间:2018-02-16 格式:DOC 页数:5 大小:64.50KB
返回 下载 相关 举报
最速下降法与共轭梯度法实验_第1页
第1页 / 共5页
最速下降法与共轭梯度法实验_第2页
第2页 / 共5页
最速下降法与共轭梯度法实验_第3页
第3页 / 共5页
最速下降法与共轭梯度法实验_第4页
第4页 / 共5页
最速下降法与共轭梯度法实验_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《最速下降法与共轭梯度法实验》由会员分享,可在线阅读,更多相关《最速下降法与共轭梯度法实验(5页珍藏版)》请在金锄头文库上搜索。

1、1工程数值算法实验报告班级 姓 名 学 号课程名称 时 间 地 点一、实验名称: 实验一、最速下降法与共轭梯度法实验二、实验目的:1理解最速下降法与共轭梯度法的基本原理;2最速下降法是一种局部极值搜寻方法,任一点的负梯度方向是函数值在该点下降最快的方向;3共轭梯度法适合求解二次函数最小值问题。三、实验内容及要求:例 1 求解 ,其中 ,需求选取初始点 ,2141)()2()minxxXfTxX),(21TX)3,0(终止误差为 e = 0.1。采用最速下降法求解例 2 用最速下降法求解无约束非线性规划问题:其中,初始点 ,终止误差 e = 0.1.采用共轭梯度法。2121)(inxxxf T0

2、,)1(四、插值法的实验步骤:步骤 1:如何选择搜索方向步骤 2:在确定搜索方向上,采用适合的方法进行一维搜索五、插值法的实验结果:例 1 结果:=1.9304 = 0.9744x2x例 2 结果:-1-1-1 0000001-1 -0.8 -0.6 -0.4 -0.2 000.20.40.60.81=-1 =11x2x2六、程序附录例 1 定义函数function x=fsxsteep(f,e,a,b)% fsxsteep 函数 最速下降法% x=fsxsteep(f,e,a,b)为输入函数 f 为函数 e 为允许误差 (a,b)为初始点;% fsx TJPU 2008.6.15x1=a;x

3、2=b;Q=fsxhesse(f,x1,x2);x0=x1 x2;fx1=diff(f,x1); %对 x1 求偏导数fx2=diff(f,x2); %对 x2 求偏导数g=fx1 fx2; %梯度g1=subs(g); %把符号变量转为数值d=-g1;while (abs(norm(g1)=e)t=(-d)*d/(-d)*Q*d);t=(-d)*d/(-d)*Q*d); %求搜索方向x0=x0-t*g1; %搜索到的点v=x0;a=1 0*x0;b=0 1*x0;x1=a;x2=b;g1=subs(g);d=-g1;end;x=v;function x=fsxhesse(f,a,b)% fs

4、xhesse 函数 求函数的 hesse 矩阵;% 本程序仅是简单的求二次函数的 hesse 矩阵!;% x=fsxhesse(f)为输入函数 f 为二次函数 x1,x2 为自变量;% fsx TJPU 2008.6.15x1=a;x2=b;fx=diff(f,x1);%求 f 对 x1 偏导数fy=diff(f,x2);%求 f 对 x2 偏导数fxx=diff(fx,x1);%求二阶偏导数 对 x1 再对 x1fxy=diff(fx,x2);%求二阶偏导数 对 x1 再对 x2fyx=diff(fy,x1); %求二阶偏导数 对 x2 再对 x1fyy=diff(fy,x2);%求二阶偏导

5、数 对 x2 再对 x2fxx=subs(fxx); %将符号变量转化为数值fxy=subs(fxy);fyx=subs(fyx);fyy=subs(fyy);x=fxx,fxy;fyx,fyy; %求 hesse 矩阵运行函数syms x1 x2;X=x1,x2;5fx=(X(1)-2).4+(X(1)-2*X(2).2;z=fsxsteep(fx,0.1,0,3)例 2 定义函数%conjugate gradient methods%method:FR,PRP,HS,DY,CD,WYL,LS%精确线搜索,梯度终止准则function m,k,d,a,X,g1,fv = conjgradme

6、( G,b,c,X,e,method)if nargin=ek(i-1)=(m/m1)2;d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i); %a1(i)=-(X(:,i)*G*d(:,i)+b*d(:,i)/(d(:,i)*G*d(:,i);a(i)=g1(:,i)*g1(:,i)/(d(:,i)*G*d(:,i);X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1);m1=m;m=norm(g1(:,i+1);i=

7、i+1;endcase PRPwhile m=ek(i-1)=g1(:,i)*(g1(:,i)-g1(:,i-1)/(norm(g1(:,i-1)2;d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i); X(:,i+1)=X(:,i)+a(i)*d(:,i);2g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1);m=norm(g1(:,i+1);i=i+1;endcase HSwhile m=ek(i-1)=g1(:,i)*(g1(:,i)-g1(:,i-1)/(d(:,i

8、-1)*(g1(:,i)-g1(:,i-1);d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i);X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1);m=norm(g1(:,i+1);i=i+1;endcase DYwhile m=ek(i-1)=g1(:,i)*g1(:,i)/(d(:,i-1)*(g1(:,i)-g1(:,i-1);d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:

9、,i)*g1(:,i)/(d(:,i)*G*d(:,i); X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1);m=norm(g1(:,i+1);i=i+1;endcase LSwhile m=ek(i-1)=g1(:,i)*(g1(:,i)-g1(:,i-1)/(d(:,i-1)*(-g1(:,i-1);d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i); %a(i)=-(X(:,i)*G*d(:,i)+b*d(:,

10、i)/(d(:,i)*G*d(:,i);X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1);m=norm(g1(:,i+1);i=i+1;endcase CDwhile m=ek(i-1)=g1(:,i)*g1(:,i)/(d(:,i-1)*(-g1(:,i-1);d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i); X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(

11、1,i+1),x2,X(2,i+1);m=norm(g1(:,i+1);i=i+1;endcase WYLwhile m=e2k(i-1)=g1(:,i)*(g1(:,i)-(m/m1)*g1(:,i-1)/(m12);d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);a(i)=-(d(:,i)*g1(:,i)/(d(:,i)*G*d(:,i); %a(i)=-(X(:,i)*G*d(:,i)+b*d(:,i)/(d(:,i)*G*d(:,i);X(:,i+1)=X(:,i)+a(i)*d(:,i);g1=g1 subs(subs(g,x1,X(1,i+1),x2,X(2,i+1

12、);m1=m;m=norm(g1(:,i+1);i=i+1;endendfv=subs(subs(f,x1,X(1,i),x2,X(2,i); endl1=X(1,i);l2=X(2,i);w1=X(1,1);w2=X(2,1);v1=min(l1,w1)-abs(l1-w1)/10:abs(l1-w1)/10:max(l1,w1)+abs(l1-w1)/10;v2=min(l2,w2)-abs(l2-w2)/10:abs(l2-w2)/10:max(l2,w2)+abs(l2-w2)/10;x,y=meshgrid(v1,v2);s=size(x);z=zeros(size(x);for i

13、=1:s(1)for j=1:s(2)z(i,j)=1/2*x(i,j),y(i,j)*G*x(i,j);y(i,j)+b*x(i,j);y(i,j)+c;endendpx,py = gradient(z,.2,.2);contour(v1,v2,z), hold on, quiver(v1,v2,px,py)C,h = contour(x,y,z);set(h,ShowText,on,TextStep,get(h,LevelStep)*2)x1=X(1,:);y1=X(2,:);plot(x1,y1,r*:);运行函数X=0,0;0,0;G=4 2;2 2;b=1;-1;c=0; m,k,d,a,X,g1,fv = conjgradme(G,b,c,X,0.1,LS)八、成绩评定教师签字 : 年 月 日

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

当前位置:首页 > 生活休闲 > 社会民生

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