您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 其它文档 > 坐标轮换法-matlab实现
%1.ff.mfunctiony=ff(x1,x2)y=x1^2+x2^2-x1*x2-10*x1-4*x2+60;%2.黄金分割法functionalpha=goldmethod2(x01,x02,d,h0)%输入分割比gamagama=0.618;%确定搜索区间[a,b][a,b]=search2(x01,x02,d,h0);%计算a1,a2和函数值y1,y2,确定最优步长alphaa1=b-gama*(b-a);y1=ff(x01+d(1)*a1,x02+d(2)*a1);a2=a+gama*(b-a);y2=ff(x01+d(1)*a2,x02+d(2)*a2);forn=1:100ify1=y2x1(n)=a1;x2(n)=a2;yp1(n)=y1;yp2(n)=y2;a=a1;a1=a2;y1=y2;a2=a+gama*(b-a);y2=ff(x01+d(1)*a2,x02+d(2)*a2);elsex1(n)=a1;x2(n)=a2;yp1(n)=y1;yp2(n)=y2;b=a2;a2=a1;y2=y1;a1=b-gama*(b-a);y1=ff(x01+d(1)*a1,x02+d(2)*a1);endaa(n)=(a+b)/2;%输出极值点y(n)=ff(x01+d(1)*aa(n),x02+d(2)*aa(n));%输出极值点函数值e(n)=abs(b-a);alpha=(a+b)/2;ifabs(b-a)1e-5break;endend%轮换.mclear;h0=0.1;x0=[0,0];e=[1,0;0,1];xp=[0,0];fork=1:20kfori=1:2ix01=x0(1);x02=x0(2);d=e(i,:);alpha=goldmethod2(x01,x02,d,h0);%确定最优步长alphaalphax1=x0+alpha*d;x0=x1;xpendxn=x1;ifabs(xn-xp)1e-1break;abs(xn-xp)ffendxp=xn;end%powellmethod.mclear;%给定初始值h0=0.1;x0=[0,0];e=[1,0;0,1];n=2;fork=1:20k%k代表第轮计算%111111111111111111第1到n次搜索计算111111111111111111fori=1:1%第1次搜索ix01=x0(1);x02=x0(2);d=e(i,:);F0=ff(x0(1),x0(2));alpha=goldmethod2(x01,x02,d,h0);%确定最优步长alphaalphax(i,:)=x0+alpha*d;F(i)=ff(x(i,1),x(i,2));Delta(i)=F(i)-F0;endfori=2:n%第2到n次搜索ix01=x(i-1,1);x02=x(i-1,2);d=e(i,:);alpha=goldmethod2(x01,x02,d,h0);%确定最优步长alphaalphax(i,:)=x(i-1,:)+alpha*d;F(i)=ff(x(i,1),x(i,2));Delta(i)=F(i-1)-F(i);end%1111111111111111111111111111111111111111111111111111111111%22222222222222222精度是否满足要求22222222222222222222222ifabs(x(n,:)-x0)1e-3break;end%2222222222222222222222222222222222222222222222222222222222%3333333333333333333第n次结束参数计算33333333333333333333d=x(n,:)-x0;x(n+1,:)=2*x(n,:)-x0;[Delta_m,j]=max(Delta);F2=F(n);F3=ff(x(n+1,1),x(n+1,2));%3333333333333333333333333333333333333333333333333333333333%44444444444444444搜索方向是否进行替换44444444444444444444ifF3F0&(F0-2*F2+F3)*(F0-F2-Delta_m)^2=Delta_m/2*(0-F3)^2x01=x(n,1);x02=x(n,2);alpha=goldmethod2(x01,x02,d,h0);%确定最优步长alphaalphax(n+1,:)=x(n,:)+alpha*d;e(j,:)=[];e(n,:)=d;x0=x(n+1,:);elseifF2F3x0=x(n,:);elsex0=x(n+1,:);endend%44444444444444444444444444444444444444444444444444444444444x0xend%search2.mfunction[a,b]=search(x01,x02,d,h0)%search为外推法确定搜索区间函数%h0为初始试探步长%[a,b]为搜索区间%%%%%%%%%%第一次搜索%%%%%%%%%a1=0;y1=ff(x01+d(1)*a1,x02+d(2)*a1);h=h0;a2=h;y2=ff(x01+d(1)*a2,x02+d(2)*a2);ify2y1%反向搜索h=-h;a3=a1;y3=y1;a1=a2;y1=y2;a2=a3;y2=y3;enda3=a2+h;y3=ff(x01+d(1)*a3,x02+d(2)*a3);%%%%%%%%%%继续搜索%%%%%%%%%%whiley3y2h=2*h;a1=a2;y1=y2;a2=a3;y2=y3;a3=a2+h;y3=ff(x01+d(1)*a3,x02+d(2)*a3);end%%%%%%%%%%确定搜索区间%%%%%%%%%%ifh0a=a1;b=a3;elsea=a3;b=a1;end%a,b
本文标题:坐标轮换法-matlab实现
链接地址:https://www.777doc.com/doc-1857084 .html