powellmethod.m

来自「计算二维无约束优化的Powell法和坐标轮换法,以及一维搜索的黄金分割法和搜索区」· M 代码 · 共 78 行

M
78
字号
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 + =
减小字号Ctrl + -
显示快捷键?