二次插值:用低次多项式P(x)在搜索区间上逼近目标函数,然后用近似多项式P(x)的极小值点作为新区间的分割点的方法。如果精度不够,则可将原区间中不含最优解的部分删除。具体算法如下:
step1:给定x1,x2,x3,ε>0.
step2:计算fi=f(xi),i=1,2,3.
step3:计算k1=(f1-f3)/(x1-x3),k2=((y2-y1)/(a2-a1)-c1)/(a2-a3),x*=0.5(x1+x3-k1/k2).如果|f’(x*)|<ε或|x3-x1|<ε,转step6.否则,当x*<x2时,转step4,否则转step5.
step4:如果f(x*)<f(x2),则令x3:=x2,x2=x*,转step2;否则令x1=x*,转step2.
step5:如果f(x*)<f(x2),则令x1:=x2,x2=x*,转step2;否则令x3=x*,转step2.
step6:停止,输出x*。
Matlab实现代码如下:求sin函数极小值点
fun.m文件:目标一元函数表达式
function y=fun(a)
y=sin(a);
fun1.m文件:计算参数
c1=(y3-y1)/(a3-a1)