首页 > 编程语言 > 详细

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

时间:2015-08-02 18:07:18      阅读:1141      评论:0      收藏:0      [点我收藏+]

 

数学原理推导:
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)

 

 

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

原文:http://www.cnblogs.com/baaingSheep/p/4696329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!