最优化——一维搜索算法之二次插值算法

算法作用

用于一纬(元)函数f(x)在确定的区间内搜索极小点。

为什么使用该算法

因为低次多项式的极小点比较容易计算,所以在求一元函数f(x)的极小点时,常常利用一个低次多项式函数g(x)来逼近原目标函数f(x),然后以该低次多项式函数g(x)的极小点来近似原函数f(x)的极小点。通过反复使用该方法来得到满足给定精确度的值。

算法:

初始条件:给定原目标函数f(x),初始区间[a,c]。

1、求得f(a)、f(c)。

2、在[a,c]中间求一点b,使得f(b)

3、通过这a、b、c三点可得一个二次多项式,然后可通过前面的已知的求得该二次多项式的极小点。极小点的通项表达式为(证明见 最优解通项表达式证明):

x*=-1/2 *

((b^2-c^2)*f(a) + (c^2-a^2)*f(b) + (a^2-b^2)*f(c))
/ ((b-c)*f(a) + (c-a)*f(b) + (a-b)*f(c))

4、检查是否满足精确度,如果不满足,则以x*代替区间a,b,c中的一点,代替原则为:使得f(x*),f(b),f(另一点)两头大,中间点小,然后回到第3步。

最优解通项表达式证明

为了使表达式不混淆,所以让x1=a,x2=b,x3=c,原目标函数为f(x),二次多项是为g(x)=ax^2 + bx + c。

则由x1,x2,x3在两个函数上,所以:

ax1^2 + bx1 + c = f(x1)……………(1)

ax2^2 + bx2 + c = f(x2)……………(2)

ax3^2 + bx3 + c = f(x3)……………(3)

因为x*是g(x)的最小点,所以g`(x*)=2ax* +b=0

所以:x*=-b/2a

又由表达式(1)-(2)、(2)-(3)两两消去c得到

a(x1^2- x2^2)+b(x1-x2)=f(x1)-f(x2)……(4)

a(x2^2- x3^2)+b(x2-x3)=f(x2)-f(x3)……(5)

由表达式(4)*(x2-x3)-(5)*(x1-x2)得:

A(x1^2- x2^2)(x2-x3) - a(x2^2- x3^2)(x1-x2) =

(x2-x3)f(x1) + (x3-x1)f(x2) + (x1-x2)f(x3)

左边再次拆分合并后得到:

a(x1-x3)(x3-x2)(x2-x1) =

(x2-x3)f(x1) + (x3-x1)f(x2) + (x1-x2)f(x3)

-a(x3-x1)(x2-x3)(x1-x2) =

(x2-x3)f(x1) + (x3-x1)f(x2) + (x1-x2)f(x3)

所以

a=(x2-x3)f(x1) + (x3-x1)f(x2) + (x1-x2)f(x3) /

   (x3-x1)(x2-x3)(x1-x2)

同理可得

b= (x2^2-x3^2)f(x1) + (x3^2-x1^2)f(x2) + (x1^2-x2^2)f(x3) /

   (x3-x1)(x2-x3)(x1-x2)

所以

X*=-b/2a=-1/2 *

(x2^2-x3^2)f(x1) + (x3^2-x1^2)f(x2) + (x1^2-x2^2)f(x3) /

(x2-x3)f(x1) + (x3-x1)f(x2) + (x1-x2)f(x3) 

你可能感兴趣的:(算法)