发布网友 发布时间:2022-09-09 03:11
共1个回答
热心网友 时间:2023-11-10 22:12
方法一:牛顿切线法
求a的平方根,相当于求f(x)=x²-a=0的正根,
假设随意猜测一个x的初始值x0。由于f'(x)=2x,
过猜测点(x0,f(x0))的切线方程是y-f(x0)=f'(x0)(x-x0),令y=0,
x=x0-f(x0)/f'(x0)=x0-(x0^2-a)/2x0=(x0+a/x0)/2是切线与x轴的交点。
画出图形就很容易看出任意选取x0,重复上一过程,都可以在不超过两次重复时,使得x比x0更接近方程的根,此处不再作严格证明。
于是,反复进行上一过程,就能得到越来越接近准确值的近似值,写成递推公式就是:
x(n+1)=[x(n)+a/x(n)]/2,(x0>0任意选取,当然尽量选接近的)。
方法二:巴比伦算法
若对a求算术平方根,随意选取0<x0<a,
于是x0和a/x0当中,由于总是有x0*a/x0=a,则二者中必有一个大于√a,另一个小于√a,
那么,他们的算术平均值肯定比他们两者都要接近√a,重复这一过程,必越来越接近√a。
写成递推公式就是:x(n+1)=[x(n)+a/x(n)]/2,(0<x0<a),可以看出,和方法一如出一辙,而且推导过程更容易理解,古人还是很厉害的。
例题:求√67的值
选取x0=8,则x1=(8+67/8)/2=8.1875,x2=(8.1875+67/8.1875)/2=8.185353,
x3=(8.185353+67/8.185353)/2=8.1853527718724531...
而计算器直接算得8.1853527718724499...
可见选取比较接近的初值时,迭代一次精度可达到百分之一,两次达到百万分之一,
三次达到了十万亿分之一。当然x0选得不好的时候,要算更多遍才能达到相同的精度。
方法三:长除法(笔算法)
以√6767为例,我们知道完全平方是(a+b)²=a²+2ab+b²
由于是逐位算出的,所以每位的平方最大是9²=81,不会超过两位数,于是可把被开方数从小数点为界向两边,两个两个分组,最后剩一个的补0,比如123.321就分成01'23.32'10,例题的6767就分成67'67。
我们知道80*80=6400,90*90=8100,所以√6767一定是八十几点几,于是设成(80+b),a=80,b还不知道,只知道它小于10。
好了,6767=a^2+2ab+b^2,6767-80²=367=2ab+b²=160b+b²
现在b商多少呢?
注意到试商的时候,前面的数比较大,x却总是个位数,相当于是高阶无穷小,所以很容易看出来——商个3超了,所以商个2,余数是367-320-4=43,
变成了82+x,我们不知道x是多少,只知道x小于1,43=2*82x+x²
因为划分了小数点,所以用x/10代替上述x,就可以写成4300=(2*820+x)x,现在x就是数位而不是一个小数了,
试商x=2,4300-(1640+2)2=1016,101600=2*8220x+x²,
x=6,101600=(2*8220+6)6=2924……292400=2*82260x+x²……
反正就是一直下去,√6767=82.26……
这是我国古代的方法,这里只是没有列成竖式而已。
练习1:√21,精确到4位小数
a=4,21-4*4=5,500=2*40x+x²
x=5,500-(2*40+5)5=75,7500=2*450x+x²
x=8,7500-(900+8)8=236,23600=2*4580+x²
x=2,23600-(9160+2)2=5276,527600=2*45820x+x²
x=5,527600-458200-25=69375,6937500=2*458250x+x²
x=7,6937500-2*458250*7-49=521951,52195100=……
所以√21=4.58257......≈4.5826
练习2:求√1156
分组,11'56
a=30,1100-30²=200,200+56=256,256=2*30b+b²
b=4,256-2*30*4-4²=0,余0,开尽。
所以√1156=34