一维搜索
一维优化一般分为两大步骤:
(1) 确定初始搜索区间[ab],该区间应是包括一维函数极小点在内的单峰区间;
(2) 在搜索区间[a,b]内寻极小点。
搜索区间的确定进退法
基本思路是:由单峰函数性质可知,在极小点a*左边函数值应严格下降,而在极小点右边函数值应严格上升。因此,可从某一个给定的初始点a0出发,以初始步长h0沿着目标函数值的下降方向,逐步前进或后退,直到到相继的3个试点的函数值按“大-------大”变化为止。
一:确定搜索区间的外推法
首先确定函数的单谷性
printf怎么加endl然后从起点开始以初始步长向前试探,如果函数值变大,则改变步长方向。
如果函数值下降,则维持原来的试探方向,并将步长加倍。
搜索区间的确定流程图
    确定搜索区间的程序代码
void findqujian(float a[3],float f[3])
{
float t=steplength, a1,f1,ia;
a[0]=0;
f[0]=fc(a[0]);
for(int i=0;;i++)
{
    a[1]=a[0]+t;f[1]=fc(a[1]);
if(f[1]<f[0]) break;
if(fabs(f[1]-f[0])>=e)
{t=-t;a[0]=a[1];f[0]=f[1];}
else{ if(ia==1)return;
t=t/2;ia=1;}
}
for(i=0;;i++)
{a[2]=a[1]+t;f[2]=fc(a[2]);
if(f[2]>f[1]) break;
t=2*t;
a[0]=a[1]; f[0]=f[1];
a[1]=a[2]; f[1]=f[2];
}
if(a[0]>a[2])
{a1=a[0];f1=f[0];
a[0]=a[2];f[0]=f[2];
a[2]=a1; f[2]=f1;
}
return;
}
一、 黄金分割法
黄金分割法是通过不断缩短搜索区间的长度来寻求一维函数的极小点,这种方法的基本原理是:在搜索区间[a,b]内按如下规则对称地取两点a1a2