一个求平方根方法

昨天在论坛上看到一个算法,是算平方根的,很是惊艳,颇有艺术性。

公式:

    (X + n/X1 )/2 = X2

n为要算的值,x1一开始随便取个值,然后算出x2,然后不断的把x2带入x1,算出x3,以此类推,大概迭代几次就很逼近要算的平方根了。

 

如:要算  7659的平方根

x1取10

x2 近似等于 388

x3 近似等于204 

x4 近似 92 

x5近似 87.6

x6近似 87.5157

 

87.5157^2 =7658.99775

迭代5次以后,取值范围已经很接近了,其他随便举例子基本上也都是五次左右就很接近了。

 

这么牛逼的算法是谁提出的呢?哪个大公司的大牛?这种老艺术家肯定年薪千万了吧。。

查了下资料,果然不出所望,这个公式是牛顿(对,头上落了个苹果的老艺术,真正的大牛,大牛鼻祖的牛)提出的牛顿迭代法求平方根。

这个算法的知识用到了我们高中数学学过的线性方程和导数方程。

 

 

已知n,求x的解 :   x= n

f(x) = x2 -n    令 f(x) = 0,也就是求曲线与x轴相交时,x的值

   首先取x0,如果x0不是解,做一个经过(x0,f(x0))这个点的切线,与x轴的交点为x1

   同样的道理,如果x1不是解,做一个经过(x1,f(x1))这个点的切线,与x轴的交点为x2

   以此类推。

   以这样的方式得到的xi会无限趋近于f(x)=0的解。

 

过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数, 也就是切线斜率,求证方法在下面,本题中斜率为2x。

令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。

一顿数学运算简化后:xi+1=xi - (xi- n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2

 

这个算法可以运用在编程中,具体不写了,数值稍微修改也可以求多次幂或者其他曲线函数的根。

 

 

幂函数导数公式的证明:

y=x^a

两边取对数lny=alnx

两边对x求导(1/y)*y'=a/x

所以y'=ay/x=ax^a/x=ax^(a-1)

这里,y'=2x

 

 

原理可参考,通俗易懂:https://blog.csdn.net/ccnt_2012/article/details/81837154 

转载于:https://www.cnblogs.com/jojoray/p/11498894.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值