如有: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