数学原理推导:
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 - (Xn2 - 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)
时间: 2024-11-08 02:33:42