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

📄 spoly2modify.m

📁 单变量寻优基本算法的原码
💻 M
字号:
% 二次逼近法求解函数的极小值点
%其中f()表示所求函数表达式,df()表示所求函数的导数表达式
%f和df()是由外部的M-函数提供.

x0=0;               %初始点
h=1;                %步长
e=0.0005;            %精度要求
l=h;

f0=df(x0);
x1=x0;
x2=x0;

tic
while(df(x1)*df(x2)>0)   %寻找解区间
   if(f0<0)
      x1=x2;
      x2=x1+h;
   else
      x1=x2;
      x2=x1-h;
   end
end

y1=f(x1);
y2=f(x2);
x3=(x1+x2)/2;
y3=f(x3);
ymin=y3;
xmin=x3;

%while(1)
for i=1:100
    
a0=y1;                        %逼近二次函数q=a0+a1(x-x1)+a2(x-x1)(x-x2)
a1=(y2-y1)/(x2-x1);                             %可近似为导数
a2=((y3-y1)/(x3-x1)-(y2-y1)/(x2-x1))/(x3-x2);   %可近似为导数
xe=(x2+x1)/2-a1/(2*a2);                      %目标函数的逼近点xe
 
ye=f(xe);

if  abs(a1)<=e
    break;
else
    l1=abs(x1-xe);
    l2=abs(x2-xe);
    l3=abs(x3-xe);
    if l1>l2        %取最小的区间进行下一步计算
        if l1>l3
            x1=x2;x2=xe;xmin=xe;x3=x3;ymin=ye;     %去掉x1
        else
            x3=x2;x2=xe;xmin=xe;ymin=ye;           %去掉x3
        end
    else
        if l2>l3
            x2=xe;xmin=xe;ymin=ye;                %去掉x2
        else
            x3=x2;x2=xe;xmin=xe;ymin=ye;          %去掉x3
        end
    end
    y1=f(x1);y2=f(x2);y3=f(x3);
end
end

i
a1
xmin
ymin
toc


⌨️ 快捷键说明

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