牛頓迭代法 求任意數的開n次方

2022-08-22 09:48:11 字數 1229 閱讀 9898

牛頓迭代法是求開n次方近似解的一種方法,本文參考。

假如\(x^n = m\),我們需要求x的近似值。

感覺和物理做實驗一樣,先通過實驗觀察,再找出對應理論來解釋現象。

這個演算法不是推導出來的,是首先通過觀察發現,再來證明推導,哈哈哈~

以下結論都是建立在f(x)二階可導的情況下成立。

牛頓發現隨便找乙個曲線上的a點(為什麼隨便找,根據切線是切點附近的曲線的近似,應該在根點附近找,但是很顯然我們現在還不知道根點在**),做乙個切線,切線的根(就是和x軸的交點)與曲線的根,還有一定的距離。牛頓、拉弗森們想,沒關係,我們從這個切線的根出發,做一根垂線,和曲線相交於b點,繼續重複剛才的工作:

之前說過,b點比之前a點更接近曲線的根點,牛頓、拉弗森們很興奮,繼續重複剛才的工作:

經過多次迭代後會越來越接近曲線的根(下圖進行了50次迭代,哪怕經過無數次迭代也只會更接近曲線的根,用數學術語來說就是,迭代收斂了):

已知曲線方程\(f(x) = x^n - m\),我們隨機取一點\(x_1\):

這是go tutorial裡的乙個練習,求開方。求開n次方同理。只需要改成z = z - (pow(z,n) - m)/(n*pow(z,(n-1)))就行了。

注意這裡的z = (z + x/z)/2也就是\(z = \frac\)也等於我們這裡當\(n=2\)時,\(z - \frac\),在**裡也就是反覆更新迭代z的值,縮小誤差。

package main

import (

"fmt"

"math"

)func sqrt(x float64) float64

return z

}func main()

牛頓迭代法求n方根

借助上述公式,理論上可以求任意次方根,假設要求a 假設非負 的n次方根,則有xn a,令f x xn a,則只需求f x 0時x的值即可。由上述簡單推導知,當f x 0時,xn 1 xn,因此把f x xn a 代入上述迭代式進行迭代直至xn 1 xn即可。實際中xn 1 xn可能永遠達不到,可以根...

牛頓迭代法求n方根

借助上述公式,理論上可以求任意次方根,假設要求a 假設非負 的n次方根,則有xn a,令f x xn a,則只需求f x 0時x的值即可。由上述簡單推導知,當f x 0時,xn 1 xn,因此把f x xn a 代入上述迭代式進行迭代直至xn 1 xn即可。實際中xn 1 xn可能永遠達不到,可以根...

牛頓迭代法(求函式的根)

在做二分與三分法的題時,聽聞有牛頓迭代法 感覺很高大上 自己居然捧起書看了一些 由於自己水平很渣,研究的並不深入。本篇未完結.個人感覺 1.使用牛頓迭代法,函式可以是任意 2.優點 對其單調性無特殊要求 缺點 若在該函式值處有多個根,往往只能求出乙個根 3.與二分三分法比較 二分要求是單調函式 三分...