资源描述:
《最速下降法与牛顿法结合求无约束最优值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、最速下降法与牛顿法结合求无约束最优值.txt珍惜生活——上帝还让你活着,就肯定有他的安排。雷锋做了好事不留名,但是每一件事情都记到日记里面。哈哈,我已经实现了最速下降法语牛顿发的结合,并且还可以动画演示其求解最优值的迭代过程。都已在程序上实现了。(matlab).运行的时,最速下降精度不要弄得太小,到后面的牛顿精度就可以取任意值了。ticclc;clear;symsx1x2G=[];G=input('请输入想x1^2,x2^2,x1*x2,x1,x2,常系数,如[1,2,3,4,5,6]系数向量=:');a=G(1,1);b=G(1,2);c=G(1,3);d=G(1,4);e
2、=G(1,5);g=G(1,6);f=a*x1^2+b*x2^2+c*x1*x2+d*x1+e*x2+g;%画出原始图像figure;x11=-100:0.5:100;x22=x11;[x11,x22]=meshgrid(x11,x22);f11=a.*x11.^2+b*x22.^2+c*x11.*x22+d.*x11+e.*x22+g;surf(f11),gridon,holdon;%画出原始图像df1=diff(f,x1);df2=diff(f,x2);%对函数进行求一阶导DF=[df1;df2];df11=diff(df1,x1);df12=diff(df1,x2);df
3、21=diff(df2,x1);df22=diff(df2,x2);%这里进行求函数二阶导数DEE=[df11,df12;df21,df22];x=input('请输入x的初始值为x=[x1,x2],x=:');x=x';E=input('请输入你所要求的最速下降法的精度数(一般取3~5)E=:');%这里进行一些相关初始值的计算T=[];d=T;T(:,1)=subs(DF,[x1,x2],[x(1),x(2)]);TH=subs(DEE,[x1,x2],[x(1),x(2)]);%这里进行一些相关初始值的计算disp('由于你输入的初始值,这里将开始最速下降法搜寻:');f
4、ork=1:100000d(:,1)=-T(:,1);%d(k)是x(k+1)=x(k)+A(k)*d(k)A(1)=(T(:,1)'*T(:,1))/(T(:,1)'*TH*T(:,1));TH=subs(DEE,[x1,x2],[x(1,k),x(2,k)]);T(:,k)=subs(DF,[x1,x2],[x(1,k),x(2,k)]);d(:,k+1)=-T(:,k);A(k)=(T(:,k)'*T(:,k))/(T(:,k)'*TH*T(:,k));KLJ(:,k)=norm(T(:,k));GG(k)=subs(f,[x1,x2],[x(1,k),x(2,k)]);
5、ifnorm(T(:,k))6、ode','xor');set(h1,'xdata',x(1,tk),'ydata',x(2,tk),'zdata',GG(tk));drawnow;%刷新屏幕pause(0.1);endfop1=getframe(gcf)image(fop1.cdata)%画出最速下降迭代点最终停留位置ticY=x(:,k);EE=input('请输入牛顿最终的精度系数EE=:');TT(:,1)=subs(DF,[x1,x2],[Y(1),Y(2)]);THH=subs(DEE,[x1,x2],[Y(1),Y(2)]);aa=1;disp('程序可以运行到这里');forkk=1:1000
7、0dd(:,kk)=-inv(THH)*TT(:,kk);Y(:,kk+1)=Y(:,kk)+aa*dd(:,kk);THH=subs(DEE,[x1,x2],[Y(1,kk),Y(2,kk)]);TT(:,kk+1)=subs(DF,[x1,x2],[Y(1,kk+1),Y(2,kk+1)]);PP=norm(TT(:,kk));GG1(kk)=subs(f,[x1,x2],[Y(1,kk),Y(2,kk)]);ifPP