平方根牛顿迭代法

平方根牛顿迭代法上述笔算开方方法是我们大多数人上学时课本附录给出的方法,实际中运算中太麻烦了

我们可以采取下面办法:比如136161这个数字,首先我们找到一个和136161的平方根比较接近的数,任选一个,比方说300到400间的任何一个数,这里选350,作为代表

我们先计算0.5(350+136161/350),结果为369.5

然后我们再计算0.5(369.5+136161/369.5)得到369.0003,我们发现369.5和369.0003相差无几,并且369²末尾数字为1

我们有理由断定369²=136161

一般来说,能够开方开的尽的,用上述方法算一两次基本结果就出来了

再举个例子:计算

首先我们发现600²<469225<700²,我们可以挑选650作为第一次计算的数

即算0.5(650+469225/650)得到685.9

而685附近只有685²末尾数字是5,因此685²=469225

从而

对于那些开方开不尽的数,用这种方法算两三次精度就很可观了,一般达到小数点后好几位

实际中这种算法也是计算机用于开方的算法

用Ruby求平方根(注:sqrt = square root平方根)module MyMath    def sqrt(num,rx=1,e=1e-10) #参数1,需要求平方根的目标;参数2,迭代区间;参数3,精度        num*=1.0 #目标初始化       (num-rx*rx).abs < e ? rx : sqrt(num,(num/rx+rx)/2,e) #计算平方根    endendinclude MyMathputs sqrt(2) #求2的平方根puts sqrt(2,5,0.01) #求2的平方根+迭代区间与精度

C语言版求平方根double Sqrt(double a,double p)//a是被开平方根数,p是所求精度{    double x=1.0;double cheak;    do   {        x = (a / x + x) / 2.0;        cheak = x * x - a;    } while((cheak >= 0 ? cheak : -cheak) > p);    return x;}int main(){    printf("%.4f\n",Sqrt(2.0,0.0001));    printf("%.4f\n",Sqrt(0.09,0.0001));    return 0;}输出结果:1.41420.3000

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关