利用牛顿法求平方根-Go语言实现
生活随笔
收集整理的這篇文章主要介紹了
利用牛顿法求平方根-Go语言实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
牛頓法解釋
百度的解釋如下:
通俗的解釋就是:多數(shù)方程不存在求根公式,牛頓提出了一種用迭代來求方程近似根的方法。思路就是不斷取切線,用線性方程的根逼近非線性方程f(x)=0f(x)=0f(x)=0的根x?x^*x?
隨著k的增大xkx_{k}xk?會不斷逼近x?x^*x?
牛頓法求平方根
假如求a的平方根,那么也就是求解:
f(x)=x2?a=0(a>0)f(x)=x^2-a=0(a>0)f(x)=x2?a=0(a>0)的正根
利用牛頓迭代公式:
f′(x)=2?x{f'}(x)=2*xf′(x)=2?x
則:
xk+1=xk?f(xk)f′(xk)=xk?xk2?a2xk=12(xk+axk)x^{k+1}=x_{k}-\frac{f(x_{k})}{{f}'(x_{k})}=x_{k}-\frac{x_{k}^{2}-a}{2x_{k}}=\frac{1}{2}\left ( x_{k}+\frac{a}{x_{k}} \right )xk+1=xk??f′(xk?)f(xk?)?=xk??2xk?xk2??a?=21?(xk?+xk?a?)
go語言代碼
package mainimport ("fmt""math"
)func Sqrt(x float64) float64 {z := 1.0for i := 0; i < 10; i++ {z = z - (z*z-x)/(2*z)fmt.Println(i, z)}return z
}func Sqrt_new(x float64) float64 {pre, z := 0.0, 1.0for math.Abs(pre-z) > 1e-8 {pre = zz = (z + x/z) / 2}return z
}func main() {num := 34555.0fmt.Println("self Sqrt result is:", Sqrt(num))fmt.Println("self Sqrt new result is:", Sqrt_new(num))fmt.Println("math Sqrt result is:", math.Sqrt(num))
}
參考
牛頓迭代公式
牛頓迭代法求平方根 算法詳細(xì)解釋
A Tour of Go Exercise: Loops and Functions
總結(jié)
以上是生活随笔為你收集整理的利用牛顿法求平方根-Go语言实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在本地访问远程服务器的jupyter
- 下一篇: centos使用yum快速安装java的