您的当前位置:首页正文

基于matlab的坐标轮换法程序

2024-01-16 来源:好走旅游网


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

x(i,:)=x(i-1,:)+alpha*d;

F(i)=ff(x(i,1),x(i,2));

Delta(i)=F(i-1)-F(i);

% 确定最优步长 alpha

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=Delta_m/2*(0-F3)^2

x01=x(n,1);x02=x(n,2);

alpha=goldmethod2(x01,x02,d,h0); alpha

x(n+1,:)=x(n,:)+alpha*d;

e(j,:)=[];

e(n,:)=d;

x0=x(n+1,:);

else

if F2x0=x(n,:);

else

% 确定最优步长 alpha

x0=x(n+1,:);

end

end

% 44444444444444444444444444444444444444444444444444444444444

x0

x

end

function [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);

if y2>y1 %反向搜索

h=-h;

a3=a1;y3=y1;

a1=a2;y1=y2;

a2=a3;y2=y3;

end

a3=a2+h;y3=ff(x01+d(1)*a3,x02+d(2)*a3);

%%%%%%%%%% 继续搜索 %%%%%%%%%%

while y3h=2*h;

a1=a2;y1=y2;

a2=a3;y2=y3;

a3=a2+h; y3=ff(x01+d(1)*a3,x02+d(2)*a3);

end

%%%%%%%%%% 确定搜索区间 %%%%%%%%%%

if h>0

a=a1;b=a3;

else

a=a3;b=a1;

end

% a,b

因篇幅问题不能全部显示,请点此查看更多更全内容