📄 powellmethod.m
字号:
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<F0 & (F0-2*F2+F3)*(F0-F2-Delta_m)^2>=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 F2<F3
x0=x(n,:);
else
x0=x(n+1,:);
end
end
% 44444444444444444444444444444444444444444444444444444444444
x0
x
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -