牛顿-拉夫逊法 原理讲解以及python算例实现
文章目錄
- 一、基本原理
- 二、原理深入講解
- 1 、切線是曲線的線性逼近
- 2、 牛頓-拉夫遜法
- 3 、牛頓-拉夫遜法是否總是收斂(總是可以求得足夠近似的根)?
- 三、pythons實例
- 總結
一、基本原理
????對于一個方程 f ( x ) = 0 ,我們將函數(shù) f ( x )單獨考慮。
????若函數(shù) f ( x ) (n+1)階可導,則我們在初始值 x = x 0 處進行泰勒展開,可得:
????令 x ? x 0= Δ x ,然后將上述泰勒公式一階展開,忽略余項可得:
???令其等于 f ( x ) = 0,可得:
???從而求出:
二、原理深入講解
1 、切線是曲線的線性逼近
???要講牛頓迭代法之前我們先說一個關鍵問題:切線是曲線的線性逼近。
???這個是什么意思呢?我們來看一看,下面是 f(x)=x^2 的圖像:
???我們隨便選一點f(x) 上的一點(a,f(a))作它的切線:
???我們在A點處放大圖像:
???上圖中,紅色的線是f(x),黑色的是A點處的切線,可以看出放大之后切線和f(x)非常接近了。很明顯,如果我們進一步放大圖像,A點切線就越接近f(x)。
???因為切線是一條直線(也就是線性的),所以我們可以說,A點的切線是f(x)的線性逼近。離A點距離越近,這種逼近的效果也就越好,也就是說,切線與曲線之間的誤差越小。所以我們可以說在A點附近,“切線約等于 f(x) ”。
2、 牛頓-拉夫遜法
???牛頓-拉夫遜法提出來的思路就是利用切線是曲線的線性逼近這個思想。
???牛頓、拉夫遜們想啊,切線多簡單啊,研究起來多容易啊,既然切線可以近似于曲線,我直接研究切線的根不就成了。
然后他們觀察到這么一個事實:
???隨便找一個曲線上的A點(為什么隨便找,根據(jù)切線是切點附近的曲線的近似,應該在根點附近找,但是很顯然我們現(xiàn)在還不知道根點在哪里),做一個切線,切線的根(就是和x軸的交點)與曲線的根,還有一定的距離。牛頓、-拉夫遜們想,沒關系,我們從這個切線的根出發(fā),做一根垂線,和曲線相交于B點,繼續(xù)重復剛才的工作:
???之前說過,B點比之前A點更接近曲線的根點,牛頓、拉弗森們很興奮,繼續(xù)重復剛才的工作:
???第四次就已經(jīng)很接近曲線的根了
???經(jīng)過多次迭代后會越來越接近曲線的根(下圖進行了50次迭代,哪怕經(jīng)過無數(shù)次迭代也只會更接近曲線的根,用數(shù)學術語來說就是,迭代收斂了):
3 、牛頓-拉夫遜法是否總是收斂(總是可以求得足夠近似的根)?
我們來看看收斂的充分條件:
若
f(x)
二階可導,那么在待求的零點
x
周圍存在一個區(qū)域,只要起始點
x_0
位于這個鄰近區(qū)域內,那么牛頓-拉弗森方法必定收斂。
???也就是說,在這個區(qū)域內,用切線代替曲線這個直覺是合理的。但是,因為我們不知道根點到底在哪里,所以起始點 x_0 選擇就不一定在這個區(qū)域內,那么這個直覺就不可靠了。
駐點
???起始點不幸選擇了駐點,從幾何上看切線根本沒有根。
從代數(shù)上看,x{n+1}=xn-f(xn)/f’(xn)沒有意義。
越來越遠離的不收斂
循環(huán)震蕩的不收斂
不能完整求出所有的根
三、pythons實例
???牛拉法主要流程
???以 x 2 ? 4 x - 4 = 0 為例,設計 Python 程序:
import numpy as np import pandas as pd import matplotlib.pyplot as pltdef fun(x):y = x ** 2 - 4 * x - 1return ydef fun_diff(x):y = 2 * x - 4return ydef Netwon(x0, func, dfunc):# 迭代條件e = 1e-5x = np.zeros(2)x[0] = x0x[1] = x0 - func(x[0]) / dfunc(x[0])while abs(func(x[0])) > e:#在0附近x[0] = x[1]x[1] = x[0] - func(x[0]) / dfunc(x[0])return x[1]if __name__ == '__main__':x=np.arange(-5,5,0.1)y=fun(x)x1=Netwon(0, fun, fun_diff) #牛拉法求得的點plt.plot(x,y)plt.xlim(-5, 5)plt.ylim(-10, 50)plt.scatter(x1,fun(x1),color='red')plt.show()總結
應用牛頓-拉夫遜方法,要注意以下問題:
函數(shù)在整個定義域內最好是二階可導的
起始點對求根計算影響重大,可以增加一些別的判斷手段進行試錯
作者:電氣-余登武
總結
以上是生活随笔為你收集整理的牛顿-拉夫逊法 原理讲解以及python算例实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 到南通科技职业学院附近租房,嘴近的小区是
- 下一篇: 高斯赛尔德、牛顿拉尔逊matlab潮流计