介绍
本文简述牛顿法求算术平方根,进而推导出求一个数的 n n n次方根,并给出相应的代码实现。
二分法
以前我上初中学习平方根的时候,就在思考这个问题。如何计算正实数的平方根,每次在计算的时候心里默念几的平方等于这个数。比如 25 = 5 2 25=5^2 25=52,那么 26 26 26怎么办呢?数学家实在太聪明了,用 26 \sqrt{26} 26来表示这个数。但是这个带根号的数,似乎不是很直观,具体落在那个范围之内还是很难估计。
于是我还是使用这种笨办法,不断尝试法。比如 6 2 = 36 6^2=36 62=36,而 26 26 26介于 5 5 5和 6 6 6的平方之间,因此取区间[5,6]的中点计算 5. 5 2 = 30.25 > 26 5.5^2=30.25>26 5.52=30.25>26发现还是大了,再取区间[5,5.5]的中点 5.2 5 2 = 27.5625 > 26 5.25^2=27.5625>26 5.252=27.5625>26,于是我们再取[5,5.25]区间的中点,计算 5.12 5 2 = 26.265625 > 26 5.125^2=26.265625>26 5.1252=26.265625>26,于是取区间[5,5.125]的中点计算,以此计算下去直到非常接近26为止。多年以后发现,原来这就是二分法。
牛顿迭代法
大牛(牛顿)看了以后,这种方法虽然简单,但是low了一点,需要反复计算那么多次才能达到比较理想的解,于是牛顿迭代法这样出来了。
先考虑平方根问题, f ( x ) = x 2 − p , ( p > 0 ) f(x)=x^2 - p,(p>0) f(x)=x2−p,(p>0),那么函数的零点就是 p p p的算术平方根。
假设 f ( x ) f(x) f(x)在点 ( x n , f ( x n ) ) (x_n, f(x_n)) (xn,f(xn))的切线与 x x x轴的交点为 x n