牛顿法python代码_一文看懂牛顿法(附Python实现)
這是一個(gè)數(shù)據(jù)分析師的在線筆試編程題:不能使用數(shù)學(xué)庫函數(shù),求出一個(gè)數(shù)的算術(shù)平方根
是不是看的一臉懵逼?
這里就需要用到一個(gè)很常用的求解方法了 —— 牛頓迭代法,也被稱作牛頓法 (Newton's Method)
牛頓法通過下面這個(gè)迭代公式來找到 f(x)=0 的解
那么這個(gè)公式到底是怎么來的呢?
原理
首先,f(x) 的值近似于其泰勒展開式:
如果只考慮前兩項(xiàng),我們就能得到一個(gè)近似等式
代入 f(x)=0,對(duì) x 求解,我們就能得到一個(gè)近似解
由此我們就能得到上面的迭代公式
用動(dòng)畫來演示整個(gè)迭代過程圖片來源:wikipedia(Ralf Pfeifer)
算術(shù)平方根求解
求一個(gè)數(shù)m的算術(shù)平方根,其實(shí)就是對(duì)
求解
將 f(x) 和 f'(x)=2x 代入上面的迭代公式,我們可以得到
Python代碼實(shí)現(xiàn)
?這里我們還要注意要精確到小數(shù)點(diǎn)后四位,所以當(dāng)兩次迭代的近似解非常接近的時(shí)候,我們就可以結(jié)束迭代了
def newton(m):
x0 = m/2 #初始點(diǎn),也可以是別的值
x1 = x0/2 + m/(x0*2)
while abs(x1-x0)>1e-5:
x0 = x1
x1 = x0/2 + m/(x0*2)
return x1
# 輸出精確到小數(shù)點(diǎn)后四位
print( '%.4f'%newton(2) )
應(yīng)用于最優(yōu)化的牛頓法
牛頓法也可以應(yīng)用于最優(yōu)化問題,是一種被廣泛使用并拓展的最優(yōu)化算法
為了便于理解,我們以一維空間為例:假設(shè) f(x) 是損失函數(shù),我們的目標(biāo)是找到能夠使 f(x) 最小化的 x
即對(duì) f'(x) = 0 求解
將牛頓法迭代公式中的 f(x) 替換為 f'(x),f'(x) 替換為 f''(x),我們得到新的迭代公式
多維空間下的最優(yōu)化牛頓法以及拓展我會(huì)在接下來的文章中介紹,歡迎關(guān)注
總結(jié)
以上是生活随笔為你收集整理的牛顿法python代码_一文看懂牛顿法(附Python实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python批处理进行剪裁图片与图片拼接
- 下一篇: Python数据聚合的方法