spoly3.m

来自「单变量寻优基本算法的原码」· M 代码 · 共 64 行

M
64
字号
% 三次逼近法求解函数的极小值点
%其中f()表示所求函数表达式,df()表示所求函数的导数表达式
%f和df()是由外部的M-函数提供.

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

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

for i=1:300
y1=f(x1);
y2=f(x2);
dy1=df(x1);
dy2=df(x2);

z=3*(y1-y2)/(x2-x1)+dy1+dy2;
s=sqrt(z^2-dy1*dy2);
if x1<x2
    w=s;
else
    w=-s;
end

u=(dy2+w-z)/(dy2-dy1+2*w);

if u<0
    xe=x2;
elseif u<=1
    xe=x2-u*(x2-x1);
else
    xe=x1;
end

dye=df(xe);

if abs(dye)<e
    break;
else
    if dye*dy1<0
        x2=xe;
    else
        x1=xe;
    end
end
end

i
xe
dye
f(xe)

⌨️ 快捷键说明

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