算法作用
用于一纬(元)函数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)<f(a) 且f(b)<f(c)。
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)