牛顿迭代法求开方

如有:f(x) = x2 - 2,求其正根。

曲线与切线的关系:切线是曲线的线性逼近。即,在曲线上某点附近,经过此点的切线,可以看成曲线的近似。

由以上结论,曲线上任意一个点,都可以用切线来近似表示。那如何通过程序求出刚开始提出的方程的根。即求:x2 - 2 = 0 时的解,也就是2的开方。

首先,并不知道曲线与x轴的交点在哪里,因此,需要选择一个迭代的初始值。假设这个值为xn,即在曲线上选取一点,经过这个点做切线,切线与x轴相交于点(xn+1, 0)。切线方程为:f(xn) + f'(xn)(x - xn)。求切线方程的解,多次迭代之后,值会收敛于某个点附近,这个值就是近似结果。

即:xn+1 = xn - f(xn) / f'(xn)
依次求出 x1, x2, x3 ......

求 √2,对曲线方程求导,得 f'(x) = 2x
则 xn+1 = xn - (xn2 - 2) / 2xn

以下为go语言的实现:

func Sqrt(x float64) float64 {
//初始值为1
    z := 1.0
    var result float64
    //只迭代了十次,可改进为计算是否改变或者改变很小时退出循环
    for i := 0; i < 10; i ++ {
        result = (z + x / z) / 2
        z = result
    }
    
    return result
}

func main() {
    fmt.Println(Sqrt(2))
}

输出:1.414213562373095

你可能感兴趣的:(牛顿迭代法求开方)