计算机如何算出平方根呢?最常用的就是牛顿的逐步逼进方法。这个方法就是:如果对x的平方根的值有一个猜测值y,那么就可以通过执行一个简单的操作去得到一个更好的猜测:只需要求出y和x/y的平均值(它更接近实际的平方根值)。例如,可以用这种方式去计算2的平方根,假定初始值是1:
猜想 商 平均值
1 2/1=2 (2+1)/2 = 1.5
1.5 2/1.5=1.3333 (1.3333+1.5)/2 = 1.4167
1.4167 2/1.4167=1.4118 (1.4167+1.4118)/2=1.4142
1.4142 ... ...
继续这一计算过程,我们就能得到对2的平方根的越来越好的近似值。
我们可以将这一基本策略写成下面的过程(schema):
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
改进猜测的方法就是求出它与被开方数除以上一个猜测的平均值:
(define (improve guess x)
(average guess (/ x guess)))
其中:
(define (average x y)
(/ (+ x y) 2))
我们还必须说明什么叫做”足够好“,下面的做法想法是:不断改进答案直至它足够接近平均值,使得其平方与被平方数之差小于某个事先确定的误差值(这里是0.001):
(define (good-enough ? guess x)
(< (abs (-(square guess) x)) 0.001))
其中:
(define (square) x)
(* x x))
最后提供一个启动方法:
(define (sqrt x)
(sqrt-iter 1.0 x))
那么把这个定义都送给解释器,我们就可以使用sqrt,就像可以使用其他过程一样:
(sqrt 9)
3.00009155413138
(sqrt (+ 100 37))
11.704699917758145
(square (sqrt 1000))
1000.000369924366
这个过程也显示函数式运算思维与命令式的区别,这里是自顶向下的解决问题思路,而我们常用的命令式思维则要考虑如何指挥机器从底部一步一步的堆积出论证,最后达到我们的目标,是自底向上。
分享到:
相关推荐
详细讲述了利用牛顿迭代法求平方根的过程,值得参考。
牛顿法算平方更,java文件,有附录和说明
这个程序展示了如何使用GMP来计算小整数的平方根并精确到任意精度,它并没有直接调用GMP的浮点函数来直接计算,而是通过牛顿迭代法逐步求精得到指定的精度。 这个程序以在VC6,VC2008和GCC下编译通过。在这个...
在matlab平台上,通过牛顿法求解方程的根,牛顿法具有二次收敛性,求解速度快
C语言迭代法求平方根
主要介绍了javascript基于牛顿迭代法实现求浮点数的平方根,简单说明了牛顿迭代法的原理,并结合实例分析了javascript基于递归的数值运算相关操作技巧,需要的朋友可以参考下
实际上求平方根的算法方法主要有两种:二分法(binary search)和牛顿迭代法(Newton iteration) 1:二分法 求根号5 a:折半: 5/2=2.5 b:平方校验: 2.5*2.5=6.25>5,并且得到当前上限2.5 c:再次向下折半:2.5/2=1.25 d...
1.double my_sqrt(double c);求平方根 。 假设浮点数在计算机中按IEEE标准表示。而c是一个整的规格化浮点数。令 为c的尾数。使用如下的牛顿迭代格式: 请详细论证p,q的选取,实得仅使用三次迭代...使用牛顿迭代法求
采用下述方法计算 115 的平方根,精确到小数点后六位。 (1)二分法。选取求根区间为[10, 11]。 (2)牛顿法。 (3)简化牛顿法。 (4)弦截法。 绘出横坐标分别为计算时间、迭代步数时的收敛精度曲线。
C语言简单编程-迭代法求平方根不采用MATH.H的库函数-,
matlab平方根法和改进平方根法求解线性方程组例题与程序文件.docxmatlab平方根法和改进平方根法求解线性方程组例题与程序文件.docxmatlab平方根法和改进平方根法求解线性方程组例题与程序文件.docxmatlab平方根法和...
C#求平方根小程序 C#求平方根小程序 C#求平方根小程序C#求平方根小程序 C#求平方根小程序 C#求平方根小程序
数值分析C++源码-二分法,迭代法,牛顿法,高斯消元法,高斯先列主元消元法,高斯全主元消元法,标度化列住院消元法,直接三角分解法,道立特分解法,改进的平方根法,平方根法,雅克比法,高斯赛德尔迭代法,牛顿插值法,拉格朗日...
易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码易语言汇编代码求平方根.rar 易语言源码...
MATLAB-平方根法和改进平方根法求解线性方程组例题与程序演示教学.pdfMATLAB-平方根法和改进平方根法求解线性方程组例题与程序演示教学.pdfMATLAB-平方根法和改进平方根法求解线性方程组例题与程序演示教学....
汇编语言求平方根的问题,80386,masm
MATLAB-平方根法和改进平方根法求解线性方程组例题与程序.pdfMATLAB-平方根法和改进平方根法求解线性方程组例题与程序.pdfMATLAB-平方根法和改进平方根法求解线性方程组例题与程序.pdfMATLAB-平方根法和改进平方根法...
在平方根的基础上,为了避免开方运算,采用 A=LDLT计算,改进平方根法的工作量约是平方根法的一半。选主元的Gauss消去法通过对每次消元过程中主元的多次选取达到快速求解的一种消元方法,且避免了由于除法运算分母过...