powellshuxue.m

来自「这是仿真powell算法的简单程序」· M 代码 · 共 48 行

M
48
字号
%此程序为仿真书中的例子
%最后结果的精度要看过程中的步长
%从多次仿真结果可以看出,所得的结果很稳定
%在len=2时,得到的结果与书中完全相同
%目标函数是y=(x1+x2).^2+(x1-1).^2
clear;
clc;
D=[1 0;
    0 1];
d1=D(1,:);
d2=D(2,:);
x0=[2,1];
% y=(x0(1)+x0(2)).^2+(x0(1)-1).^2;
len=10;
for j=1:10
    m=0;
    n=0;
    l=0;
    for i=-len:0.01:len
        x1=x0+i*d1;
        m=m+1;
        x(m,:)=x1;
        y1(m)=(x1(1)+x1(2)).^2+(x1(1)-1).^2;
    end
    [MIN,index]=min(y1);
    x1=x(index,:);
    for i=-len:0.01:len
        x2=x1+i*d2;
        n=n+1;
        x(n,:)=x2;
        y2(n)=(x2(1)+x2(2)).^2+(x2(1)-1).^2;
    end
    [MIN,index]=min(y2);
    x2=x(index,:);
    d3=x2-x0;
    for i=-len:0.01:len
        x3=x1+i*d3;
        l=l+1;
        x(l,:)=x3;
        y3(l)=(x3(1)+x3(2)).^2+(x3(1)-1).^2;
    end
    [MIN,index]=min(y3);
    x3=x(index,:);
    x0=x3;
    d1=d2;
    d2=d3;
end
x0             %显示仿真求得的最佳结果

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?