泰勒公式
首先看泰勒公式,對於函式,如果函式平滑且某點存在各階導數,則可以用一個多項式來描述該點鄰域的近似值。公式如下:
牛頓法
牛頓法一般用來求解方程的根和求解極值。
數值優化演算法除了梯度下降法外還有比較常用的一種方法是牛頓法。對於非線性方程,可以用牛頓迭代法進行求解,它收斂速度快。
基本思想是:對於非線性函式f(x),根據泰勒公式得到x附近某個點$x_{k}$展開的多項式可用來近似函式f(x)的值,該多項式對應的函式為F(x),求得F(x)的極小值作為新的迭代點,然後繼續在新的迭代點泰勒公式展開,直到求得的極小值滿足一定的精度。
原理
假設函式f(x)二次可微,則二次泰勒展開,
g(x)多項式則為f(x)的近似,求函式f(x)極值則可以轉化為求導函式為0,對g(x)求導並令其為0,
得到,
即得到迭代公式,
新的點$x_{k+1}$不斷逼近極值,直到一次導數小於某誤差。
迭代步驟
實現程式碼
def h(x):
return x*x*x + 2*x*x +3*x + 4
def h1(x):
return 3*x*x + 4*x + 3
def h2(x):
return 6*x + 4
xk = 0
k = 1
y = 0
e = 0.0001
times = 10000
while k < times:
y = h(xk)
a = h1(xk)
if abs(a) <= e:
break
b = h2(xk)
xk -= a/b
k += +1
print("k = ", k)
print("x = ", xk)
print("y = ", y)複製程式碼
以下是廣告
========廣告時間========
鄙人的新書《Tomcat核心設計剖析》已經在京東銷售了,有需要的朋友可以到 item.jd.com/12185360.ht… 進行預定。感謝各位朋友。
=========================
歡迎關注: