基于matlab的坐标轮换法程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function y=ff(x1,x2)
%y=10*(x1+x2-5)^2+(x1-x2)^2;
y=x1^2+x2^2-x1*x2-10*x1-4*x2+60;
function alpha=goldmethod2(x01,x02,d,h0)
% 输入分割比gama
gama=0.618;
% 确定搜索区间[a,b]
[a,b]=search2(x01,x02,d,h0);
%计算a1,a2和函数值y1,y2, 确定最优步长alpha
a1=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);
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(n)); %输出极值点函数值e(n)=abs(b-a);
alpha=(a+b)/2;
if abs(b-a)<1e-5
break;
end
end
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;
end
clear;
% 给定初始值
h0=0.1;
x0=[0,0];
e=[1,0;0,1];
n=2;
for k=1:20
k % k 代表第轮计算
% 111111111111111111 第1 到n 次搜索计算111111111111111111 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=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
% 1111111111111111111111111111111111111111111111111111111111
% 22222222222222222 精度是否满足要求22222222222222222222222 if abs(x(n,:)-x0)<1e-3
break;
end
% 2222222222222222222222222222222222222222222222222222222222
% 3333333333333333333 第n次结束参数计算33333333333333333333 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(n+1,2));
% 3333333333333333333333333333333333333333333333333333333333
% 44444444444444444 搜索方向是否进行替换44444444444444444444 if F3
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