码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-02 18:09:40      阅读:1036      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!