【牛顿迭代法】
假设方程 在 附近有一个根,那么用以下迭代式子:
依次计算、、、……,那么序列将无限逼近方程的根。
牛顿迭代法的原理很简单,其实是根据f(x)在x0附近的值和斜率,估计f(x)和x轴的交点,看下面的动态图:
【用牛顿迭代法开平方】
【go实现】
package main
import (
"fmt"
"math"
)
func Sqrt(x float64) float64 {
pre := 0.0
z := float64(1)
for math.Abs(z -pre) > 1e-10 { //修改循环条件,使得当值停止改变(或改变非常小)的时候退出循环。
pre = z
z = z - (z*z-x)/(2*z)
}
return z
}
func main() {
fmt.Println(Sqrt(2))
fmt.Println(math.Sqrt(2))
}
输出结果:
1.4142135623730951 (尽然和math库中的精度一致,可以修改1e-10查看变化)
1.4142135623730951
[参考文献]
牛顿开方法及其原理 http://www.guokr.com/question/461510/