⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zcx.m

📁 用随即搜索方法编写的m文件
💻 M
字号:
clear;
nn=20;%设置随机方向数

x0=[3;2];
xx=x0;
f0=getf(x0);
ii=0;

while ii<200
    x0=xx;
    

e=zeros(2,nn);%方向矩阵
f=zeros(1,nn);%值
a=zeros(1,nn);%步长
x1=zeros(2,nn);%新点

%定义了nn个方向
for i=1:nn
    e1=[2*rand(1)-1,2*rand(1)-1];
    e(:,i)=e1./sqrt(e1(1)^2+e1(2)^2);
end

%找到最好的方向
for i=1:nn
    e1=e(:,i);%临时变量
    a(1,i)=geta(x0,e1);
    x1(:,i)=x0+a(1,i).*e1;
    if tj(x1(:,i))==1
        x1(:,i)=x1(:,i);
        f(1,i)=getf(x1(:,i));
    else
        x1(:,i)=[0;0];
        f(1,i)=inf;
    end
end
ymin=min(f);
for i=1:nn
    if f(1,i)==ymin
        xx=x1(:,i);
        ee=e(:,i);
        aa=a(1,i);
    end
end

%如果找到最好方向,但是结果却扩大了的时候要缩小步长到满足条件为止
while f0<ymin
    x2=xx;
    a2=aa;
    aa=0.7.*aa;%最优步长
    xx=x0+aa*ee;%xx最优点,ee最优方向
    if tj(xx)>0
        ymin=getf(xx);
    else
        xx=x2;
        aa=a2;
        ymin=getf(xx);
    end
end

%确定最优点和最优方向后,对步长进行扩大
e0=xx-x0;%最优方向,和ee同向,但值不一样
while f0<ymin
    x2=xx;
    a2=aa;
    aa=1.3*aa;
    xx=x0+aa*e0;
    if tj(xx)>0
        ymin=getf(xx);
    else
        xx=x2;
        aa=a2;
        ymin=getf(xx);
    end
end

if aa<0.001||abs((getf(xx)-getf(x0))/getf(x0))<0.001
    break;
end
ii=ii+1;
end
xx
getf(xx)


















⌨️ 快捷键说明

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