牛顿-拉夫逊简单解释
核心:
牛頓-拉夫遜法在數學上是求解非線性代數方程式的有效方法。
其要點是把非線性方程式的求解過程變成反復地對相應的線性方程式進行求解的過程,即通常所稱的逐次線性化過程。是數值計算普遍使用的重要方法,以開方運算為例,求平方根不是四則運算,因此在計算機上求平方根使用牛頓-拉夫遜迭代法來轉化為四則運算進行求解。
將非線性代數方程組
???????????????? ? ? ? ? ? ? ? ? ??(1)
?? 在待求量? 的某一個初始估計值?附近,展開成泰勒級數并略去二階及以上的高階項,得到線性化方程組
???????????????? ? ? ? ??(2)
? 稱為牛頓法的修正方程式
由上式根據初值?? 可求得第一次迭代的修正量
? ? ? ? ? ?(3)
將?和?相加,得到變量的第一次改進值
牛頓法求解的迭代格式為
? ? ? (4)
? ? ? ?(5)
(4) 和(5)兩式中??是函數?關于?的一階偏導數矩陣
即jacobi matrit雅可比矩陣 ? ?? 是迭代次數
牛頓法當初值 ?和方程的精確解足夠接近時,具有平方收斂特性。?
如下圖:
所求??,經常被拿來,做cost function?
如果上面的解釋仍然不是很明確的話,下面給出更詳細清楚的說法
假定 ?a > 0 ,求 ?等價于解方程
給定一個初始近似值??令
? 是一個校正量,稱為增量,于是
? ? 即 ?
由于 ?是一個小量,如果省略高階項 ? ?,則得到
即?
于是?
這里 不是 的真值, 但是是真值 ?的 進一步近似,重復以上過程可得到迭代公式
? ? ? ??
逐次求得 ? ? ? ?若
則?,容易證明序列對于任意?均收斂
簡單python 2.7代碼如下:
x=float(input("sqrt root for:"))
guess=20 while abs(guess*guess-x)>0.05:guess=(guess + x/guess)/2print(guess,guess*guess) print guess
改變 guess 以及 近似誤差(epsilon),都會對求解過程產生影響。
以下貼一個二分查找求平方根:
def pow(x,epsilon):numGuesses=0low=0.0high=xans=(high + low)/2.0while abs(ans**2 - x)>=epsilon:numGuesses +=1print "high is " + str(high) + " low is " + str(low) + " ans " + str(ans)if ans**2 <x:low = anselse:high=ansans=(high + low)/2.0print ans print numGuesses
改變 guess 以及 近似誤差,都會對求解過程產生影響。
總結
以上是生活随笔為你收集整理的牛顿-拉夫逊简单解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MATLAB数学建模算法代码(六)之遗
- 下一篇: pytorch-yolov5_deeps