《基于matlab的坐标轮换法程序》由会员分享,可在线阅读,更多相关《基于matlab的坐标轮换法程序(5页珍藏版)》请在金锄头文库上搜索。
1、function y=ff(x1,x2)%y=10*(x1+x2-5)2+(x1-x2)2; y=x12+x22-x1*x2-10*x1-4*x2+60;function alpha=goldmethod2(x01,x02,d,h0)% 输入分割比gamagama=0.618; % 确定搜索区间a,ba,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)*a
2、2);for n=1:100 if y1=y2 x1(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); else x1(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); end aa(n)=(a+b)/2; %输出极值点 y(n)=ff(x01+d(1)*aa(n),x02+d(2)*aa(
3、n); %输出极值点函数值 e(n)=abs(b-a); alpha=(a+b)/2; if abs(b-a)1e-5 break; endend clear;h0=0.1;x0=0,0;e=1,0;0,1;xp=0,0;for k=1:20 k for i=1:2 i x01=x0(1);x02=x0(2);d=e(i,:); alpha=goldmethod2(x01,x02,d,h0); % 确定最优步长 alpha alpha x1=x0+alpha*d; x0=x1; xp end xn=x1; if abs(xn-xp)1e-1 break; end xp=xn;endclear;
4、% 给定初始值h0=0.1;x0=0,0;e=1,0;0,1;n=2;for k=1:20 k % k 代表第轮计算 % 第 1 到 n 次搜索计算 for i=1:1 % 第1次搜索 i x01=x0(1);x02=x0(2);d=e(i,:); F0=ff(x0(1),x0(2); alpha=goldmethod2(x01,x02,d,h0); % 确定最优步长 alpha alpha x(i,:)=x0+alpha*d; F(i)=ff(x(i,1),x(i,2); Delta(i)=F(i)-F0; end for i=2:n % 第2到n次搜索 i x01=x(i-1,1);x02
5、=x(i-1,2);d=e(i,:); alpha=goldmethod2(x01,x02,d,h0); % 确定最优步长 alpha alpha x(i,:)=x(i-1,:)+alpha*d; F(i)=ff(x(i,1),x(i,2); Delta(i)=F(i-1)-F(i); end % 111 % 精度是否满足要求 2 if abs(x(n,:)-x0)1e-3 break; end % 222 % 第n次结束参数计算 d=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(
6、n+1,2); % 333 % 搜索方向是否进行替换 if F3=Delta_m/2*(0-F3)2 x01=x(n,1);x02=x(n,2); alpha=goldmethod2(x01,x02,d,h0); % 确定最优步长 alpha alpha x(n+1,:)=x(n,:)+alpha*d; e(j,:)=; e(n,:)=d; x0=x(n+1,:); else if F2y1 %反向搜索 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);% 继续搜索 %while y30 a=a1;b=a3;else a=a3;b=a1;end % a,b