[Swift算法]巴比伦法(牛顿迭代法)求平方根

 

数学原理推导:
f(X) = X2 - n   ---公式(1)
 
n为要求平方根的数值 比如 要求100的平方根 n = 100;
所以问题就转换成了求f(X)的零点问题了
 
f(Xn)的导数就是Xn+1 的斜率
所以就有了公式 
所以 Xn+1 = Xn - f(Xn)/f'(Xn) 代入 公式1 
f(Xn)=X2  -n
f'(Xn)=2X
Xn+1 = Xn - (Xn- n) / (2Xn)
   = Xn - 1/2 (Xn-n / Xn)
   = 1 / 2 (Xn + n / Xn) 
 
Xn 是被猜测的数字 n 是要求平方根的数值
经过多次迭代之后 Xn
 
 
Swift 实现代码: 
 
import UIKit


func babylonianMethod (toSqrt number: Double, epsilon: Double) -> Double{
    // epsilon 是精度控制
    var Xn0: Double = 1
    var Xn1: Double = (Xn0 + number / Xn0) / 2
    
    while( fabs(Xn0 - Xn1) > epsilon) {
        Xn0 = Xn1
        Xn1 = (Xn0 + number / Xn0) / 2
    }
    return Xn1
    
}

babylonianMethod(toSqrt: 2, 1e-10)

 

 
posted @ 2015-08-02 17:39  baaingSheep  阅读(1494)  评论(0编辑  收藏  举报